Index: trunk/ppTranslate/src/ppMops.h
===================================================================
--- trunk/ppTranslate/src/ppMops.h	(revision 29559)
+++ trunk/ppTranslate/src/ppMops.h	(revision 29560)
@@ -25,4 +25,5 @@
   float rmsAstrom;                    // Astrometric solution RMS
   psString output;                    // Output filename
+  psU16 version;                        // Version (for parameters)
 } ppMopsArguments;
 
Index: trunk/ppTranslate/src/ppMopsArguments.c
===================================================================
--- trunk/ppTranslate/src/ppMopsArguments.c	(revision 29559)
+++ trunk/ppTranslate/src/ppMopsArguments.c	(revision 29560)
@@ -48,4 +48,5 @@
     args->rmsAstrom = NAN;
     args->output = NULL;
+    args->version = 1;
 
     return args;
@@ -73,4 +74,5 @@
     psMetadataAddF32(arguments, PS_LIST_TAIL, "-zp_error", 0, "Error in magnitude zero point", NAN);
     psMetadataAddF32(arguments, PS_LIST_TAIL, "-astrom_rms", 0, "Astrometric solution RMS", NAN);
+    psMetadataAddU16(arguments, PS_LIST_TAIL, "-version", 0, "Parameters version (see ICD)", 1);
 
     if (argc == 1 || !psArgumentParse(arguments, &argc, argv) || argc != 3) {
@@ -97,8 +99,8 @@
     args->diff_id = psMetadataLookupS64(NULL, arguments, "-diff_id");
     args->positive = !psMetadataLookupBool(NULL, arguments, "-inverse"); // NOTE: negated
-
     args->zp = psMetadataLookupF32(NULL, arguments, "-zp");
     args->zpErr = psMetadataLookupF32(NULL, arguments, "-zp_error");
     args->rmsAstrom = psMetadataLookupF32(NULL, arguments, "-astrom_rms");
+    args->version = psMetadataLookupU16(NULL, arguments, "-version");
 
     psTrace("ppMops.args", 1, "Done parsing command-line arguments\n");
Index: trunk/ppTranslate/src/ppMopsRead.c
===================================================================
--- trunk/ppTranslate/src/ppMopsRead.c	(revision 29559)
+++ trunk/ppTranslate/src/ppMopsRead.c	(revision 29560)
@@ -109,5 +109,4 @@
             det->naxis1->data.S32[numGood] = naxis1;
             det->naxis2->data.S32[numGood] = naxis2;
-
             det->nPos->data.S32[numGood] = psMetadataLookupS32(NULL, row, "DIFF_NPOS");
             det->fPos->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_FRATIO");
@@ -117,31 +116,61 @@
 
 	    //Additions of 2010-10-25
-	    det->psfInstFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX");
-	    det->psfInstFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX_SIG");
-	    det->apMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG");
-	    det->apMagRaw->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RAW");
-	    det->apMagRadius->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RADIUS");
-	    det->apFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX");
-	    det->apFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX_SIG");
-	    det->peakFluxAsMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PEAK_FLUX_AS_MAG");
-	    det->calPsfMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG");
-	    det->calPsfMagSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG_SIG");
-	    det->sky->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY");
-	    det->skySig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY_SIGMA");
-            det->qualityPerfect->data.F32[numGood] = psMetadataLookupF32(NULL, row, "PSF_QF_PERFECT");
-            det->momentsR1->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_R1");
-            det->momentsRH->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_RH");
-            det->kronFlux->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX");
-            det->kronFluxErr->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_ERR");
-            det->kronFluxInner->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_INNER");
-            det->kronFluxOuter->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_OUTER");
-            det->diffRP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_P");
-            det->diffSnP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_P");
-            det->diffRM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_M");
-            det->diffSnM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_M");
-            det->flags2->data.U32[numGood] = psMetadataLookupU32(NULL, row, "FLAGS2");
-            det->ippIdet->data.U32[numGood] = psMetadataLookupU32(NULL, row, "IPP_IDET");
-	    det->nFrames->data.U16[numGood] = psMetadataLookupU16(NULL, row, "N_FRAMES");
-	    det->padding->data.S16[numGood] = psMetadataLookupS16(NULL, row, "PADDING");
+	    if (args->version == 2) {
+	      det->psfInstFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX");
+	      det->psfInstFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PSF_INST_FLUX_SIG");
+	      det->apMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG");
+	      det->apMagRaw->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RAW");
+	      det->apMagRadius->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_MAG_RADIUS");
+	      det->apFlux->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX");
+	      det->apFluxSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "AP_FLUX_SIG");
+	      det->peakFluxAsMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "PEAK_FLUX_AS_MAG");
+	      det->calPsfMag->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG");
+	      det->calPsfMagSig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "CAL_PSF_MAG_SIG");
+	      det->sky->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY");
+	      det->skySig->data.F32[numGood] = psMetadataLookupS32(NULL, row, "SKY_SIGMA");
+	      det->qualityPerfect->data.F32[numGood] = psMetadataLookupF32(NULL, row, "PSF_QF_PERFECT");
+	      det->momentsR1->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_R1");
+	      det->momentsRH->data.F32[numGood] = psMetadataLookupF32(NULL, row, "MOMENTS_RH");
+	      det->kronFlux->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX");
+	      det->kronFluxErr->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_ERR");
+	      det->kronFluxInner->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_INNER");
+	      det->kronFluxOuter->data.F32[numGood] = psMetadataLookupF32(NULL, row, "KRON_FLUX_OUTER");
+	      det->diffRP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_P");
+	      det->diffSnP->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_P");
+	      det->diffRM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_R_M");
+	      det->diffSnM->data.F32[numGood] = psMetadataLookupF32(NULL, row, "DIFF_SN_M");
+	      det->flags2->data.U32[numGood] = psMetadataLookupU32(NULL, row, "FLAGS2");
+	      det->ippIdet->data.U32[numGood] = psMetadataLookupU32(NULL, row, "IPP_IDET");
+	      det->nFrames->data.U16[numGood] = psMetadataLookupU16(NULL, row, "N_FRAMES");
+	      det->padding->data.S16[numGood] = psMetadataLookupS16(NULL, row, "PADDING");
+	    } else {
+	      det->psfInstFlux->data.F32[numGood] = NAN;
+	      det->psfInstFluxSig->data.F32[numGood] = NAN;
+	      det->apMag->data.F32[numGood] = NAN;
+	      det->apMagRaw->data.F32[numGood] = NAN;
+	      det->apMagRadius->data.F32[numGood] = NAN;
+	      det->apFlux->data.F32[numGood] = NAN;
+	      det->apFluxSig->data.F32[numGood] = NAN;
+	      det->peakFluxAsMag->data.F32[numGood] = NAN;
+	      det->calPsfMag->data.F32[numGood] = NAN;
+	      det->calPsfMagSig->data.F32[numGood] = NAN;
+	      det->sky->data.F32[numGood] = NAN;
+	      det->skySig->data.F32[numGood] = NAN;
+	      det->qualityPerfect->data.F32[numGood] = NAN;
+	      det->momentsR1->data.F32[numGood] = NAN;
+	      det->momentsRH->data.F32[numGood] = NAN;
+	      det->kronFlux->data.F32[numGood] = NAN;
+	      det->kronFluxErr->data.F32[numGood] = NAN;
+	      det->kronFluxInner->data.F32[numGood] = NAN;
+	      det->kronFluxOuter->data.F32[numGood] = NAN;
+	      det->diffRP->data.F32[numGood] = NAN;
+	      det->diffSnP->data.F32[numGood] = NAN;
+	      det->diffRM->data.F32[numGood] = NAN;
+	      det->diffSnM->data.F32[numGood] = NAN;
+	      det->flags2->data.U32[numGood] = 0;
+	      det->ippIdet->data.U32[numGood] = 0;
+	      det->nFrames->data.U16[numGood] = 0;
+	      det->padding->data.S16[numGood] = 0;
+	    }
 
             // Calculate error in RA, Dec
