Index: trunk/psLib/src/math/psPolynomialUtils.c
===================================================================
--- trunk/psLib/src/math/psPolynomialUtils.c	(revision 10593)
+++ trunk/psLib/src/math/psPolynomialUtils.c	(revision 10598)
@@ -178,35 +178,42 @@
 }
 
-# if (0)
-    psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *poly)
-{
-
+psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly)
+{
     int nXout = poly->nX - 1;
     int nYout = poly->nY;
 
-    psPolynomial2D *dX = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-
-    for (int i = 0; i < nXout; i++) {
-        for (int j = 0; j < nYout; j++) {
-            dX->mask[i][j] = poly->mask[i+1][j];
-            dX->coeff[i][j] = poly->coeff[i+1][j] * i+1;
-        }
-    }
-}
-
-psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *poly)
-{
-
-    int nXout = poly->nX;
-    int nYout = poly->nY - 1;
-
-    psPolynomial2D *dX = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-
-    for (int i = 0; i < nXout; i++) {
-        for (int j = 0; j < nYout; j++) {
-            dX->mask[i][j] = poly->mask[i+1][j];
-            dX->coeff[i][j] = poly->coeff[i][j+1] * j+1;
-        }
-    }
-}
-#endif
+    if (out == NULL) {
+        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
+    } else {
+        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
+    }
+
+    for (int i = 0; i < nXout + 1; i++) {
+        for (int j = 0; j < nYout + 1; j++) {
+            out->mask[i][j] = poly->mask[i+1][j];
+            out->coeff[i][j] = poly->coeff[i+1][j] * (i+1);
+        }
+    }
+    return out;
+}
+
+psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly)
+{
+
+    int nXout = poly->nX - 1;
+    int nYout = poly->nY;
+
+    if (out == NULL) {
+        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
+    } else {
+        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
+    }
+
+    for (int i = 0; i < nXout + 1; i++) {
+        for (int j = 0; j < nYout + 1; j++) {
+            out->mask[i][j] = poly->mask[i][j+1];
+            out->coeff[i][j] = poly->coeff[i][j+1] * (j+1);
+        }
+    }
+    return out;
+}
