diff --git a/README.md b/README.md
index f14d95ab6f4e36755c758d87e98bdd6e8f9a7a10..a660d10052c572ba46d35746f7c008762b9ba5a7 100644
--- a/README.md
+++ b/README.md
@@ -109,6 +109,13 @@ and will do classical linear interpolation.
 They can either utilize an existing discrete series, or be created just as
 any other discrete series would be.
 
+## Builders
+
+## DiscreteSeriesBuilder
+
+Sometimes you just need to update a DiscreteSeries, or to blang a brand new one. This little fella
+will help you out.
+
 ## Ranges
 
 Can be imported from _sai.ranges_.
diff --git a/firanka/builder.py b/firanka/builders.py
similarity index 95%
rename from firanka/builder.py
rename to firanka/builders.py
index b9d499aa7007ea9ba73fcec6fd576c80133a8962..769135294e861f11cf7f3911bc1ddc6e2669ad7e 100644
--- a/firanka/builder.py
+++ b/firanka/builders.py
@@ -11,10 +11,10 @@ Update knowledge of current discrete series
 """
 
 __all__ = [
-    'DiscreteKnowledgeBuilder',
+    'DiscreteSeriesBuilder',
 ]
 
-class DiscreteKnowledgeBuilder(object):
+class DiscreteSeriesBuilder(object):
     def __init__(self, series=None):
 
         if series is None:
diff --git a/firanka/series/base.py b/firanka/series/base.py
index 79572efd3404392e7a41321f853f870742dc6e02..2855e208337b741c37aaca02b9bb6e2325a111c1 100644
--- a/firanka/series/base.py
+++ b/firanka/series/base.py
@@ -99,6 +99,10 @@ class Series(object):
 
 
 class DiscreteSeries(Series):
+    """
+    A series with lots of small rectangles interpolating something
+    """
+
     def __init__(self, data, domain=None, *args, **kwargs):
 
         data = SortedList(data)
diff --git a/firanka/series/modulo.py b/firanka/series/modulo.py
index ed728086214a840ea39286448302e1994d4afd06..e0063c69e14fd9c1ed50a1d7ea3c017bae6ca4c1 100644
--- a/firanka/series/modulo.py
+++ b/firanka/series/modulo.py
@@ -24,7 +24,12 @@ class ModuloSeries(Series):
         elif math.isinf(self.period):
             raise ValueError('Modulo series cannot have an infinite period')
 
+        # We internally translate the start of the series' domain to be at 0, because it simpler for us :D
+        self.intertrans = -self.series.domain.start
+
     def _get_for(self, item):
+        item += self.intertrans
+
         if item < 0:
             item = -(item // self.period) * self.period + item
         elif item > self.period:
diff --git a/tests/test_builder.py b/tests/test_builder.py
index 51c816a350ef8a5014e3c6dfa3508aa8e44e6452..918821500ae7e90e6d92b68917e383d063ddc082 100644
--- a/tests/test_builder.py
+++ b/tests/test_builder.py
@@ -3,7 +3,7 @@ from __future__ import print_function, absolute_import, division
 import six
 import unittest
 
-from firanka.builder import DiscreteKnowledgeBuilder
+from firanka.builders import DiscreteSeriesBuilder
 from firanka.series import DiscreteSeries
 
 
@@ -12,7 +12,7 @@ class TestBuilder(unittest.TestCase):
 
         ser = DiscreteSeries([(0,1), (1,2)])
 
-        kb = DiscreteKnowledgeBuilder(ser)
+        kb = DiscreteSeriesBuilder(ser)
 
         kb.put(3, 4)
         kb.put(-1, 5)
@@ -23,3 +23,15 @@ class TestBuilder(unittest.TestCase):
 
         self.assertTrue(s2.domain, '<-1;3>')
         self.assertEqual(s2.data,[(-1,6), (0,2), (1,2), (3,4)])
+
+    def test_exnihilo(self):
+        kb = DiscreteSeriesBuilder()
+
+        kb.put(0, 0)
+        kb.put(1, 1)
+
+        s = kb.as_series()
+
+        self.assertEqual(s[0],0)
+        self.assertEqual(s[1],1)
+        self.assertEqual(s.domain, '<0;1>')