Index: trunk/ppTranslate/src/ppMopsWrite.c
===================================================================
--- trunk/ppTranslate/src/ppMopsWrite.c	(revision 29559)
+++ trunk/ppTranslate/src/ppMopsWrite.c	(revision 29560)
@@ -18,5 +18,4 @@
         return false;
     }
-
 
     psMetadata *header = psMetadataAlloc(); // Header to write
@@ -81,4 +80,63 @@
         psMetadataAddF32(row, PS_LIST_TAIL, "RATIO_MASK", 0, "Ratio of positive pixels to masked", NAN);
         psMetadataAddF32(row, PS_LIST_TAIL, "RATIO_ALL", 0, "Ratio of positive pixels to all", NAN);
+
+	    if (args->version == 2) {
+	      // Write data of version 2 (see ICD)
+	      psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET",         PS_DATA_U32, "IPP detection identifier index",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_FLUX",    PS_DATA_F32, "PSF fit instrumental magnitude",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_FLUX_SIG",PS_DATA_F32, "Sigma of PSF instrumental magnitude",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG",           PS_DATA_F32, "magnitude in standard aperture",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG_RAW",       PS_DATA_F32, "magnitude in real aperture",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG_RADIUS",    PS_DATA_F32, "radius used for aperture mags",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_FLUX",          PS_DATA_F32, "instrumental flux in standard aperture",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_FLUX_SIG",      PS_DATA_F32, "aperture flux error",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PEAK_FLUX_AS_MAG", PS_DATA_F32, "Peak flux expressed as magnitude",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "CAL_PSF_MAG",      PS_DATA_F32, "PSF Magnitude using supplied calibration",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "CAL_PSF_MAG_SIG",  PS_DATA_F32, "measured scatter of zero point calibration",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "SKY",              PS_DATA_F32, "Sky level",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "SKY_SIGMA",        PS_DATA_F32, "Sigma of sky level",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_QF_PERFECT",   PS_DATA_F32, "PSF coverage/quality factor (poor)",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "MOMENTS_R1",       PS_DATA_F32, "first radial moment",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "MOMENTS_RH",       PS_DATA_F32, "half radial moment",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX",        PS_DATA_F32, "Kron Flux (in 2.5 R1)",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_ERR",    PS_DATA_F32, "Kron Flux Error",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_INNER",  PS_DATA_F32, "Kron Flux (in 1.0 R1)", 
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_OUTER",  PS_DATA_F32, "Kron Flux (in 4.0 R1)",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_R_P",         PS_DATA_F32, "distance to positive match source",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_SN_P",        PS_DATA_F32, "signal-to-noise of pos match src",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_R_M",         PS_DATA_F32, "distance to negative match source",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_SN_M",        PS_DATA_F32, "signal-to-noise of neg match src",
+			     NAN);
+	      psMetadataAdd (row, PS_LIST_TAIL, "FLAGS2",           PS_DATA_U32, "psphot analysis flags (group 2)",
+			     0);
+	      psMetadataAdd (row, PS_LIST_TAIL, "N_FRAMES",         PS_DATA_U16, "Number of frames overlapping source center", 
+			     0);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PADDING",          PS_DATA_S16, "padding", 
+			     0);
+	    }
+
         if (!psFitsWriteTableEmpty(fits, header, row, OUT_EXTNAME)) {
             psErrorStackPrint(stderr, "Unable to write empty table.");
@@ -134,4 +192,63 @@
                              det->diffSkyfileId->data.S64[i]);
 
