diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py
index e02535ef4bc0c796b7cc8ba4e62e5274ec4f8254..654d4fbe8406b8e293e181d85aab13685a37b702 100755
--- a/warden3/warden_server/warden_server.py
+++ b/warden3/warden_server/warden_server.py
@@ -829,6 +829,8 @@ def expose(read=1, write=0, debug=0):
         meth.read = read
         meth.write = write
         meth.debug = debug
+        if not hasattr(meth, "arguments"):
+            meth.arguments = meth.func_code.co_varnames[:meth.func_code.co_argcount]
         return meth
 
     return expose_deco
@@ -846,7 +848,7 @@ class Server(ObjectBase):
         return "%s(req=%s, auth=%s, handler=%s)" % (type(self).__name__, type(self.req).__name__, type(self.auth).__name__, type(self.handler).__name__)
 
 
-    def sanitize_args(self, path, func, args, exclude=["self"]):
+    def sanitize_args(self, path, func, args, exclude=["self", "post"]):
         # silently remove internal args, these should never be used
         # but if somebody does, we do not expose them by error message
         intargs = set(args).intersection(exclude)
@@ -857,7 +859,7 @@ class Server(ObjectBase):
 
         # silently remove surplus arguments - potential forward
         # compatibility (unknown args will get ignored)
-        badargs = set(args) - set(func.func_code.co_varnames[0:func.func_code.co_argcount])
+        badargs = set(args) - set(func.arguments)
         for a in badargs:
             del args[a]
         if badargs:
@@ -953,6 +955,10 @@ def json_wrapper(method):
 
         return [('Content-type', 'application/json')], output
 
+    try:
+        meth_deco.arguments = method.arguments
+    except AttributeError:
+        meth_deco.arguments = method.func_code.co_varnames[:method.func_code.co_argcount]
     return meth_deco