Index: trunk/psModules/src/objects/pmModel.c
===================================================================
--- trunk/psModules/src/objects/pmModel.c	(revision 14938)
+++ trunk/psModules/src/objects/pmModel.c	(revision 15562)
@@ -6,6 +6,6 @@
  *  @author EAM, IfA
  *
- *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-09-21 00:04:07 $
+ *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-11-10 01:09:20 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -46,7 +46,4 @@
     psTrace("psModules.objects", 3, "---- %s() begin ----\n", __func__);
 
-    pmModel *tmp = (pmModel *) psAlloc(sizeof(pmModel));
-    psMemSetDeallocator(tmp, (psFreeFunc) modelFree);
-
     pmModelClass *class = pmModelClassSelect (type);
     if (class == NULL) {
@@ -54,4 +51,7 @@
         return(NULL);
     }
+
+    pmModel *tmp = (pmModel *) psAlloc(sizeof(pmModel));
+    psMemSetDeallocator(tmp, (psFreeFunc) modelFree);
 
     tmp->type = type;
@@ -89,7 +89,14 @@
 }
 
+bool psMemCheckModel(psPtr ptr)
+{
+    PS_ASSERT_PTR(ptr, false);
+    return ( psMemGetDeallocator(ptr) == (psFreeFunc) modelFree);
+}
+
 // copy model to a new structure
 pmModel *pmModelCopy (pmModel *model)
 {
+    PS_ASSERT_PTR_NON_NULL(model, NULL);
 
     pmModel *new = pmModelAlloc (model->type);
@@ -217,5 +224,5 @@
         Ro = psImageInterpolateOptionsAlloc(
             PS_INTERPOLATE_BILINEAR,
-            model->residuals->Ro, NULL, NULL, 0, 0.0, 0.0, 1, 0, 0.0);
+            model->residuals->Ro, NULL, mask, 0, 0.0, 0.0, 1, 0, 0.0);
         Rx = psImageInterpolateOptionsAlloc(
             PS_INTERPOLATE_BILINEAR,
@@ -257,6 +264,6 @@
                 float oy = yBin*(imageRow + 0.5 - yCenter) + yResidCenter;
 
+		psU8 mflux = 0;
                 if (mode & PM_MODEL_OP_RES0) {
-                    psU8 mflux = 0;
                     double Fo = 0.0;
                     psImageInterpolate (&Fo, NULL, &mflux, ox, oy, Ro);
@@ -265,6 +272,6 @@
                     }
                 }
-                if (mode & PM_MODEL_OP_RES1) {
-                    psU8 mflux = 0;
+		// skip Rx,Ry if Ro is masked
+                if (!mflux && (mode & PM_MODEL_OP_RES1)) {
                     double Fx = 0.0;
                     double Fy = 0.0;
