Index: branches/eam_branches/ipp-20120627/Ohana/src/addstar/include/addstar.h
===================================================================
--- branches/eam_branches/ipp-20120627/Ohana/src/addstar/include/addstar.h	(revision 34210)
+++ branches/eam_branches/ipp-20120627/Ohana/src/addstar/include/addstar.h	(revision 34216)
@@ -297,4 +297,5 @@
 uint64_t CreatePSPSDetectionID(double tobs, int ccdid, int detID);
 uint64_t CreatePSPSObjectID(double ra, double dec);
+uint64_t CreatePSPSStackDetectionID(int sourceID, int imageID, int detID);
 
 int altaz (double *alt, double *az, double ha, double dec, double latitude);
Index: branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/FilterStars.c
===================================================================
--- branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/FilterStars.c	(revision 34210)
+++ branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/FilterStars.c	(revision 34216)
@@ -108,5 +108,11 @@
       double mjd;
       mjd = ohana_sec_to_mjd (image[0].tzero);
-      stars[N].measure.extID = CreatePSPSDetectionID(mjd, image[0].ccdnum, stars[N].measure.detID);
+      int isStack = ((image[0].photcode >= 11000) && (image[0].photcode <= 11400));
+
+      if (isStack) {
+	stars[N].measure.extID = CreatePSPSStackDetectionID(image[0].sourceID, image[0].externID, stars[N].measure.detID);
+      } else {
+	stars[N].measure.extID = CreatePSPSDetectionID(mjd, image[0].ccdnum, stars[N].measure.detID);
+      }
     } else {
       stars[N].measure.extID = 0;
Index: branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/psps_ids.c
===================================================================
--- branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/psps_ids.c	(revision 34210)
+++ branches/eam_branches/ipp-20120627/Ohana/src/addstar/src/psps_ids.c	(revision 34216)
@@ -19,4 +19,19 @@
     
 uint64_t
+CreatePSPSStackDetectionID(int sourceID, int imageID, int detID)
+{
+  // sourceID : ID of database + table that tracked the image (< 0x100 = 256)
+  // imageID : external ID of the image which provided the detections (< 0x1000.0000 ~ 2.7e8)
+  // detID : detection sequence in image (< 0x1000.0000 ~ 2.7e8)
+
+  assert (detID    < 0x10000000);
+  assert (imageID  < 0x10000000);
+  assert (sourceID < 0x100);
+  
+  uint64_t detectid = ((uint64_t)sourceID << 56) + ((uint64_t)imageID << 28) + (uint64_t)detID;
+  return detectid;
+}
+    
+uint64_t
 CreatePSPSObjectID(double ra, double dec)
 {
