Index: /branches/eam_branches/ohana.20190329/src/kapa2/src/InterpretKeys.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/kapa2/src/InterpretKeys.c	(revision 40942)
+++ /branches/eam_branches/ohana.20190329/src/kapa2/src/InterpretKeys.c	(revision 40943)
@@ -160,4 +160,6 @@
       break;
 
+    case XK_plus:
+    case XK_equal:
     case XK_KP_Add:
       if (modstate & ControlMask) {
@@ -171,4 +173,7 @@
       Reorient (graphic, image, image[0].picture.Xc, image[0].picture.Yc, 0);
       break;
+
+    case XK_minus:
+    case XK_underscore:
     case XK_KP_Subtract:
       if (modstate & ControlMask) {
Index: /branches/eam_branches/ohana.20190329/src/kapa2/src/Refresh.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/kapa2/src/Refresh.c	(revision 40942)
+++ /branches/eam_branches/ohana.20190329/src/kapa2/src/Refresh.c	(revision 40943)
@@ -1,5 +1,5 @@
 # include "Ximage.h"
 
-# define USE_BUFFERED_DRAW 0
+# define USE_BUFFERED_DRAW 1
 
 void bDrawXimage (bDrawBuffer *buffer);
@@ -47,6 +47,18 @@
   for (int i = 0; i < Nsection; i++) {
     Section *section = GetSectionByNumber (i);
-    DrawImageTool (section->image);
+
+    KapaImageWidget *image = section->image;
+    DrawImageTool (image);
+
+    /*** PaintOverlay is called in DrawImage ***
+    if (!image) continue;
+    for (int j = 0; j < NOVERLAYS; j++) {
+      if (image[0].overlay[j].active) {
+	PaintOverlay (graphic, image, j);
+      }
+    }
+    */
   }
+
   FlushDisplay ();
 }
@@ -71,8 +83,21 @@
   Nsection = GetNumberOfSections ();
   for (i = 0; i < Nsection; i++) {
-      section = GetSectionByNumber (i);
-      DrawSectionBG (graphic, section);
-      DrawImage (section->image);
-      DrawGraph (section->graph);
+    section = GetSectionByNumber (i);
+    DrawSectionBG (graphic, section);
+
+    KapaImageWidget *image = section->image;
+    DrawImage (image);
+    DrawImageTool (image);
+
+    /*** the overlay is added in DrawImage  ***/
+    if (image) {
+      for (int j = 0; j < NOVERLAYS; j++) {
+	if (image[0].overlay[j].active) {
+	  PaintOverlay (graphic, image, j);
+	}
+      }
+    }
+
+    DrawGraph (section->graph);
   }
 
Index: /branches/eam_branches/ohana.20190329/src/kapa2/src/bDrawOverlay.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/kapa2/src/bDrawOverlay.c	(revision 40942)
+++ /branches/eam_branches/ohana.20190329/src/kapa2/src/bDrawOverlay.c	(revision 40943)
@@ -24,8 +24,13 @@
   }
 
-  Xmin = 0;
-  Ymin = 0;
-  Xmax = image[0].picture.dx;
-  Ymax = image[0].picture.dy;
+  // Xmin = 0;
+  // Ymin = 0;
+  // Xmax = image[0].picture.dx;
+  // Ymax = image[0].picture.dy;
+
+  Xmin = image[0].picture.x;
+  Ymin = image[0].picture.y;
+  Xmax = image[0].picture.x + image[0].picture.dx; // maybe this should be just dx?
+  Ymax = image[0].picture.y + image[0].picture.dy;
 
   if (N == INFRONT) {
@@ -35,5 +40,7 @@
 
   for (i = 0; i < image[0].overlay[N].Nobjects; i++) {
-    Image_to_Picture (&X, &Y, image[0].overlay[N].objects[i].x, image[0].overlay[N].objects[i].y, &image[0].picture);
+    // XXX the 0.5,0.5 offset is apparently needed here.
+    // work on rationalizing these functions in the context of their different plotting types
+    Image_to_Screen (&X, &Y, image[0].overlay[N].objects[i].x - 0.5, image[0].overlay[N].objects[i].y - 0.5, &image[0].picture);
     dX = image[0].overlay[N].objects[i].dx * expand;
     dY = image[0].overlay[N].objects[i].dy * expand;
