diff --git a/firanka/ranges.py b/firanka/ranges.py
index 8387735e98e59f706a0ab9bd056d09690823cf83..491ed7b0029dd40112b626940cbd8a42ded4318a 100644
--- a/firanka/ranges.py
+++ b/firanka/ranges.py
@@ -1,7 +1,6 @@
 # coding=UTF-8
 from __future__ import print_function, absolute_import, division
 
-import functools
 import math
 
 import six
@@ -14,7 +13,7 @@ __all__ = [
 
 
 def _pre_range(fun):
-    @functools.wraps(fun)
+    @six.wraps(fun)
     def inner(self, arg, *args, **kwargs):
         if not isinstance(arg, Range):
             arg = Range(arg)
diff --git a/firanka/series/base.py b/firanka/series/base.py
index b31c3ad802f20e7b24953c4a2624db7bf0f3b45a..2001146f02048cd67c03a83da73e9dc317ea7c5a 100644
--- a/firanka/series/base.py
+++ b/firanka/series/base.py
@@ -9,7 +9,8 @@ from firanka.ranges import Range, EMPTY_SET
 from sortedcontainers import SortedList
 
 
-def has_arguments(fun, n):
+def _has_arguments(fun, n):
+    assert hasattr(fun, '__call__'), 'function is not callable!'
     return len(inspect.getargspec(fun).args) == n
 
 
@@ -65,7 +66,7 @@ class Series(object):
         :param fun: callable(index: float, value: any) => 1
         :return: Series instance
         """
-        assert has_arguments(fun, 2), 'Callable to apply needs 2 arguments'
+        assert _has_arguments(fun, 2), 'Callable to apply needs 2 arguments'
 
         return AlteredSeries(self, applyfun=fun)
 
@@ -94,7 +95,7 @@ class Series(object):
         :param fun: callable(t: float, v1: any, v2: any) => value
         :return: new Series instance
         """
-        assert has_arguments(fun, 3), 'Callable to join needs 3 arguments'
+        assert _has_arguments(fun, 3), 'Callable to join needs 3 arguments'
 
         return JoinedSeries(self, series, fun)
 
@@ -250,7 +251,7 @@ class JoinedSeries(Series):
 
     def __init__(self, ser1, ser2, op, *args, **kwargs):
         """:type op: callable(time: float, v1, v2: any) -> v"""
-        assert has_arguments(op, 3), 'op must have 3 arguments'
+        assert _has_arguments(op, 3), 'op must have 3 arguments'
 
         super(JoinedSeries, self).__init__(ser1.domain.intersection(ser2.domain), *args, **kwargs)
         self.ser1 = ser1