Index: trunk/psLib/src/types/psPixels.c
===================================================================
--- trunk/psLib/src/types/psPixels.c	(revision 16944)
+++ trunk/psLib/src/types/psPixels.c	(revision 16963)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2008-03-07 22:16:38 $
+ *  @version $Revision: 1.40 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-03-13 01:03:08 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -246,30 +246,21 @@
 }
 
-psPixels* psPixelsConcatenate(psPixels *out,
-                              const psPixels *pixels)
+psPixels* psPixelsConcatenate(psPixels *out, const psPixels *pixels)
 {
     PS_ASSERT_PIXELS_NON_NULL(pixels, NULL);
-
-    long pixelsN = pixels->n;           // Size of input
-    psPixelCoord* pixelsData = pixels->data; // Dereference input
-
     if (!out) {
-        // Simply copy pixels
-        out = psPixelsCopy(out, pixels);
-        return out;
-    }
-
-    long outN = out->n;                 // Size of output
-    psPixelCoord* outData = out->data;  // Dereference output
+        return psPixelsCopy(NULL, pixels);
+    }
 
     // sort the OUT array to help in searching for duplicates later
-    qsort(outData, outN, sizeof(psPixelCoord), (qsortCompareFunc)comparePixelCoord);
-
-    // add non-duplicate values in pixels to out
-    for (long n = 0; n < pixelsN; n++) {
-        psPixelCoord pCoord = pixelsData[n]; // Coordinate of interest
-        if (!bsearch(&pCoord, outData, outN, sizeof(psPixelCoord), (qsortCompareFunc)comparePixelCoord)) {
-            // no match in OUT array of this value
-            psPixelsAdd(out, 0, pCoord.x, pCoord.y);
+    qsort(out->data, out->n, sizeof(psPixelCoord), (qsortCompareFunc)comparePixelCoord);
+
+    // add non-duplicate values in pixels to the end of the output list (unsorted!)
+    long numInPix = pixels->n;          // Number of input pixels
+    long numOutPix = out->n;            // (Original) number of output pixels
+    for (long i = 0; i < numInPix; i++) {
+        psPixelCoord pix = pixels->data[i]; // Coordinate of interest
+        if (!bsearch(&pix, out->data, numOutPix, sizeof(psPixelCoord), (qsortCompareFunc)comparePixelCoord)) {
+            psPixelsAdd(out, 0, pix.x, pix.y);
         }
     }
