Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 40582)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 40583)
@@ -442,4 +442,5 @@
   int    **cell; // zone,band -> proj cell sequence
   int    **projID; // zone,band -> proj cell ID
+  int    **skycellID; // zone,band -> starting skycell ID
   char  ***name; // projection cell name
   
Index: trunk/Ohana/src/libdvo/src/BoundaryTree.c
===================================================================
--- trunk/Ohana/src/libdvo/src/BoundaryTree.c	(revision 40582)
+++ trunk/Ohana/src/libdvo/src/BoundaryTree.c	(revision 40583)
@@ -27,4 +27,5 @@
     FREE (tree->cell[i]);
     FREE (tree->projID[i]);
+    FREE (tree->skycellID[i]);
     FREE (tree->name[i]);
   }
@@ -38,4 +39,5 @@
   FREE (tree->cell);
   FREE (tree->projID);
+  FREE (tree->skycellID);
   FREE (tree->name);
 
@@ -155,4 +157,5 @@
   ALLOCATE (tree->cell,    int *, tree->Nzone);
   ALLOCATE (tree->projID,  int *, tree->Nzone);
+  ALLOCATE (tree->skycellID,  int *, tree->Nzone);
   ALLOCATE (tree->name,  char **, tree->Nzone);
   for (i = 0; i < tree->Nzone; i++) {
@@ -165,4 +168,5 @@
     ALLOCATE (tree->cell[i],    int, tree->Nband[i]);
     ALLOCATE (tree->projID[i],  int, tree->Nband[i]);
+    ALLOCATE (tree->skycellID[i],  int, tree->Nband[i]);
     ALLOCATE (tree->name[i], char *, tree->Nband[i]);
     for (j = 0; j < tree->Nband[i]; j++) {
@@ -208,5 +212,13 @@
     memcpy(tree->name[nz][nb], &name[i*BOUNDARY_TREE_NAME_LENGTH], BOUNDARY_TREE_NAME_LENGTH);
     // XXX parse out the ID from the name (skycell.NNNN)
-    tree->projID[nz][nb] = atoi(&tree->name[nz][nb][8]);
+    char *endptr = NULL;
+    tree->projID[nz][nb] = strtol(&tree->name[nz][nb][8], &endptr, 10);
+    if (endptr[0] == '.') {
+      // we have elements after the projID, which should be the skycell ID
+      endptr ++;
+      tree->skycellID[nz][nb] = strtol(endptr, NULL, 10);
+    } else {
+      tree->skycellID[nz][nb] = -1;
+    }
   }
 
Index: trunk/Ohana/src/libdvo/src/TessellationTable.c
===================================================================
--- trunk/Ohana/src/libdvo/src/TessellationTable.c	(revision 40582)
+++ trunk/Ohana/src/libdvo/src/TessellationTable.c	(revision 40583)
@@ -579,5 +579,9 @@
     *tessID = myTess;
     *projID = tess[myTess].tree->projID[zone][band];
-    *skycellID = N;
+    if (tess[myTess].tree->skycellID[zone][band] == -1) {
+      *skycellID = N;
+    } else {
+      *skycellID = tess[myTess].tree->skycellID[zone][band] + N;
+    }      
 
     return TRUE;
