diff --git a/examples/img2twit.cpp b/examples/img2twit.cpp
index fccfaaf..ffda4fc 100644
--- a/examples/img2twit.cpp
+++ b/examples/img2twit.cpp
@@ -465,7 +465,7 @@ static inline void set_point(int index, float x, float y, float r,
 }
 
 static inline void get_point(int index, float *x, float *y, float *r,
-                             float *g, float *b, float *s)
+                             float *g, float *b, float *s, bool final = false)
 {
     uint32_t pt = points[index];
 
@@ -480,9 +480,18 @@ static inline void get_point(int index, float *x, float *y, float *r,
     *x = (fx + dx) * RANGE_X /*+ 0.5 * (index & 1)*/;
     *y = (fy + dy) * RANGE_Y /*+ 0.5 * (index & 1)*/;
 
-    *b = int2midrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R;
-    *g = int2midrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G;
-    *r = int2midrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B;
+    if(final)
+    {
+        *b = int2fullrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R;
+        *g = int2fullrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G;
+        *r = int2fullrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B;
+    }
+    else
+    {
+        *b = int2midrange(pt % RANGE_R, RANGE_R); pt /= RANGE_R;
+        *g = int2midrange(pt % RANGE_G, RANGE_G); pt /= RANGE_G;
+        *r = int2midrange(pt % RANGE_B, RANGE_B); pt /= RANGE_B;
+    }
 }
 
 static inline float clip(float x, int modulo)
@@ -625,7 +634,8 @@ static uint32_t apply_op(uint8_t op, uint32_t val)
     }
 }
 
-static void render(pipi_image_t *dst, int rx, int ry, int rw, int rh)
+static void render(pipi_image_t *dst,
+                   int rx, int ry, int rw, int rh, bool final)
 {
     int lookup[dw * RANGE_X * 2 * dh * RANGE_Y * 2];
     pipi_pixels_t *p = pipi_get_pixels(dst, PIPI_PIXELS_RGBA_F32);
@@ -644,16 +654,17 @@ static void render(pipi_image_t *dst, int rx, int ry, int rw, int rh)
     }
 
     /* Add fake points to close the triangulation */
-    dt.insert(K::Point_2(-p->w, -p->h));
-    dt.insert(K::Point_2(2 * p->w, -p->h));
-    dt.insert(K::Point_2(-p->w, 2 * p->h));
-    dt.insert(K::Point_2(2 * p->w, 2 * p->h));
+    dt.insert(K::Point_2(-dw * RANGE_X, -dh * RANGE_Y));
+    dt.insert(K::Point_2(2 * dw * RANGE_X, -dh * RANGE_Y));
+    dt.insert(K::Point_2(-dw * RANGE_X, 2 * dh * RANGE_Y));
+    dt.insert(K::Point_2(2 * dw * RANGE_X, 2 * dh * RANGE_Y));
 
     for(y = ry; y < ry + rh; y++)
     {
         for(x = rx; x < rx + rw; x++)
         {
-            K::Point_2 m(x, y);
+            K::Point_2 m((float)x * dw * RANGE_X / p->w,
+                         (float)y * dh * RANGE_Y / p->h);
             Point_coordinate_vector coords;
             CGAL::Triple<
               std::back_insert_iterator<Point_coordinate_vector>,
@@ -671,13 +682,14 @@ static void render(pipi_image_t *dst, int rx, int ry, int rw, int rh)
                 fx = (*it).first.x();
                 fy = (*it).first.y();
 
-                if(fx < 0 || fy < 0 || fx > p->w - 1 || fy > p->h - 1)
+                if(fx < 0 || fy < 0
+                    || fx > dw * RANGE_X - 1 || fy > dh * RANGE_Y - 1)
                     continue;
 
                 int index = lookup[(int)(fx * 2)
                                     + dw * RANGE_X * 2 * (int)(fy * 2)];
 
-                get_point(index, &fx, &fy, &fr, &fg, &fb, &fs);
+                get_point(index, &fx, &fy, &fr, &fg, &fb, &fs, final);
 
                 //float k = pow((*it).second * (1.0 + fs), 1.2);
                 float k = (*it).second * (1.00f + fs);
@@ -1054,7 +1066,7 @@ int main(int argc, char *argv[])
 
         /* Render what we just computed */
         tmp = pipi_new(dw * RANGE_X, dh * RANGE_Y);
-        render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y);
+        render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y, false);
         error = pipi_measure_rmsd(src, tmp);
 
         if(DEBUG_MODE)
@@ -1113,7 +1125,7 @@ int main(int argc, char *argv[])
                 points[pt] = candidates[i];
 
                 render(scrap, zonex * RANGE_X, zoney * RANGE_Y,
-                       zonew * RANGE_X, zoneh * RANGE_Y);
+                       zonew * RANGE_X, zoneh * RANGE_Y, false);
 
                 double newerr = pipi_measure_rmsd(src, scrap);
                 if(newerr < besterr)
@@ -1130,9 +1142,9 @@ int main(int argc, char *argv[])
             {
                 points[pt] = candidates[bestop];
                 /* Redraw image if the last check wasn't the best one */
-                if(bestop != 2)
+                if(bestop != 0)
                     render(scrap, zonex * RANGE_X, zoney * RANGE_Y,
-                           zonew * RANGE_X, zoneh * RANGE_Y);
+                           zonew * RANGE_X, zoneh * RANGE_Y, false);
 
                 pipi_free(tmp);
                 tmp = scrap;
@@ -1218,12 +1230,8 @@ int main(int argc, char *argv[])
         npoints = dw * dh * POINTS_PER_CELL;
 
         /* Render these points to a new image */
-        tmp = pipi_new(dw * RANGE_X, dh * RANGE_Y);
-        render(tmp, 0, 0, dw * RANGE_X, dh * RANGE_Y);
-
-        /* TODO: render directly to the final image; scaling sucks */
-        dst = pipi_resize(tmp, width, height);
-        pipi_free(tmp);
+        dst = pipi_new(width, height);
+        render(dst, 0, 0, width, height, true);
 
         /* Save image and bail out */
         pipi_save(dst, dstname);