Index: branches/pap/pswarp/src/pswarpLoop.c
===================================================================
--- branches/pap/pswarp/src/pswarpLoop.c	(revision 27708)
+++ branches/pap/pswarp/src/pswarpLoop.c	(revision 27732)
@@ -267,22 +267,4 @@
     }
 
-    // Correct image for change in the plate scale
-    {
-        psAssert(input && input->fpa && input->fpa->toSky, "Require astrometry for input");
-        psAssert(outFPA && outFPA && outFPA->toSky, "Require astrometry for output");
-
-        double inScale = input->fpa->toSky->Xs + input->fpa->toSky->Ys; // Plate scale for input
-        double outScale = outFPA->toSky->Xs + outFPA->toSky->Ys; // Plate scale for output
-        float correction = PS_SQR(outScale / inScale); // Correction factor to apply to image
-        psLogMsg("pswarp", PS_LOG_INFO, "Correcting flux by %f to account for pixel scales", correction);
-
-        psBinaryOp(output->image, output->image, "*", psScalarAlloc(correction, PS_TYPE_F32));
-        if (output->variance) {
-            psBinaryOp(output->variance, output->variance, "*",
-                       psScalarAlloc(PS_SQR(correction), PS_TYPE_F32));
-        }
-    }
-
-
     // Set covariance matrix for output
     {
@@ -292,7 +274,27 @@
         psArray *covars = psListToArray(covariances); // Array of covariance matrices
         output->covariance = psImageCovarianceAverage(covars);
+        fprintf(stderr, "Covariance: %f\n", psImageCovarianceFactor(output->covariance));
         psFree(covars);
         psMetadataRemoveKey(output->analysis, PSWARP_ANALYSIS_COVARIANCES);
         psImageCovarianceTransfer(output->variance, output->covariance);
+    }
+
+    // Correct image for change in the plate scale
+    {
+        psAssert(input && input->fpa && input->fpa->toSky, "Require astrometry for input");
+        psAssert(outFPA && outFPA && outFPA->toSky, "Require astrometry for output");
+
+        double inScale = input->fpa->toSky->Xs + input->fpa->toSky->Ys; // Plate scale for input
+        double outScale = outFPA->toSky->Xs + outFPA->toSky->Ys; // Plate scale for output
+        float correction = PS_SQR(outScale / inScale); // Correction factor to apply to image
+        psLogMsg("pswarp", PS_LOG_INFO, "Correcting flux by %f to account for pixel scales", correction);
+        psBinaryOp(output->image, output->image, "*", psScalarAlloc(correction, PS_TYPE_F32));
+        if (output->variance) {
+            psBinaryOp(output->variance, output->variance, "*",
+                       psScalarAlloc(PS_SQR(correction), PS_TYPE_F32));
+        }
+        psKernel *covar = psImageCovarianceScale(output->covariance, outScale / inScale); // Scaled covariance
+        psFree(output->covariance);
+        output->covariance = covar;
     }
 
