diff --git a/satella/coding/decorators/decorators.py b/satella/coding/decorators/decorators.py
index a908b7b0e978930980d9586269195c30ccdc7600..a17c42457b90a085a5e0bad468f437c5d7e312e8 100644
--- a/satella/coding/decorators/decorators.py
+++ b/satella/coding/decorators/decorators.py
@@ -338,6 +338,8 @@ def call_method_on_exception(exc_classes, method_name, *args, **kwargs):
     Exception class determination is done by isinstance, so you can go wild with metaclassing.
     Exception will be swallowed. The return value will be taken from the called function.
 
+    Note that the called method must be an instance method.
+
     :param exc_classes: a tuple or an instance class to which react
     :param method_name: name of the method. It must be gettable by getattr
     :param args: arguments to pass to given method
@@ -345,12 +347,12 @@ def call_method_on_exception(exc_classes, method_name, *args, **kwargs):
     """
     def outer(fun):
         @wraps(fun)
-        def inner(self, *args, **kwargs):
+        def inner(self, *f_args, **f_kwargs):
             try:
-                return fun(self, *args, **kwargs)
+                return fun(self, *f_args, **f_kwargs)
             except Exception as e:
                 if isinstance(e, exc_classes):
-                    return getattr(self, method_name)(self, *args, **kwargs)
+                    return getattr(self, method_name)(*args, **kwargs)
                 else:
                     raise
         return inner
diff --git a/tests/test_coding/test_decorators.py b/tests/test_coding/test_decorators.py
index 857ac3201c958b4ef6e76a97ae4833c294e59914..0826265ac6c18b22c835d9c5d0168be29f9c8fb1 100644
--- a/tests/test_coding/test_decorators.py
+++ b/tests/test_coding/test_decorators.py
@@ -33,8 +33,8 @@ class TestDecorators(unittest.TestCase):
             def do(self):
                 raise ValueError()
 
-        a = Test()
-        a.do()
+        c = Test()
+        c.do()
         self.assertTrue(a['called'])
 
     def test_cached_memoizer(self):