Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 34260)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 34291)
@@ -305,4 +305,8 @@
   double *RA_origin;
   double *RA_offset;
+  double *DEC_min;
+  double *DEC_max;
+  double *DEC_min_raw;
+  double *DEC_max_raw;
 
   int *Nband;
Index: trunk/Ohana/src/libdvo/src/BoundaryTree.c
===================================================================
--- trunk/Ohana/src/libdvo/src/BoundaryTree.c	(revision 34260)
+++ trunk/Ohana/src/libdvo/src/BoundaryTree.c	(revision 34291)
@@ -59,7 +59,11 @@
  
     // need to create and assign to flat-field correction
-    GET_COLUMN_RAW(tree->Nband,     "NBAND",  	 int);
-    GET_COLUMN_RAW(tree->RA_origin, "RA_ORIGIN", double);
-    GET_COLUMN_RAW(tree->RA_offset, "RA_OFFSET", double);
+    GET_COLUMN_RAW(tree->Nband,       "NBAND",  	 int);
+    GET_COLUMN_RAW(tree->RA_origin,   "RA_ORIGIN",   double);
+    GET_COLUMN_RAW(tree->RA_offset,   "RA_OFFSET",   double);
+    GET_COLUMN_RAW(tree->DEC_min  ,   "DEC_MIN",     double);
+    GET_COLUMN_RAW(tree->DEC_max  ,   "DEC_MAX",     double);
+    GET_COLUMN_RAW(tree->DEC_min_raw, "DEC_MIN_RAW", double);
+    GET_COLUMN_RAW(tree->DEC_max_raw, "DEC_MAX_RAW", double);
     gfits_free_header (&theader);
     gfits_free_table  (&ftable);
@@ -171,8 +175,12 @@
     gfits_create_table_header (&theader, "BINTABLE", "ZONE_DATA");
 
-    gfits_define_bintable_column (&theader, "J", "ZONE",      "zone sequence number", "none", 1.0, 0.0);
-    gfits_define_bintable_column (&theader, "J", "NBAND",     "number of cells in each zone", "none", 1.0, 0.0);
-    gfits_define_bintable_column (&theader, "D", "RA_ORIGIN", "origin of ra cell sequence", "degree", 1.0, 0.0);
-    gfits_define_bintable_column (&theader, "D", "RA_OFFSET", "offset per cell of ra cell sequence", "degree/cell", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "J", "ZONE",      	"zone sequence number", "none", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "J", "NBAND",     	"number of cells in each zone", "none", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "RA_ORIGIN", 	"origin of ra cell sequence", "degree", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "RA_OFFSET", 	"offset per cell of ra cell sequence", "degree/cell", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "DEC_MIN",   	"min dec for zone", "degree", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "DEC_MAX",   	"max dec for zone", "degree", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "DEC_MIN_RAW", "min dec for zone", "degree", 1.0, 0.0);
+    gfits_define_bintable_column (&theader, "D", "DEC_MAX_RAW", "max dec for zone", "degree", 1.0, 0.0);
 
     // generate the output array that carries the data
@@ -188,8 +196,12 @@
 
     // add the columns to the output array
-    gfits_set_bintable_column (&theader, &ftable, "ZONE",   	zone,            tree->Nzone);
-    gfits_set_bintable_column (&theader, &ftable, "NBAND",   	tree->Nband,     tree->Nzone);
-    gfits_set_bintable_column (&theader, &ftable, "RA_ORIGIN", 	tree->RA_origin, tree->Nzone);
-    gfits_set_bintable_column (&theader, &ftable, "RA_OFFSET", 	tree->RA_offset, tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "ZONE",   	 zone,              tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "NBAND",   	 tree->Nband,       tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "RA_ORIGIN", 	 tree->RA_origin,   tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "RA_OFFSET", 	 tree->RA_offset,   tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "DEC_MIN", 	 tree->DEC_min,     tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "DEC_MAX", 	 tree->DEC_max,     tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "DEC_MIN_RAW", tree->DEC_min_raw, tree->Nzone);
+    gfits_set_bintable_column (&theader, &ftable, "DEC_MAX_RAW", tree->DEC_max_raw, tree->Nzone);
     free (zone);
 
@@ -283,4 +295,18 @@
   if (*zone >= tree->Nzone) return FALSE;
 
+  // test if:
+  // (a) DEC_min,DEC_max of *zone are defined (not NAN)
+  // (b) dec for *zone falls in range DEC_min[*zone] <= dec < DEC_max[*zone]
+  //     migrate up or down
+
+  // TEST int zone_raw = *zone;
+  if (isfinite(tree->DEC_min[*zone])) {
+    if (dec >= tree->DEC_max[*zone]) (*zone) ++;
+    if (dec <  tree->DEC_min[*zone]) (*zone) --;
+    // TEST assert (dec <  tree->DEC_max[*zone]);
+    // TEST assert (dec >= tree->DEC_min[*zone]);
+  }
+  // TEST assert (zone_raw > -1);
+
   // now select the RA bin for that zone
   *band = (ra - tree->RA_origin[*zone]) / tree->RA_offset[*zone];
