Index: trunk/psphot/src/psPolynomials.c
===================================================================
--- trunk/psphot/src/psPolynomials.c	(revision 4375)
+++ trunk/psphot/src/psPolynomials.c	(revision 4901)
@@ -42,4 +42,13 @@
 }
 
+static void psPolynomial1DFree (psPolynomial1D *poly) {
+
+  if (poly == NULL) return;
+  psFree (poly->coeff);
+  psFree (poly->coeffErr);
+  psFree (poly->mask);
+  return;
+}
+
 // XXX EAM : use Nterm = Norder + 1 definition  
 // XXX EAM : should we provide both order and nterms in struct?
@@ -54,7 +63,4 @@
 
     newPoly = (psPolynomial1D* ) psAlloc(sizeof(psPolynomial1D));
-    // p_psMemSetDeallocator(newPoly, (psFreeFcn) polynomial1DFree);
-    // XXX EAM : me, being lazy
-
     newPoly->type = type;
     newPoly->n = nOrder;
@@ -67,4 +73,5 @@
         newPoly->mask[i] = 0;
     }
+    p_psMemSetDeallocator(newPoly, (psFreeFcn) psPolynomial1DFree);
     return(newPoly);
 }
@@ -185,4 +192,7 @@
 	    myPoly->coeff[k] = coeffs->data.F64[k];
 	}
+	psFree (ALUD);
+	psFree (outPerm);
+	psFree (coeffs);
     }
 
@@ -262,4 +272,18 @@
 }
 
+static void psPolynomial2DFree(psPolynomial2D *poly) {
+
+  if (poly == NULL) return;
+  for (int i = 0; i < poly->nX + 1; i++) {
+    psFree (poly->coeff[i]);
+    psFree (poly->coeffErr[i]);
+    psFree (poly->mask[i]);
+  }
+  psFree (poly->coeff);
+  psFree (poly->coeffErr);
+  psFree (poly->mask);
+  return;
+}
+
 // XXX EAM : use Nterm = Norder + 1 definition  
 // the user requests a polynomial of order Norder
@@ -277,7 +301,4 @@
 
     newPoly = (psPolynomial2D* ) psAlloc(sizeof(psPolynomial2D));
-    // p_psMemSetDeallocator(newPoly, (psFreeFcn) polynomial2DFree);
-    // XXX EAM : me, being lazy
-
     newPoly->type = type;
     newPoly->nX = nXorder;
@@ -299,4 +320,5 @@
         }
     }
+    p_psMemSetDeallocator(newPoly, (psFreeFcn) psPolynomial2DFree);
     return(newPoly);
 }
