Index: /trunk/psphot/src/psphotExtendedSourceFits.c
===================================================================
--- /trunk/psphot/src/psphotExtendedSourceFits.c	(revision 34217)
+++ /trunk/psphot/src/psphotExtendedSourceFits.c	(revision 34218)
@@ -171,4 +171,7 @@
             psArrayAdd(job->args, 1, cells->data[j]); // sources
             psArrayAdd(job->args, 1, models);
+            // Allocate a metadata iterator here because psMetadataIteratorAlloc/Free are not thread safe
+            psMetadataIterator *iter = psMetadataIteratorAlloc (models, PS_LIST_HEAD, NULL);
+            psArrayAdd(job->args, 1, iter);
             psArrayAdd(job->args, 1, AnalysisRegion); // XXX make a pointer
 
@@ -199,18 +202,19 @@
 	    }
 	    psScalar *scalar = NULL;
-	    scalar = job->args->data[7];
+	    scalar = job->args->data[8];
 	    Next += scalar->data.S32;
-	    scalar = job->args->data[8];
+	    scalar = job->args->data[9];
 	    Nconvolve += scalar->data.S32;
-	    scalar = job->args->data[9];
+	    scalar = job->args->data[10];
 	    NconvolvePass += scalar->data.S32;
-	    scalar = job->args->data[10];
+	    scalar = job->args->data[11];
 	    Nplain += scalar->data.S32;
-	    scalar = job->args->data[11];
+	    scalar = job->args->data[12];
 	    NplainPass += scalar->data.S32;
-	    scalar = job->args->data[12];
+	    scalar = job->args->data[13];
 	    Nfaint += scalar->data.S32;
-	    scalar = job->args->data[13];
+	    scalar = job->args->data[14];
 	    Nfail += scalar->data.S32;
+            psFree(job->args->data[3]); // iterator allocated above
 	    psFree(job);
 # endif
@@ -231,18 +235,19 @@
             } else {
                 psScalar *scalar = NULL;
-                scalar = job->args->data[7];
+                scalar = job->args->data[8];
                 Next += scalar->data.S32;
-                scalar = job->args->data[8];
+                scalar = job->args->data[9];
                 Nconvolve += scalar->data.S32;
-                scalar = job->args->data[9];
+                scalar = job->args->data[10];
                 NconvolvePass += scalar->data.S32;
-                scalar = job->args->data[10];
+                scalar = job->args->data[11];
                 Nplain += scalar->data.S32;
-                scalar = job->args->data[11];
+                scalar = job->args->data[12];
                 NplainPass += scalar->data.S32;
-                scalar = job->args->data[12];
+                scalar = job->args->data[13];
                 Nfaint += scalar->data.S32;
-                scalar = job->args->data[13];
+                scalar = job->args->data[14];
                 Nfail += scalar->data.S32;
+                psFree(job->args->data[3]); // metadata iterator allocated above
             }
             psFree(job);
@@ -281,8 +286,9 @@
     psArray *sources        = job->args->data[1];
     psMetadata *models      = job->args->data[2];
-    psRegion *region        = job->args->data[3];
-    int psfSize             = PS_SCALAR_VALUE(job->args->data[4],S32);
-    psImageMaskType maskVal = PS_SCALAR_VALUE(job->args->data[5],PS_TYPE_IMAGE_MASK_DATA);
-    psImageMaskType markVal = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA);
+    psMetadataIterator *iter = job->args->data[3];
+    psRegion *region        = job->args->data[4];
+    int psfSize             = PS_SCALAR_VALUE(job->args->data[5],S32);
+    psImageMaskType maskVal = PS_SCALAR_VALUE(job->args->data[6],PS_TYPE_IMAGE_MASK_DATA);
+    psImageMaskType markVal = PS_SCALAR_VALUE(job->args->data[7],PS_TYPE_IMAGE_MASK_DATA);
 
     // Define source fitting parameters for extended source fits
@@ -334,5 +340,6 @@
 
         // loop here over the models chosen for each source (exclude by S/N)
-        psMetadataIterator *iter = psMetadataIteratorAlloc (models, PS_LIST_HEAD, NULL);
+        // Reset the iterator
+        psMetadataIteratorSet(iter, PS_LIST_HEAD);
         psMetadataItem *item = NULL;
         while ((item = psMetadataGetAndIncrement (iter)) != NULL) {
@@ -424,5 +431,4 @@
           psFree (modelFit);
         }
-        psFree (iter);
 
         // evaluate the relative quality of the models, choose one
@@ -482,23 +488,23 @@
 
     // change the value of a scalar on the array (wrap this and put it in psArray.h)
-    scalar = job->args->data[7];
+    scalar = job->args->data[8];
     scalar->data.S32 = Next;
 
-    scalar = job->args->data[8];
+    scalar = job->args->data[9];
     scalar->data.S32 = Nconvolve;
 
-    scalar = job->args->data[9];
+    scalar = job->args->data[10];
     scalar->data.S32 = NconvolvePass;
 
-    scalar = job->args->data[10];
+    scalar = job->args->data[11];
     scalar->data.S32 = Nplain;
 
-    scalar = job->args->data[11];
+    scalar = job->args->data[12];
     scalar->data.S32 = NplainPass;
 
-    scalar = job->args->data[12];
+    scalar = job->args->data[13];
     scalar->data.S32 = Nfaint;
 
-    scalar = job->args->data[13];
+    scalar = job->args->data[14];
     scalar->data.S32 = Nfail;
 
Index: /trunk/psphot/src/psphotSetThreads.c
===================================================================
--- /trunk/psphot/src/psphotSetThreads.c	(revision 34217)
+++ /trunk/psphot/src/psphotSetThreads.c	(revision 34218)
@@ -40,5 +40,5 @@
     psFree(task);
 
-    task = psThreadTaskAlloc("PSPHOT_EXTENDED_FIT", 14);
+    task = psThreadTaskAlloc("PSPHOT_EXTENDED_FIT", 15);
     task->function = &psphotExtendedSourceFits_Threaded;
     psThreadTaskAdd(task);
