Index: stage3.c
===================================================================
--- stage3.c	(revision 64017)
+++ stage3.c	(working copy)
@@ -6912,8 +6912,9 @@
 #ifdef PMAP
 		     char *queryaaseq_ptr,
 #endif
-		     char *queryseq_ptr, char *queryuc_ptr, char *genomicseg_ptr, char *genomicuc_ptr, bool watsonp,
-		     Pairpool_T pairpool, Oligoindex_T *oligoindices_minor, int noligoindices_minor,
+		     char *queryseq_ptr, char *queryuc_ptr, char *genomicseg_ptr, char *genomicuc_ptr,
+		     bool watsonp, int genestrand, Pairpool_T pairpool,
+		     Oligoindex_T *oligoindices_minor, int noligoindices_minor,
 		     Diagpool_T diagpool, int sufflookback, int nsufflookback, int maxintronlen_bound) {
   List_T gappairs, peeled_pairs = NULL, peeled_path = NULL;
   int querydp5, genomedp5, querydp3, genomedp3, source, indexsize;
@@ -6964,9 +6965,9 @@
 				&(queryseq_ptr[querydp5]),&(queryuc_ptr[querydp5]),
 				/*querylength*/querydp3-querydp5+1,/*query_offset*/querydp5,
 
-				&(genomicseg_ptr[genomedp5]),genomicuc_ptr,
+				genomicseg_ptr,genomicuc_ptr,
 				genomicstart,genomicend,mappingstart,mappingend,
-				/*plusp*/watsonp,genomiclength,/*genomic_offset*/0,
+				/*plusp*/watsonp,genestrand,genomiclength,
 
 				oligoindices_minor,noligoindices_minor,/*proceed_pctcoverage*/0.80,
 				pairpool,diagpool,sufflookback,nsufflookback,maxintronlen_bound,
@@ -7011,8 +7012,9 @@
 		   char *queryaaseq_ptr,
 #endif
 		   char *queryseq_ptr, char *queryuc_ptr, char *genomicseg_ptr, char *genomicuc_ptr,
-		   int cdna_direction, bool watsonp, bool jump_late_p, Pairpool_T pairpool, Dynprog_T dynprogM,
-		   int maxpeelback, Oligoindex_T *oligoindices_minor, int noligoindices_minor, Diagpool_T diagpool,
+		   int cdna_direction, bool watsonp, int genestrand, bool jump_late_p,
+		   Pairpool_T pairpool, Dynprog_T dynprogM, int maxpeelback,
+		   Oligoindex_T *oligoindices_minor, int noligoindices_minor, Diagpool_T diagpool,
 		   int sufflookback, int nsufflookback, int maxintronlen_bound,
 		   int extraband_single, double defect_rate, int close_indels_mode) {
 
@@ -7065,9 +7067,9 @@
 #ifdef PMAP
 				      queryaaseq_ptr,
 #endif
-				      queryseq_ptr,queryuc_ptr,genomicseg_ptr,genomicuc_ptr,watsonp,pairpool,
-				      oligoindices_minor,noligoindices_minor,diagpool,sufflookback,nsufflookback,
-				      maxintronlen_bound);
+				      queryseq_ptr,queryuc_ptr,genomicseg_ptr,genomicuc_ptr,watsonp,genestrand,
+				      pairpool,oligoindices_minor,noligoindices_minor,diagpool,
+				      sufflookback,nsufflookback,maxintronlen_bound);
 	}
       }
     }
@@ -8430,7 +8432,7 @@
 
 static List_T
 path_compute (double *defect_rate, int *intronlen, int *nonintronlen,
-	      List_T path, int cdna_direction, bool watsonp, bool jump_late_p,
+	      List_T path, int cdna_direction, bool watsonp, int genestrand, bool jump_late_p,
 	      int querylength, int genomiclength,
 #ifdef GSNAP
 #ifdef END_KNOWNSPLICING_SHORTCUT
@@ -8476,7 +8478,8 @@
   if (stage3debug == POST_STAGE2) {
     pairs = List_reverse(path);
     path = insert_gapholders(pairs,pairpool);
-    return path;
+    pairs = List_reverse(path);
+    return pairs;
   }
 
   iter0 = 0;
@@ -8500,7 +8503,8 @@
     }
 
     if (stage3debug == POST_SMOOTHING) {
-      return path;
+      pairs = List_reverse(path);
+      return pairs;
     }
 
 #ifdef PMAP
@@ -8554,7 +8558,8 @@
 
     if (stage3debug == POST_SINGLES) {
       path = insert_gapholders(pairs,pairpool);
-      return path;
+      pairs = List_reverse(path);
+      return pairs;
     }
 
 
