diff --git a/atrcopy/segments.py b/atrcopy/segments.py
index 2c16e1a..edbb79a 100644
--- a/atrcopy/segments.py
+++ b/atrcopy/segments.py
@@ -146,6 +146,7 @@ class SegmentData(object):
             self.data = OrderWrapper(data, order)
         else:
             self.data = to_numpy(data)
+        self.calc_lookups()
         if style is None:
             if debug:
                 self.style = np.arange(len(self), dtype=np.uint8)
@@ -160,13 +161,12 @@ class SegmentData(object):
             extra = UserExtraData()
         self.extra = extra
         self.reverse_index_mapping = None
-        self.calc_lookups()
 
     def __str__(self):
         return "SegmentData id=%x indexed=%s data=%s len=%s" % (id(self), self.is_indexed, type(self.data), len(self.data))
 
     def __len__(self):
-        return len(self.data)
+        return self.data_length
 
     def resize(self, newsize):
         if self.data.base is None:
@@ -211,6 +211,7 @@ class SegmentData(object):
         else:
             self.data_start, self.data_end = np.byte_bounds(self.data)
             self.base_start, self.base_end = np.byte_bounds(self.data.base)
+        self.data_length = len(self.data)
 
     @property
     def bufferedio(self):
@@ -564,7 +565,7 @@ class DefaultSegment(object):
         return s
 
     def __len__(self):
-        return len(self.rawdata)
+        return self.rawdata.data_length
 
     def __getitem__(self, index):
         return self.data[index]