Index: branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.c
===================================================================
--- branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.c	(revision 27931)
+++ branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.c	(revision 27948)
@@ -58,8 +58,26 @@
     if (!object->sources) {
 	object->sources = psArrayAllocEmpty(1);
-	object->x = source->peak->xf;
-	object->y = source->peak->yf;
+	object->x  = source->peak->xf;
+	object->y  = source->peak->yf;
+	object->SN = source->peak->SN;
+    } else {
+	object->SN = PS_MAX(object->SN, source->peak->SN);
     }
     psArrayAdd (object->sources, 1, source);
     return true;
 }
+
+// sort by SN (descending)
+int pmPhotObjSortBySN (const void **a, const void **b)
+{
+    pmPhotObj *objA = *(pmPhotObj **)a;
+    pmPhotObj *objB = *(pmPhotObj **)b;
+
+    psF32 fA = objA->SN;
+    psF32 fB = objB->SN;
+
+    psF32 diff = fA - fB;
+    if (diff > FLT_EPSILON) return (-1);
+    if (diff < FLT_EPSILON) return (+1);
+    return (0);
+}
Index: branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.h
===================================================================
--- branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.h	(revision 27931)
+++ branches/eam_branches/psModules.20100506/src/objects/pmPhotObj.h	(revision 27948)
@@ -39,8 +39,12 @@
     float x;
     float y;
+    float SN;				// max of peak->SN for all matched sources
 } pmPhotObj;
 
+pmPhotObj *pmPhotObjAlloc(void);
+
 bool pmPhotObjAddSource(pmPhotObj *object, pmSource *source);
-pmPhotObj *pmPhotObjAlloc(void);
+
+int pmPhotObjSortBySN (const void **a, const void **b);
 
 /// @}
