Index: trunk/ppStats/src/Makefile.am
===================================================================
--- trunk/ppStats/src/Makefile.am	(revision 13797)
+++ trunk/ppStats/src/Makefile.am	(revision 13923)
@@ -8,9 +8,10 @@
 ppStats_LDADD 	= libppStats.la
 
-libppStats_la_SOURCES = 	\
-	ppStats.c		\
-	ppStatsData.c		\
-	ppStatsLoop.c		\
-	ppStatsSetupFromRecipe.c \
+libppStats_la_SOURCES = 		\
+	ppStats.c			\
+	ppStatsData.c			\
+	ppStatsFringe.c			\
+	ppStatsLoop.c			\
+	ppStatsSetupFromRecipe.c	\
 	ppStatsVersion.c
 
@@ -22,9 +23,10 @@
 	ppStatsVersion.c
 
-include_HEADERS = 		\
-	ppStats.h		\
-	ppStatsData.h		\
-	ppStatsLoop.h		\
-	ppStatsSetupFromRecipe.h \
+include_HEADERS = 			\
+	ppStats.h			\
+	ppStatsData.h			\
+	ppStatsFringe.h			\
+	ppStatsLoop.h			\
+	ppStatsSetupFromRecipe.h	\
 	ppStatsVersion.h
 
Index: trunk/ppStats/src/ppStats.h
===================================================================
--- trunk/ppStats/src/ppStats.h	(revision 13797)
+++ trunk/ppStats/src/ppStats.h	(revision 13923)
@@ -10,8 +10,9 @@
 #include "ppStatsLoop.h"
 #include "ppStatsVersion.h"
+#include "ppStatsFringe.h"
 
 // Perform the ppStats steps
 psMetadata *ppStats(psMetadata *out,
-		    pmFPA *fpa,         // FPA for which to get statistics
+                    pmFPA *fpa,         // FPA for which to get statistics
                     pmFPAview *view,    // View for analysis
                     psMaskType maskVal, // Value to mask
Index: trunk/ppStats/src/ppStatsFringe.c
===================================================================
--- trunk/ppStats/src/ppStatsFringe.c	(revision 13923)
+++ trunk/ppStats/src/ppStatsFringe.c	(revision 13923)
@@ -0,0 +1,44 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <pslib.h>
+#include <psmodules.h>
+
+#include "ppStatsFringe.h"
+
+bool ppStatsFringe(psMetadata *stats, const pmChip *chip, const char *fringeName)
+{
+    PS_ASSERT_PTR_NON_NULL(chip, false);
+    PS_ASSERT_STRING_NON_EMPTY(fringeName, false);
+
+    bool mdok;                          // Status of MD lookup
+    const char *chipName = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME"); // Name of chip
+
+    psMetadata *chipStats = psMetadataLookupMetadata(&mdok, stats, chipName); // Chip statistics
+    if (!mdok || !chipStats) {
+        chipStats = psMetadataAlloc();
+        psMetadataAddMetadata(stats, PS_LIST_TAIL, chipName, 0, NULL, chipStats);
+    } else {
+        psMemIncrRefCounter(chipStats);
+    }
+
+    pmFringeScale *fringes = psMetadataLookupPtr(NULL, chip->analysis, fringeName); // Solution for fringes
+    for (int i = 0; i < fringes->nFringeFrames; i++) {
+        psString name = NULL; // Name of statistic
+        psStringAppend(&name, "FRINGE_%d", i);
+        psMetadataAddF32(chipStats, PS_LIST_TAIL, name, 0, "Fringe amplitude", fringes->coeff->data.F32[i]);
+        psFree(name);
+        name = NULL;
+        psStringAppend(&name, "FRINGE_ERR_%d", i);
+        psMetadataAddF32(chipStats, PS_LIST_TAIL, name, 0, "Fringe amplitude error",
+                         fringes->coeffErr->data.F32[i]);
+        psFree(name);
+    }
+
+    psFree(chipStats);
+
+    return true;
+}
+
Index: trunk/ppStats/src/ppStatsFringe.h
===================================================================
--- trunk/ppStats/src/ppStatsFringe.h	(revision 13923)
+++ trunk/ppStats/src/ppStatsFringe.h	(revision 13923)
@@ -0,0 +1,13 @@
+#ifndef PP_STATS_FRINGE_H
+#define PP_STATS_FRINGE_H
+
+#include <pslib.h>
+#include <psmodules.h>
+
+/// Supplement the statistics with the fringe solution
+bool ppStatsFringe(psMetadata *stats,   ///< Statistics metadata to supplement
+                   const pmChip *chip,  ///< The chip containing the solution
+                   const char *fringeName ///< Name of the solution in the chip->analysis
+    );
+
+#endif