@@ -8628,7 +8633,8 @@
 
     if (stage3debug == POST_INTRONS) {
       path = insert_gapholders(pairs,pairpool);
-      return path;
+      pairs = List_reverse(path);
+      return pairs;
     }
 
     /* Pass 3b: trim end exons: pairs -> pairs */
@@ -8651,7 +8657,8 @@
 
     if (stage3debug == POST_HMM) {
       path = insert_gapholders(pairs,pairpool);
-      return path;
+      pairs = List_reverse(path);
+      return pairs;
     }
 
     /* Pass 5: Fix dual breaks */
@@ -8675,14 +8682,15 @@
 			      queryaaseq_ptr,
 #endif
 			      queryseq_ptr,queryuc_ptr,genomicseg_ptr,genomicuc_ptr,
-			      cdna_direction,watsonp,jump_late_p,pairpool,dynprogM,maxpeelback,
+			      cdna_direction,watsonp,genestrand,jump_late_p,pairpool,dynprogM,maxpeelback,
 			      oligoindices_minor,noligoindices_minor,diagpool,sufflookback,nsufflookback,
 			      maxintronlen_bound,extraband_single,*defect_rate,close_indels_mode);
     /* Must end with path to start loop */
     path = insert_gapholders(pairs,pairpool);
 
     if (stage3debug == POST_DUAL_BREAKS) {
-      return path;
+      pairs = List_reverse(path);
+      return pairs;
     }
 
     iter0++;
@@ -8692,7 +8700,8 @@
   if (stage3debug == POST_CYCLES) {
     pairs = List_reverse(path);
     path = insert_gapholders(pairs,pairpool);
-    return path;
+    pairs = List_reverse(path);
+    return pairs;
   }
 
 
@@ -8716,7 +8725,8 @@
 
   if (stage3debug == POST_CANONICAL) {
     path = insert_gapholders(pairs,pairpool);
-    return path;
+    pairs = List_reverse(path);
+    return pairs;
   }
 
 
@@ -9461,11 +9471,11 @@
   Pair_T firstpair, lastpair;
 #endif
 
-
   maxpeelback5 = maxpeelback3 = maxpeelback;
 
 
   debug3(printf("Entering path_trim with cdna_direction %d and sensedir %d\n",*cdna_direction,*sensedir));
+  Pair_dump_list(pairs,true);
 
 #if 0
   /* Performed at end of path_compute */
@@ -9694,7 +9704,7 @@
       pairs = List_reverse(path);
     }
 
-    debug3(printf("After trim ends (nmatches_posttrim %d):\n",*nmatches_posttrim));
+    debug3(printf("After trim ends:\n"));
     debug3(Pair_dump_list(pairs,true));
   }
 
@@ -9738,7 +9748,7 @@
 		char *genomicseg_ptr, char *genomicuc_ptr,
 		Chrnum_T chrnum, Genomicpos_T chroffset, Genomicpos_T chrpos,
 		Genomicpos_T knownsplice_limit_low, Genomicpos_T knownsplice_limit_high,
-		Genome_T genome, bool usersegment_p, bool watsonp, bool jump_late_p,
+		Genome_T genome, bool usersegment_p, bool watsonp, int genestrand, bool jump_late_p,
 		int maxpeelback, int maxpeelback_distalmedial, int nullgap,
 		int extramaterial_end, int extramaterial_paired,
 		int extraband_single, int extraband_end, int extraband_paired, int minendexon,
@@ -9819,8 +9829,8 @@
 
   if (path_fwd != NULL) {
     pairs_fwd = path_compute(&fwd_defect_rate,&fwd_intronlen,&fwd_nonintronlen,
-			     path_fwd,/*cdna_direction*/+1,watsonp,jump_late_p,querylength,
-			     genomiclength,
+			     path_fwd,/*cdna_direction*/+1,watsonp,genestrand,
+			     jump_late_p,querylength, genomiclength,
 #ifdef GSNAP
 #ifdef END_KNOWNSPLICING_SHORTCUT
 			     cutoff_level,queryptr,query_compress,
@@ -9861,11 +9871,12 @@
     pairs_fwd = NULL;
   }
 
+
 #ifndef PMAP
   if (path_rev != NULL) {
     pairs_rev = path_compute(&rev_defect_rate,&rev_intronlen,&rev_nonintronlen,
-			     path_rev,/*cdna_direction*/-1,watsonp,jump_late_p,querylength,
-			     genomiclength,
+			     path_rev,/*cdna_direction*/-1,watsonp,genestrand,
+			     jump_late_p,querylength,genomiclength,
 #ifdef GSNAP
 #ifdef END_KNOWNSPLICING_SHORTCUT
 			     cutoff_level,queryptr,query_compress,
