box->x2 = 0;
     box->y1 = 0;
     box->y2 = 0;
-    rect->visible = 0;
+    box->visible = 0;
 }
 
 static void selection_box_draw(selection_box_t *box, cairo_t *cr)
 {
-    int box_x = MIN(box->x1, box->x2);
-    int box_y = MIN(box->y1, box->y2);
-    int box_width = abs(box->x2 - box->x1);
-    int box_height = abs(box->y2 - box->y1);
-    cairo_rectangle (cr, box_x, box_y, box_width, box_height);
+    cairo_rectangle (cr, box->x1, box->y1, box->x2 -box->x1, box->y2 - box->y1);
     cairo_set_source_rgba(cr, 0.0, 0.1, 0.2, 0.5);
     cairo_fill (cr);
 }
        selection_box_t *box;
        box = &game->selection_box;
 
+       int x = MIN(box->x1, box->x2);
+       int y = MIN(box->y1, box->y2);
+       int width = abs(box->x2 - box->x1);
+       int height = abs(box->y2 - box->y1);
+
        box->visible = 0;       
-       gtk_widget_queue_draw_area (widget, box->x, box->y, box->width, box->height);
+       gtk_widget_queue_draw_area (widget, x - 1, y - 1, width - 2, height + 2);
 
        tile_group_t group;
        group.num_tiles = 0;
        box = &game->selection_box;
        box->visible = 1;
 
-       gtk_widget_queue_draw_area (widget, box->x - 1, box->y - 1, box->width + 1, box->height + 2);
+       gtk_widget_queue_draw_area ( widget,  MIN(box->x1, box->x2), MIN(box->y1, box->y2), abs(box->x2 - box->x1), abs(box->y2 - box->y1) );
 
-       box->width = event->x - box->x;
-       box->height = event->y - box->y;
+       box->x2 = event->x;
+       box->x2 = event->y;
 
-       gtk_widget_queue_draw_area (widget, box->x - 1, box->y - 1, box->width + 1, box->height + 2);
+       gtk_widget_queue_draw_area ( widget, MIN(box->x1, box->x2), MIN(box->y1, box->y2), abs(box->x2 - box->x1), abs(box->y2 - box->y1) );
     }
     else
     {