diff --git a/firanka/series/series.py b/firanka/series/series.py
index 331827a41ecdfe10ce69b4ed141fd77fe3b2665c..ae7372b8649dd7e1ed0f6f14111cc900c42f30d7 100644
--- a/firanka/series/series.py
+++ b/firanka/series/series.py
@@ -19,12 +19,14 @@ class Series(object):
     def __getitem__(self, item):
         """
         Return a value for given index, or a subslice of this series
-        :param item: a float, or a slice
+        :param item: a float, or a slice, or a Range
         :return: Series instance or a value
         :raises NotInDomainError: index not in domain
         """
-        if isinstance(item, slice):
-            item = Range(item)
+        if isinstance(item, (Range, slice)):
+            if isinstance(item, slice):
+                item = Range(item)
+
             if item not in self.domain:
                 raise NotInDomainError('slicing beyond series domain')
 
@@ -63,14 +65,14 @@ class Series(object):
         if len(points) == 0:
             return DiscreteSeries([])
 
-        domain = domain or Range(min(points), max(points), True, True)
+        points = list(sorted(points))
+
+        domain = domain or Range(points[0], points[-1], True, True)
 
         if domain not in self.domain:
             raise NotInDomainError('points not inside this series!')
 
-        data = [(i, self[i]) for i in points]
-        data.sort()
-        return DiscreteSeries(data, domain)
+        return DiscreteSeries([(i, self[i]) for i in points], domain)
 
     def join(self, series, fun):
         """
@@ -98,7 +100,7 @@ class AppliedSeries(Series):
         self.series = series
 
     def _get_for(self, item):
-        return self.fun(self._get_for(item))
+        return self.fun(self.series._get_for(item))
 
 
 class TranslatedSeries(Series):
diff --git a/tests/test_series/test_series.py b/tests/test_series/test_series.py
index 98e95c08527303ce869177b2ed063c4125d8acc4..232d557a8b5bad3f32db76ee6c887da1ef3d3a15 100644
--- a/tests/test_series/test_series.py
+++ b/tests/test_series/test_series.py
@@ -92,7 +92,6 @@ class TestDiscreteSeries(unittest.TestCase):
 class TestFunctionBasedSeries(unittest.TestCase):
     def test_slice(self):
         series = FunctionBasedSeries(lambda x: x, '<0;2>')
-
         sp = series[0.5:1.5]
 
         self.assertEqual(sp[0.5], 0.5)
@@ -102,6 +101,11 @@ class TestFunctionBasedSeries(unittest.TestCase):
         self.assertEqual(sp.domain.start, 0.5)
         self.assertEqual(sp.domain.stop, 1.5)
 
+    def test_apply(self):
+        PTS = [-1,-2,-3,1,2,3]
+        series = FunctionBasedSeries(lambda x: x, '<-5;5>').apply(lambda x: x*2)
+
+        self.assertEqual(series.eval_points(PTS), [x*2 for x in PTS])
 
 class TestModuloSeries(unittest.TestCase):
     def test_base(self):