Index: trunk/ppSim/src/ppSimMakeDark.c
===================================================================
--- trunk/ppSim/src/ppSimMakeDark.c	(revision 21365)
+++ trunk/ppSim/src/ppSimMakeDark.c	(revision 24807)
@@ -20,4 +20,11 @@
     }
 
+    float detTemp   = psMetadataLookupF32(&mdok, recipe, "DET.TEMP"); // Detector Temperature
+    float darkTemp  = psMetadataLookupF32(&mdok, recipe, "DARK.TEMP"); // Dark temperature trend
+    float darkTemp2 = psMetadataLookupF32(&mdok, recipe, "DARK.TEMP2"); // Dark temperature trend 2nd order term
+    if (!isfinite(detTemp)) detTemp = 0.0;
+    if (!isfinite(darkTemp)) darkTemp = 0.0;
+    if (!isfinite(darkTemp2)) darkTemp2 = 0.0;
+
     float expTime  = psMetadataLookupF32(&mdok, recipe, "EXPTIME"); // Exposure time
     if (isnan(expTime)) {
@@ -26,11 +33,11 @@
     }
 
-    psTrace("ppSim", 6, "darkRate: %f, expTime: %f\n", darkRate, expTime);
+    // Dark current
+    float darkCurrent = (darkRate + darkTemp*detTemp + darkTemp2*PS_SQR(detTemp)) * expTime; // Dark current accumulated
+    
+    psTrace("ppSim", 6, "dark current: %f, darkRate: %f, darkTempTrend: %f, darkTempSecondOrder: %f, detTemp: %f, expTime: %f\n", darkCurrent, darkRate, darkTemp, darkTemp2, detTemp, expTime);
 
     for (int y = 0; y < signal->numRows; y++) {
         for (int x = 0; x < signal->numCols; x++) {
-
-            // Dark current
-            float darkCurrent = darkRate * expTime; // Dark current accumulated
             signal->data.F32[y][x] += darkCurrent;
             variance->data.F32[y][x] += darkCurrent;
