diff --git a/segmentmodel.py b/segmentmodel.py
index c6b97bbb20c552ea9672435b79ad350ee5cdc459..3801791238076d0db9372b461f03bbf5f79549cc 100644
--- a/segmentmodel.py
+++ b/segmentmodel.py
@@ -859,11 +859,11 @@ class Segment(ConnectableElement, Group):
         if len(existing_beads) == 0 or existing_beads[0].get_nt_position(self) > 0.5:
             # if len(existing_beads) > 0:            
             #     assert(existing_beads[0].get_nt_position(self) >= 0.5)
-            b = self._generate_one_bead(0, 0)
+            b = self._generate_one_bead( self.nt_pos_to_contour(0), 0)
             existing_beads = [b] + existing_beads
 
         if existing_beads[-1].get_nt_position(self)-(self.num_nts-1) < -0.5:
-            b = self._generate_one_bead(1, 0)
+            b = self._generate_one_bead( self.nt_pos_to_contour(self.num_nts-1), 0)
             existing_beads.append(b)
         assert(len(existing_beads) > 1)
 
@@ -1028,7 +1028,8 @@ class DoubleStrandedSegment(Segment):
         else:
             end2.container._connect( end1.container, Connection( end2, end1, type_=type_ ), in_3prime_direction=True )
     def _get_num_beads(self, contour, max_basepairs_per_bead, max_nucleotides_per_bead):
-        return int(contour*self.num_nts // max_basepairs_per_bead)
+        # return int(contour*self.num_nts // max_basepairs_per_bead)
+        return int(contour*(self.num_nts**2/(self.num_nts+1)) // max_basepairs_per_bead)
 
     def _generate_one_bead(self, contour_position, nts):
         pos = self.contour_to_position(contour_position)
@@ -1146,7 +1147,8 @@ class SingleStrandedSegment(Segment):
                 other._connect(self, Connection( other_loc, loc, type_="sscrossover" ), in_3prime_direction=True )
 
     def _get_num_beads(self, contour, max_basepairs_per_bead, max_nucleotides_per_bead):
-        return int(contour*self.num_nts // max_nucleotides_per_bead)
+        return int(contour*(self.num_nts**2/(self.num_nts+1)) // max_basepairs_per_bead)
+        # return int(contour*self.num_nts // max_nucleotides_per_bead)
 
     def _generate_one_bead(self, contour_position, nts):
         pos = self.contour_to_position(contour_position)