Index: /trunk/ippconfig/gpc1/psphot.config
===================================================================
--- /trunk/ippconfig/gpc1/psphot.config	(revision 34768)
+++ /trunk/ippconfig/gpc1/psphot.config	(revision 34769)
@@ -49,4 +49,14 @@
   DIFF_STATS			    BOOL TRUE	       # Calculate diff-specific stats
   OUTPUT.FORMAT		            STR  PS1_DV2       # Format of output file
+
+  PSPHOT.EXT.NSIGMA.LIMIT	    F32	 0.0
+  PSPHOT.EXT.DIFF.ALTERNATE	    BOOL TRUE
+  PSPHOT.EXT.DIFF.ALTERNATE.THRESH  F32	 1.25
+END
+
+SSTF_DIFF METADATA
+  PSPHOT.EXT.NSIGMA.LIMIT	    F32	 0.0
+  PSPHOT.EXT.DIFF.ALTERNATE	    BOOL TRUE
+  PSPHOT.EXT.DIFF.ALTERNATE.THRESH  F32	 1.25
 END
 
Index: /trunk/ippconfig/recipes/psphot.config
===================================================================
--- /trunk/ippconfig/recipes/psphot.config	(revision 34768)
+++ /trunk/ippconfig/recipes/psphot.config	(revision 34769)
@@ -345,4 +345,6 @@
 PSPHOT.EXT.NSIGMA.LIMIT             F32   3.0  # sources with extNsigma greater that this get tagged as likely extended sources
 PSPHOT.EXT.NSIGMA.MOMENTS           F32   3.0  # sources with extNsigma greater that this get tagged as likely extended sources
+PSPHOT.EXT.DIFF.ALTERNATE	    BOOL  FALSE           # use alternate extended source calculation; designed for diff trails
+PSPHOT.EXT.DIFF.ALTERNATE.THRESH    F32	  1.5		  # threshold for alternate extended source calculations
 PSPHOT.CR.GROW                      S32   1               # Number of pixels to grow CR mask
 PSPHOT.CR.NSIGMA.SOFTEN             F32   0.0025          # Softening parameter for weights
Index: /trunk/psphot/src/psphotSourceSize.c
===================================================================
--- /trunk/psphot/src/psphotSourceSize.c	(revision 34768)
+++ /trunk/psphot/src/psphotSourceSize.c	(revision 34769)
@@ -11,4 +11,6 @@
     float nSigmaMoments;
     float nSigmaCR;
+    bool altDiffExt;
+    float altDiffExtThresh;
     float soft;
     int grow;
@@ -120,4 +122,11 @@
     assert (status);
 
+    // Optional extended source measurement algorithm to improve diff image trails
+    options.altDiffExt = psMetadataLookupBool(&status, recipe, "PSPHOT.EXT.DIFF.ALTERNATE");
+    assert (status);
+    // Threshold for this alternate method
+    options.altDiffExtThresh = psMetadataLookupF32(&status, recipe, "PSPHOT.EXT.DIFF.ALTERNATE.THRESH");
+    assert (status);
+    
     // location of a single test source
     options.xtest = psMetadataLookupS32 (&status, recipe, "PSPHOT.CRMASK.XTEST");
@@ -601,5 +610,24 @@
             continue;
         }
-
+	// Alternate extended source limit calculation
+	if (options->altDiffExt) {
+	  // ratio of major to minor axes
+	  // MRV = Major / Minor
+	  // MRV = (0.5 * (Mxx + Myy) + 0.5 * sqrt( (Mxx + Myy)^2 + 4 Mxy^2)) /
+	  //       (0.5 * (Mxx + Myy) - 0.5 * sqrt( (Mxx + Myy)^2 + 4 Mxy^2))
+	  // MRV = (2 * 0.5 * (Mxx + Myy) - Minor) / Minor
+	  float momentRatioVeres = (Mxx + Myy - Mminor) / Mminor;
+	  bool  isAltEXT = (momentRatioVeres > options->altDiffExtThresh);
+	  if (isAltEXT) {
+	    psTrace("psphotSourceClassRegion.EXT",4,"CLASS: %g %g\t%g %g\t%g %g\t%g %g\t%g ALTEXT\t%g %g\n",
+                    source->peak->xf, source->peak->yf, Mminor, kMag, dMag, nSigmaMAG, options->sizeLimitCR, options->magLimitCR, options->nSigmaApResid,
+		    momentRatioVeres,options->altDiffExtThresh);
+            source->mode |= PM_SOURCE_MODE_EXT_LIMIT;
+            source->tmpFlags |= PM_SOURCE_TMPF_SIZE_MEASURED;
+            Next ++;
+            continue;
+	  }
+	}
+	
         // Everything else should just be treated as a PSF
 	psTrace("psphotSourceClassRegion.PSF",4,"CLASS: %g %g\t%g %g\t%g %g\t%g %g\t%g PSF\n",
