Index: trunk/pswarp/src/pswarpMapGrid.c
===================================================================
--- trunk/pswarp/src/pswarpMapGrid.c	(revision 10957)
+++ trunk/pswarp/src/pswarpMapGrid.c	(revision 10958)
@@ -5,14 +5,20 @@
 pswarpMapGrid *pswarpMapGridFromImage (pmReadout *dest, pmReadout *src, int nXpix, int nYpix) {
 
+    int i, ni;
+    int j, nj;
+
     // split the difference of the remainder
     int xMin = 0.5*(src->image->numCols % nXpix);
     int yMin = 0.5*(src->image->numRows % nYpix);
 
-    pswarpMapGrid *grid = pswarpMapGridAlloc (src->image->numCols / nXpix, src->image->numRows / nYpix);
-
-    int ni = 0;
-    int nj = 0;
-    for (int i = xMin; i < src->image->numCols; i += nXpix, ni++) {
-	for (int j = yMin; j < src->image->numRows; j += nYpix, nj++) {
+    int nXpts = src->image->numCols / nXpix;
+    if (src->image->numCols % nXpix == 0) nXpts ++;
+    int nYpts = src->image->numRows / nYpix;
+    if (src->image->numRows % nYpix == 0) nYpts ++;
+
+    pswarpMapGrid *grid = pswarpMapGridAlloc (nXpts, nYpts);
+
+    for (ni = 0, i = xMin; ni < nXpts; i += nXpix, ni++) {
+	for (nj = 0, j = yMin; nj < nYpts; j += nYpix, nj++) {
 	    pswarpMapSetLocalModel (grid->maps[ni][nj], dest, src, i, j);
 	}
@@ -128,9 +134,9 @@
     map->Xx = V10->x - V00->x;
     map->Xy = V01->x - V00->x;
-    map->Xo = V00->x + map->Xx*ix + map->Xy*iy;
+    map->Xo = V00->x - map->Xx*ix - map->Xy*iy;
 
     map->Yx = V10->y - V00->y;
     map->Yy = V01->y - V00->y;
-    map->Yo = V00->y + map->Yx*ix + map->Yy*iy;
+    map->Yo = V00->y - map->Yx*ix - map->Yy*iy;
  
     map->xo = ix;
