diff --git a/firanka/series/__init__.py b/firanka/series/__init__.py
index 433511507577aa789e26da50156158c3ee5a429d..ea3c4b2092c52f9f4f2de02c2f306fdc26f74c12 100644
--- a/firanka/series/__init__.py
+++ b/firanka/series/__init__.py
@@ -5,7 +5,7 @@ import logging
 
 from .exceptions import NotInDomainError, FirankaError
 from .range import Range, REAL_SET
-from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries
+from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries, Series
 
 
 __all__ = [
@@ -16,4 +16,5 @@ __all__ = [
     'FunctionBasedSeries',
     'DiscreteSeries',
     'ModuloSeries',
+    'Series',
 ]
diff --git a/firanka/series/range.py b/firanka/series/range.py
index 82efa3809d754e2db0de86c12453286dc5c8a9e7..1dc63237a22a231deedc8bac7dcf8bb9499be539 100644
--- a/firanka/series/range.py
+++ b/firanka/series/range.py
@@ -107,14 +107,14 @@ class Range(object):
 
         if self.start == y.start:
             start = self.start
-            left_inc = self.left_inc or y.left_inc
+            left_inc = self.left_inc and y.left_inc
         else:
             start = y.start
             left_inc = y.left_inc
 
         if self.stop == y.stop:
             stop = self.stop
-            right_inc = self.right_inc or y.right_inc
+            right_inc = self.right_inc and y.right_inc
         else:
             p, q = (self, y) if self.stop < y.stop else (y, self)
             stop = p.stop
diff --git a/firanka/series/series.py b/firanka/series/series.py
index ae7372b8649dd7e1ed0f6f14111cc900c42f30d7..aea37983c6ecacc27bd5fb864f202de99bcd90d5 100644
--- a/firanka/series/series.py
+++ b/firanka/series/series.py
@@ -10,6 +10,12 @@ from .exceptions import NotInDomainError
 
 
 class Series(object):
+    """
+    Abstract, base class for series.
+
+    Your series needs to override just _get_for(x: float) -> v
+    for minimum functionality
+    """
 
     def __init__(self, domain):
         if not isinstance(domain, Range):
@@ -39,7 +45,7 @@ class Series(object):
             return self._get_for(item)
 
     def _get_for(self, item):
-        raise NotImplementedError
+        raise NotImplementedError('This is abstract, override me!')
 
     def eval_points(self, points):
         """
diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py
index 6a6652f7d5de0842d05ef207bded3b57c393f378..068b0b846948ca31cfd0ec8f9aa88c8c7ab63d39 100644
--- a/tests/test_series/test_range.py
+++ b/tests/test_series/test_range.py
@@ -28,6 +28,7 @@ class TestRange(unittest.TestCase):
         self.do_intersect('<-10;-1)', '<-1;1>', True)
         self.do_intersect('<-10;-1)', '(-1;3>', True)
         self.do_intersect('<-10;2)', '<1;5>', '<1;2)')
+        self.do_intersect('<-5;5>', '(-5;5)', '(-5;5)')
 
     def test_str_and_repr_and_bool(self):
         p = Range(-1,1,True,True)
diff --git a/tests/test_series/test_series.py b/tests/test_series/test_series.py
index 232d557a8b5bad3f32db76ee6c887da1ef3d3a15..c7451f87dc30218cb728d0874e661db370513a78 100644
--- a/tests/test_series/test_series.py
+++ b/tests/test_series/test_series.py
@@ -32,6 +32,11 @@ class TestDiscreteSeries(unittest.TestCase):
         self.assertEqual(s[3.5], 0)
         self.assertEqual(s[4], 1)
 
+    def test_slice_outdomain(self):
+        series = DiscreteSeries([[0, 0], [1, 1], [2, 2]])
+
+        self.assertRaises(NotInDomainError, lambda: series[-1:2])
+
     def test_slice(self):
         series = DiscreteSeries([[0, 0], [1, 1], [2, 2]])
 
@@ -89,6 +94,9 @@ class TestDiscreteSeries(unittest.TestCase):
         self.assertIsInstance(sa, DiscreteSeries)
         self.assertEqual(sa.data, [(i, i**2) for i in PTS])
 
+        empty = FunctionBasedSeries(lambda x: x**2, '<-10;10)').discretize([])
+        self.assertTrue(empty.domain.is_empty())
+
 class TestFunctionBasedSeries(unittest.TestCase):
     def test_slice(self):
         series = FunctionBasedSeries(lambda x: x, '<0;2>')