diff --git a/mrdna/readers/segmentmodel_from_lists.py b/mrdna/readers/segmentmodel_from_lists.py
index aa12c75f3315aeaf5e29b4970667457ef5b5364b..d44825edd39e926aed6591f16dfd84953ec652ad 100644
--- a/mrdna/readers/segmentmodel_from_lists.py
+++ b/mrdna/readers/segmentmodel_from_lists.py
@@ -84,10 +84,11 @@ def basepairs_and_stacks_to_helixmap(basepairs,stacks_above):
             assert(helixmap[nt] == -1)
             assert(helixmap[bp] == -1)
 
-            all_nts.append(nt)
             if nt == nt0:
                 break
 
+            all_nts.append(nt)
+
             if counter > 1e6:
                 raise Exception("DNA is apparently too long; probably there is something wrong with the structure")
             counter += 1
@@ -98,7 +99,6 @@ def basepairs_and_stacks_to_helixmap(basepairs,stacks_above):
             for nt in group:
                 bp = basepairs[nt]
                 is_fwd[bp] = 0
-                rank +=1
                 helixmap[nt] = helixmap[bp] = hid
                 helixrank[nt] = helixrank[bp] = rank
                 processed.add(nt)
@@ -263,7 +263,19 @@ def model_from_basepair_stack_3prime(coordinates, basepair, stack, three_prime,
         f1,f2 = [fwd[i] for i in (r1,r2)]
 
         if nt1 in (0,seg1.num_nt-1) or nt2 in (0,seg2.num_nt-1):
-            seg1.add_crossover(nt1,seg2,nt2,[f1,f2],type_="terminal_crossover")
+            if nt1 in (0,seg1.num_nt-1) and nt2 in (0,seg2.num_nt-1):
+                if nt1 == 0:
+                    end1 = seg1.start5 if f1 else seg1.start3
+                else:
+                    end1 = seg1.end3 if f1 else seg1.end5
+                if nt2 == 0:
+                    end2 = seg2.start5 if f2 else seg2.start3
+                else:
+                    end2 = seg2.end3 if f2 else seg2.end5
+                seg1._connect_ends( end1, end2, type_='intrahelical')
+
+            else:
+                seg1.add_crossover(nt1,seg2,nt2,[f1,f2],type_="terminal_crossover")
         else:
             seg1.add_crossover(nt1,seg2,nt2,[f1,f2])