diff --git a/segmentmodel.py b/segmentmodel.py
index bbfc144de8742b5351d122957aa46f67f4885934..3ad950f64f068a5cb7c12e5813457d3693a18d85 100644
--- a/segmentmodel.py
+++ b/segmentmodel.py
@@ -333,7 +333,7 @@ class Segment(ConnectableElement, Group):
     
     def randomize_unset_sequence(self):
         bases = list(seqComplement.keys())
-        bases = ['T']        ## FOR DEBUG
+        # bases = ['T']        ## FOR DEBUG
         if self.sequence is None:
             self.sequence = [random.choice(bases) for i in range(self.num_nts)]
         else:
@@ -890,20 +890,24 @@ class StrandInSegment(Group):
         assert( np.abs(self.num_nts-nts) < 1e-5 )
 
         # print(" Creating {}-nt StrandInSegment in {} from {} to {} {}".format(self.num_nts, segment.name, start, end, is_fwd))
+    
+    def _nucleotide_ids(self):
+        nt0 = self.start # seg.contour_to_nt_pos(self.start)
+        assert( np.abs(nt0 - round(nt0)) < 1e-5 )
+        nt0 = int(round(nt0))
+        assert( (self.end-self.start) >= 0 or not self.is_fwd )
+
+        direction = (2*self.is_fwd-1)
+        return range(nt0,nt0 + direction*self.num_nts, direction)
 
     def get_sequence(self):
         """ return 5-to-3 """
         # TODOTODO test
         seg = self.segment
-        nt0 = self.start # seg.contour_to_nt_pos(self.start)
-        assert( np.abs(nt0 - round(nt0)) < 1e-5 )
-        nt0 = int(round(nt0))
-        assert( (self.end-self.start) >= 0 or not self.is_fwd )
         if self.is_fwd:
-            # return [seqComplement[seg.sequence[nt]] for nt in range(nt0,nt0+self.num_nts)]
-            return [seg.sequence[nt] for nt in range(nt0,nt0+self.num_nts)]
+            return [seg.sequence[nt] for nt in self._nucleotide_ids()]
         else:
-            return [seqComplement[seg.sequence[nt]] for nt in range(nt0,nt0-self.num_nts,-1)]
+            return [seqComplement[seg.sequence[nt]] for nt in self._nucleotide_ids()]
     
     def get_contour_points(self):
         c0,c1 = [self.segment.nt_pos_to_contour(p) for p in (self.start,self.end)]
@@ -930,17 +934,23 @@ class Strand(Group):
         self.add( s )
         self.num_nts += s.num_nts
 
-    def set_sequence(self,sequence):
+    def set_sequence(self,sequence, set_complement=True):
         ## validate input
         assert( np.all( [i in ('A','T','C','G') for i in sequence] ) )
-
+        assert( len(sequence) >= self.num_nts )
+        
+        seq_idx = 0
         ## set sequence on each segment
         for s in self.children:
             seg = s.segment
-            # TODOTODO
-            ...
+            if seg.sequence is None:
+                seg.sequence = [None for i in range(seg.num_nts)]
 
-        ...
+            if self.is_fwd:
+                seg.sequence[nt] = sequence[seq_idx]
+            else:
+                seg.sequence[nt] = seqComplement[sequence[seq_idx]]
+            seq_idx += 1
 
     # def get_sequence(self):
     #     sequence = []