+	    if (args->version == 2) {
+	      // Write data of version 2 (see ICD)
+	      psMetadataAdd (row, PS_LIST_TAIL, "IPP_IDET",         PS_DATA_U32, "IPP detection identifier index",
+			     det->ippIdet->data.U32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_FLUX",    PS_DATA_F32, "PSF fit instrumental magnitude",
+			     det->psfInstFlux->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_INST_FLUX_SIG",PS_DATA_F32, "Sigma of PSF instrumental magnitude",
+			     det->psfInstFluxSig->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG",           PS_DATA_F32, "magnitude in standard aperture",
+			     det->apMag->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG_RAW",       PS_DATA_F32, "magnitude in real aperture",
+			     det->apMagRaw->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_MAG_RADIUS",    PS_DATA_F32, "radius used for aperture mags",
+			     det->apMagRadius->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_FLUX",          PS_DATA_F32, "instrumental flux in standard aperture",
+			     det->apFlux->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "AP_FLUX_SIG",      PS_DATA_F32, "aperture flux error",
+			     det->apFluxSig->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PEAK_FLUX_AS_MAG", PS_DATA_F32, "Peak flux expressed as magnitude",
+			     det->peakFluxAsMag->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "CAL_PSF_MAG",      PS_DATA_F32, "PSF Magnitude using supplied calibration",
+			     det->calPsfMag->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "CAL_PSF_MAG_SIG",  PS_DATA_F32, "measured scatter of zero point calibration",
+			     det->calPsfMagSig->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "SKY",              PS_DATA_F32, "Sky level",
+			     det->sky->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "SKY_SIGMA",        PS_DATA_F32, "Sigma of sky level",
+			     det->skySig->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PSF_QF_PERFECT",   PS_DATA_F32, "PSF coverage/quality factor (poor)",
+			     det->qualityPerfect->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "MOMENTS_R1",       PS_DATA_F32, "first radial moment",
+			     det->momentsR1->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "MOMENTS_RH",       PS_DATA_F32, "half radial moment",
+			     det->momentsRH->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX",        PS_DATA_F32, "Kron Flux (in 2.5 R1)",
+			     det->kronFlux->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_ERR",    PS_DATA_F32, "Kron Flux Error",
+			     det->kronFluxErr->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_INNER",  PS_DATA_F32, "Kron Flux (in 1.0 R1)", 
+			     det->kronFluxInner->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "KRON_FLUX_OUTER",  PS_DATA_F32, "Kron Flux (in 4.0 R1)",
+			     det->kronFluxOuter->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_R_P",         PS_DATA_F32, "distance to positive match source",
+			     det->diffRP->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_SN_P",        PS_DATA_F32, "signal-to-noise of pos match src",
+			     det->diffSnP->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_R_M",         PS_DATA_F32, "distance to negative match source",
+			     det->diffRM->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "DIFF_SN_M",        PS_DATA_F32, "signal-to-noise of neg match src",
+			     det->diffSnM->data.F32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "FLAGS2",           PS_DATA_U32, "psphot analysis flags (group 2)",
+			     det->flags2->data.U32[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "N_FRAMES",         PS_DATA_U16, "Number of frames overlapping source center", 
+			     det->nFrames->data.U16[i]);
+	      psMetadataAdd (row, PS_LIST_TAIL, "PADDING",          PS_DATA_S16, "padding", 
+			     det->padding->data.S16[i]);
+	    }
+
+	    //Update with the table with the current row
             table->data[i] = row;
         }
