Index: trunk/psModules/src/objects/pmFootprintArraysMerge.c
===================================================================
--- trunk/psModules/src/objects/pmFootprintArraysMerge.c	(revision 24262)
+++ trunk/psModules/src/objects/pmFootprintArraysMerge.c	(revision 24274)
@@ -28,18 +28,26 @@
  */
 psArray *pmFootprintArraysMerge(const psArray *footprints1, // one set of footprints
-				const psArray *footprints2, // the other set
-				const int includePeaks) { // which peaks to set? 0x1 => footprints1, 0x2 => 2
-    assert (footprints1->n == 0 || pmFootprintTest(footprints1->data[0]));
-    assert (footprints2->n == 0 || pmFootprintTest(footprints2->data[0]));
+                                const psArray *footprints2, // the other set
+                                const int includePeaks // which peaks to set? 0x1 => footprints1, 0x2 => 2
+    )
+{
+    if (!footprints1 && !footprints2) {
+        // No footprints in merged array
+        return psArrayAllocEmpty(0);
+    }
 
-    if (footprints1->n == 0 || footprints2->n == 0) {		// nothing to do but put copies on merged
-	const psArray *old = (footprints1->n == 0) ? footprints2 : footprints1;
+    assert(!footprints1 || footprints1->n == 0 || pmFootprintTest(footprints1->data[0]));
+    assert(!footprints2 || footprints2->n == 0 || pmFootprintTest(footprints2->data[0]));
 
-	psArray *merged = psArrayAllocEmpty(old->n);
-	for (int i = 0; i < old->n; i++) {
-	    psArrayAdd(merged, 1, old->data[i]);
-	}
-	
-	return merged;
+    if (!footprints1 || footprints1->n == 0 || !footprints2 || footprints2->n == 0) {
+        // nothing to do but put copies on merged
+        const psArray *old = (!footprints1 || footprints1->n == 0) ? footprints2 : footprints1;
+
+        psArray *merged = psArrayAllocEmpty(old->n);
+        for (int i = 0; i < old->n; i++) {
+            psArrayAdd(merged, 1, old->data[i]);
+        }
+
+        return merged;
     }
     /*
@@ -48,14 +56,14 @@
      */
     {
-	pmFootprint *fp1 = footprints1->data[0];
-	pmFootprint *fp2 = footprints2->data[0];
-	if (fp1->region.x0 != fp2->region.x0 ||
-	    fp1->region.x1 != fp2->region.x1 ||
-	    fp1->region.y0 != fp2->region.y0 ||
-	    fp1->region.y1 != fp2->region.y1) {
-	    psError(PS_ERR_BAD_PARAMETER_SIZE, true,
-		    "The two pmFootprint arrays correspnond to different-sized regions");
-	    return NULL;
-	}
+        pmFootprint *fp1 = footprints1->data[0];
+        pmFootprint *fp2 = footprints2->data[0];
+        if (fp1->region.x0 != fp2->region.x0 ||
+            fp1->region.x1 != fp2->region.x1 ||
+            fp1->region.y0 != fp2->region.y0 ||
+            fp1->region.y1 != fp2->region.y1) {
+            psError(PS_ERR_BAD_PARAMETER_SIZE, true,
+                    "The two pmFootprint arrays correspnond to different-sized regions");
+            return NULL;
+        }
     }
     /*
@@ -72,17 +80,17 @@
      * Now assign the peaks appropriately.  We could do this more efficiently
      * using idImage (which we just freed), but this is easy and probably fast enough
-     */ 
+     */
     if (includePeaks & 0x1) {
-	psArray *peaks = pmFootprintArrayToPeaks(footprints1);
-	pmFootprintsAssignPeaks(merged, peaks);
-	psFree(peaks);
+        psArray *peaks = pmFootprintArrayToPeaks(footprints1);
+        pmFootprintsAssignPeaks(merged, peaks);
+        psFree(peaks);
     }
 
     if (includePeaks & 0x2) {
-	psArray *peaks = pmFootprintArrayToPeaks(footprints2);
-	pmFootprintsAssignPeaks(merged, peaks);
-	psFree(peaks);
+        psArray *peaks = pmFootprintArrayToPeaks(footprints2);
+        pmFootprintsAssignPeaks(merged, peaks);
+        psFree(peaks);
     }
-    
+
     return merged;
 }
