diff --git a/CHANGES.rst b/CHANGES.rst
index ab8d128..41c7cdc 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,12 @@ Changelog
 Here you can see the full list of changes between each intervals release.
 
 
+0.9.1 (2020-12-31)
+^^^^^^^^^^^^^^^^^^
+
+- Fixed discrete interval length (#53)
+
+
 0.9.0 (2020-07-16)
 ^^^^^^^^^^^^^^^^^^
 
diff --git a/intervals/__init__.py b/intervals/__init__.py
index 1636366..32d7508 100644
--- a/intervals/__init__.py
+++ b/intervals/__init__.py
@@ -32,4 +32,4 @@ __all__ = (
 )
 
 
-__version__ = '0.9.0'
+__version__ = '0.9.1'
diff --git a/intervals/interval.py b/intervals/interval.py
index 81bb4b9..9d27a28 100644
--- a/intervals/interval.py
+++ b/intervals/interval.py
@@ -456,6 +456,11 @@ class AbstractInterval(object):
 
     @property
     def length(self):
+        if self.discrete:
+            if not self:
+                return 0
+            if not self.lower_inc or not self.upper_inc:
+                return canonicalize(self, lower_inc=True, upper_inc=True).length
         return abs(self.upper - self.lower)
 
     @property

diff --git a/tests/interval/test_properties.py b/tests/interval/test_properties.py
index d70a8e8..083c9a4 100644
--- a/tests/interval/test_properties.py
+++ b/tests/interval/test_properties.py
@@ -15,16 +15,20 @@ from intervals import (
 
 class TestIntervalProperties(object):
     @mark.parametrize(
-        ('number_range', 'length'),
+        ('interval', 'length'),
         (
-            ([1, 4], 3),
-            ([-1, 1], 2),
-            ((-inf, inf), inf),
-            ((1, inf), inf),
+            (IntInterval([1, 4]), 3),
+            (IntInterval([-1, 1]), 2),
+            (IntInterval([-inf, inf]), inf),
+            (IntInterval([1, inf]), inf),
+            (IntInterval.from_string('(0, 3)'), 1),
+            (IntInterval.from_string('[0, 3)'), 2),
+            (IntInterval.from_string('(0, 2)'), 0),
+            (IntInterval.from_string('(0, 1)'), 0)
         )
     )
-    def test_length(self, number_range, length):
-        assert IntInterval(number_range).length == length
+    def test_length(self, interval, length):
+        assert interval.length == length
 
     @mark.parametrize(
         ('number_range', 'radius'),

length should return the actual length for discrete intervals
``IntInterval.from_string('[0, 2)').length`` should be `1` not `2`
tests/interval/test_properties.py::TestIntervalProperties::test_length[interval4-1] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval5-2] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval6-0] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval7-0]
tests/interval/test_properties.py::TestIntervalProperties::test_length[interval0-3] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval1-2] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval2-length2] tests/interval/test_properties.py::TestIntervalProperties::test_length[interval3-length3] tests/interval/test_properties.py::TestIntervalProperties::test_radius[number_range0-1.5] tests/interval/test_properties.py::TestIntervalProperties::test_radius[number_range1-1.0] tests/interval/test_properties.py::TestIntervalProperties::test_radius[number_range2-1.5] tests/interval/test_properties.py::TestIntervalProperties::test_radius[number_range3-radius3] tests/interval/test_properties.py::TestIntervalProperties::test_radius[number_range4-radius4] tests/interval/test_properties.py::TestIntervalProperties::test_centre[number_range0-2.5] tests/interval/test_properties.py::TestIntervalProperties::test_centre[number_range1-0] tests/interval/test_properties.py::TestIntervalProperties::test_centre[number_range2--2.5] tests/interval/test_properties.py::TestIntervalProperties::test_centre[number_range3-centre3] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval0-True] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval1-True] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval2-False] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval3-False] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval4-False] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval5-False] tests/interval/test_properties.py::TestIntervalProperties::test_is_open[interval6-False] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval0-False] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval1-False] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval2-False] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval3-False] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval4-True] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval5-True] tests/interval/test_properties.py::TestIntervalProperties::test_closed[interval6-True] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval0-True] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval1-False] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval2-False] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval3-True] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval4-True] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval5-False] tests/interval/test_properties.py::TestIntervalProperties::test_empty[interval6-False] tests/interval/test_properties.py::TestIntervalProperties::test_degenerate[interval0-False] tests/interval/test_properties.py::TestIntervalProperties::test_degenerate[interval1-True] tests/interval/test_properties.py::TestIntervalProperties::test_degenerate[interval2-True] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval0-True] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval1-True] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval2-False] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval3-False] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval4-False] tests/interval/test_properties.py::TestIntervalProperties::test_discrete[interval5-True]