diff -pur gimp-1.2.4pre-orig/app/transform_core.c gimp-1.2.4pre-mine/app/transform_core.c
--- gimp-1.2.4pre-orig/app/transform_core.c	Wed Oct 10 00:47:48 2001
+++ gimp-1.2.4pre-mine/app/transform_core.c	Sun May  4 02:23:26 2003
@@ -1306,8 +1306,8 @@ transform_core_do (GImage          *gima
 	(* progress_callback) (ty1, ty2, y, progress_data);
 
       /* set up inverse transform steps */
-      tx = xinc * tx1 + m[0][1] * y + m[0][2];
-      ty = yinc * tx1 + m[1][1] * y + m[1][2];
+      tx = xinc * (tx1 + 0.5) + m[0][1] * (y + 0.5) + m[0][2] - 0.5;
+      ty = yinc * (tx1 + 0.5) + m[1][1] * (y + 0.5) + m[1][2] - 0.5;
       tw = winc * tx1 + m[2][1] * y + m[2][2];
 
       d = dest;
@@ -1340,8 +1340,8 @@ transform_core_do (GImage          *gima
 		   *  We need the four integer pixel coords around them:
 		   *  itx to itx + 3, ity to ity + 3
                    */
-                  itx = floor (ttx);
-                  ity = floor (tty);
+                  itx = RINT (ttx);
+                  ity = RINT (tty);
 
 		  /* check if any part of our region overlaps the buffer */
 
@@ -1431,8 +1431,8 @@ transform_core_do (GImage          *gima
 
        	      else  /*  linear  */
                 {
-                  itx = floor (ttx);
-                  ity = floor (tty);
+                  itx = RINT (ttx);
+                  ity = RINT (tty);
 
 		  /*  expand source area to cover interpolation region
 		   *  (which runs from itx to itx + 1, same in y)
@@ -1519,8 +1519,8 @@ transform_core_do (GImage          *gima
 	    }
           else  /*  no interpolation  */
             {
-              itx = floor (ttx);
-              ity = floor (tty);
+              itx = RINT (ttx);
+              ity = RINT (tty);
 
               if (itx >= x1 && itx < x2 &&
                   ity >= y1 && ity < y2 )
