Index: trunk/Ohana/src/opihi/dvo/ccd.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/ccd.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/ccd.c	(revision 20535)
@@ -7,4 +7,5 @@
   int N1, N2, i1, i2, mode[4];
   int Nsecfilt, KeepNulls;
+  void *Signal;
 
   Catalog catalog;
@@ -55,6 +56,10 @@
   if ((yvec = SelectVector ("yv", ANYVECTOR, TRUE)) == NULL) goto escape;
 
+  // grab data from all selected sky regions
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
   /* loop over regions, extract data for each region */
-  for (k = 0; k < skylist[0].Nregions; k++) {
+  for (k = 0; (k < skylist[0].Nregions) && !interrupt; k++) {
     /* lock, load, unlock catalog */
     catalog.filename = skylist[0].filename[k];
@@ -70,5 +75,5 @@
 
     /* get correct mags, convert to X,Y */
-    for (i = 0; i < catalog.Naverage; i++) {
+    for (i = 0; (i < catalog.Naverage) && !interrupt; i++) {
       M1 = M2 = NULL;
       m = catalog.average[i].measureOffset;
Index: trunk/Ohana/src/opihi/dvo/cmd.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/cmd.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/cmd.c	(revision 20535)
@@ -7,4 +7,5 @@
   int Npts, NPTS, mode[3];
   int Nsecfilt, KeepNulls;
+  void *Signal;
 
   PhotCode *code[3];
@@ -53,6 +54,10 @@
   if ((yvec = SelectVector ("yv", ANYVECTOR, TRUE)) == NULL) goto escape;
 
+  // grab data from all selected sky regions
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
   /* loop over regions, extract data for each region */
-  for (j = 0; j < skylist[0].Nregions; j++) {
+  for (j = 0; (j < skylist[0].Nregions) && !interrupt; j++) {
     /* lock, load, unlock catalog */
     catalog.filename = skylist[0].filename[j];
@@ -68,5 +73,5 @@
     
     /* get correct mags, convert to X,Y */
-    for (i = 0; i < catalog.Naverage; i++) {
+    for (i = 0; (i < catalog.Naverage) && !interrupt; i++) {
       M1 = M3 = NULL;
       m = catalog.average[i].measureOffset;
Index: trunk/Ohana/src/opihi/dvo/gcat.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/gcat.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/gcat.c	(revision 20535)
@@ -8,4 +8,5 @@
   SkyTable *sky;
   SkyList *skylist;
+  void *Signal;
 
   if ((argc != 3) && (argc != 4)) {
@@ -25,5 +26,9 @@
   skylist = SkyListByRadius (sky, -1, Ra, Dec, Radius);
 
-  for (i = 0; i < skylist[0].Nregions; i++) {
+  // prepare to handle interrupt signals
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
+  for (i = 0; (i < skylist[0].Nregions) && !interrupt; i++) {
     if (stat (skylist[0].filename[i], &filestat) != -1) {
       gprint (GP_ERR, "%3d %s *\n", i, skylist[0].regions[i][0].name);
Index: trunk/Ohana/src/opihi/dvo/imdata.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/imdata.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/imdata.c	(revision 20535)
@@ -15,4 +15,5 @@
   Vector *vec;
   SkyRegionSelection *selection;
+  void *Signal;
 
   // parse skyregion options
@@ -127,6 +128,10 @@
   vec[0].Nelements = N = 0;
 
+  // prepare to handle interrupt signals
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
   /* for each region file, extract the data of interest in the right time range */
-  for (j = 0; j < skylist[0].Nregions; j++) {
+  for (j = 0; (j < skylist[0].Nregions) && !interrupt; j++) {
 
     /* get file name and open */
Index: trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/mextract.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/mextract.c	(revision 20535)
@@ -105,4 +105,5 @@
   Signal = signal (SIGINT, handle_interrupt);
   interrupt = FALSE;
+
   for (i = 0; (i < skylist[0].Nregions) && !interrupt; i++) {
     /* lock, load, unlock catalog */
Index: trunk/Ohana/src/opihi/dvo/paverage.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/paverage.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/paverage.c	(revision 20535)
@@ -6,9 +6,10 @@
   FILE *f;
   int i, j, kapa, Narg, Npts, NPTS, status, VERBOSE;
-  int Nsecfilt, Nsec;
+  int Nsecfilt, Nsec, Nloaded;
   double Mz, Mr, mag;
   double Radius, Rmin, Rmax, R, D;
   unsigned IDclip, IDchoice, LimExclude;
   float *Xvec, *Yvec, *Zvec;
+  void *Signal;
 
   PhotCode *photcode;
@@ -99,5 +100,10 @@
   ALLOCATE (Zvec, float, NPTS);
 
-  for (j = 0; j < skylist[0].Nregions; j++) {
+  // prepare to handle interrupt signals
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
+  Nloaded = 0;
+  for (j = 0; (j < skylist[0].Nregions) && !interrupt; j++) {
     catalog.filename = skylist[0].filename[j];
     catalog.catflags = LOAD_AVES | LOAD_SECF;
@@ -115,5 +121,5 @@
 
     /* project stars to screen display coords */
-    for (i = 0; i < catalog.Naverage; i++) {
+    for (i = 0; (i < catalog.Naverage) && !interrupt; i++) {
       if (IDclip && (average[i].code != IDchoice)) continue;
       average[i].R = ohana_normalize_angle (average[i].R);
@@ -128,8 +134,5 @@
       D = average[i].D;
       status = fRD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
-      if (!status) {
-	  fprintf (stderr, ".");
-	  continue;
-      }
+      if (!status) continue;
       Npts ++;
 
@@ -140,9 +143,11 @@
 	  REALLOCATE (Zvec, float, NPTS);
       }
-      if (Npts > NCHUNK) {
+      if ((Npts > NCHUNK) || (Nloaded >= 25)) {
 	  PlotVectorTriplet (kapa, Npts, Xvec, Yvec, Zvec, &graphmode);
 	  Npts = 0;
+	  Nloaded = 0;
       }
     }
+    Nloaded ++;
     dvo_catalog_free (&catalog);
   }
Index: trunk/Ohana/src/opihi/dvo/pmeasure.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/pmeasure.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/pmeasure.c	(revision 20535)
@@ -7,5 +7,5 @@
   
   FILE *f;
-  int i, j, k, m, kapa, Narg, Npts, NPTS, status, VERBOSE, TimeSelect;
+  int i, j, k, m, kapa, Narg, Npts, NPTS, status, VERBOSE, TimeSelect, Nloaded;
   double Mz, Mr, mag;
   double Radius, Rmin, Rmax, R, D, trange;
@@ -16,4 +16,5 @@
   float *Xvec, *Yvec, *Zvec;
   time_t tzero, tend;
+  void *Signal;
 
   SkyTable *sky;
@@ -172,5 +173,10 @@
   ALLOCATE (Zvec, float, NPTS);
 
-  for (j = 0; j < skylist[0].Nregions; j++) {
+  // prepare to handle interrupt signals
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
+  Nloaded = 0;
+  for (j = 0; (j < skylist[0].Nregions) && !interrupt; j++) {
     catalog.filename = skylist[0].filename[j];
     catalog.catflags = LOAD_AVES | LOAD_MEAS;
@@ -185,5 +191,5 @@
 
     /* project stars to screen display coords */
-    for (i = 0; i < catalog.Naverage; i++) {
+    for (i = 0; (i < catalog.Naverage) && !interrupt; i++) {
       if (IDclip && (catalog.average[i].code != IDchoice)) continue;
       catalog.average[i].R = ohana_normalize_angle (catalog.average[i].R);
@@ -213,8 +219,5 @@
 	}
 	status = fRD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
-	if (!status) {
-	  fprintf (stderr, ".");
-	  continue;
-	}
+	if (!status) continue;
 	Npts ++;
 
@@ -225,10 +228,12 @@
 	    REALLOCATE (Zvec, float, NPTS);
 	}
-	if (Npts > NCHUNK) {
+	if ((Npts > NCHUNK) || (Nloaded >= 25)) {
 	    PlotVectorTriplet (kapa, Npts, Xvec, Yvec, Zvec, &graphmode);
 	    Npts = 0;
+	    Nloaded = 0;
 	}
       }
     }
+    Nloaded ++;
     dvo_catalog_free (&catalog);
   }
Index: trunk/Ohana/src/opihi/dvo/skycat.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/skycat.c	(revision 20534)
+++ trunk/Ohana/src/opihi/dvo/skycat.c	(revision 20535)
@@ -14,4 +14,5 @@
   SkyList *skylist;
   SkyRegion **regions;
+  void *Signal;
 
   VERBOSE = FALSE;
@@ -60,5 +61,9 @@
   Nregions = skylist[0].Nregions;
 
-  for (i = 0; i < Nregions; i++) {
+  // prepare to handle interrupt signals
+  Signal = signal (SIGINT, handle_interrupt);
+  interrupt = FALSE;
+
+  for (i = 0; (i < Nregions) && !interrupt; i++) {
     if (ShowAll || (stat (skylist[0].filename[i], &filestat) != -1)) {
       if (VERBOSE) gprint (GP_ERR, "%3d %s %6.2f - %6.2f, %6.2f - %6.2f\n", i, regions[i][0].name, 
