Index: /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/DrawObjects.c
===================================================================
--- /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/DrawObjects.c	(revision 37945)
+++ /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/DrawObjects.c	(revision 37946)
@@ -712,8 +712,10 @@
 void DrawXErrors (KapaGraphWidget *graph, Gobjects *object) {
   
-  int i, bar;
-  float *x, *y, *dxm, *dxp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dxm, *dxp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
+
+  int scaleSize = (object[0].size < 0);
 
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -730,5 +732,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
   
@@ -738,10 +743,19 @@
   Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
+    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER + D;
     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
-    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
-    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
+    sx1 = sx0 + dxp[i]*mxi - D;
+    sy1 = sy0 + dxp[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -756,9 +770,11 @@
       }
     }
+  skip_dxp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    if (D > fabs(dxm[i]*mxi)) continue;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER - D;
     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
-    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
-    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
+    sx1 = sx0 - dxm[i]*mxi + D;
+    sy1 = sy0 - dxm[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -779,8 +795,10 @@
 void DrawYErrors (KapaGraphWidget *graph, Gobjects *object) {
 
-  int i, bar;
-  float *x, *y, *dym, *dyp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dym, *dyp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
+
+  int scaleSize = (object[0].size < 0);
 
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -797,5 +815,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
   
@@ -805,10 +826,19 @@
   Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
+    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
     sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
-    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER - D;
     sx1 = sx0 + dyp[i]*mxj;
-    sy1 = sy0 + dyp[i]*myj;
+    sy1 = sy0 + dyp[i]*myj + D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -823,9 +853,13 @@
       }
     }
+  skip_dyp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (D > fabs(dym[i]*myj)) continue;
     sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
-    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
-    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
-    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by + YCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER + D;
+    sx1 = sx0 - dym[i]*mxj;
+    sy1 = sy0 - dym[i]*myj - D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
Index: /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/PSObjects.c
===================================================================
--- /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/PSObjects.c	(revision 37945)
+++ /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/PSObjects.c	(revision 37946)
@@ -610,8 +610,10 @@
 void PSXErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
   
-  int i, bar;
-  float *x, *y, *dxm, *dxp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dxm, *dxp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11;
+
+  int scaleSize = (object[0].size < 0);
 
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -628,5 +630,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    
@@ -636,10 +641,19 @@
   double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
+    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + D;
     sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
+    sx1 = sx0 + dxp[i]*mxi - D;
+    sy1 = sy0 + dxp[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -648,17 +662,17 @@
       {
 	ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
-	// DrawLine (sx0, sy0, sx1, sy1);
 	if (bar) {
 	  sx10 = sy1 - sz;
 	  sx11 = sy1 + sz;
 	  ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
-	  // DrawLine (sx1, sx10, sx1, sx11);
-	}
-      }
+	}
+      }
+  skip_dxp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
+    if (D > fabs(dxm[i]*mxi)) continue;
+    sx0 = x[i]*mxi + y[i]*mxj + bx - D;
     sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
+    sx1 = sx0 - dxm[i]*mxi + D;
+    sy1 = sy0 - dxm[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -667,10 +681,8 @@
       {
 	ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
-	// DrawLine (sx0, sy0, sx1, sy1);
 	if (bar) {
 	  sx10 = sy1 - sz;
 	  sx11 = sy1 + sz;
 	  ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
-	  // DrawLine (sx1, sx10, sx1, sx11);
 	}
       }
@@ -682,9 +694,11 @@
 void PSYErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
   
-  int i, bar;
-  float *x, *y, *dym, *dyp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dym, *dyp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11;
   
+  int scaleSize = (object[0].size < 0);
+
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
   mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
@@ -700,5 +714,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
   
@@ -708,10 +725,19 @@
   double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
+    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
     sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
-    sy1 = x[i]*myi + (y[i] + dyp[i])*myj + by;
+    sy0 = x[i]*myi + y[i]*myj + by - D;
+    sx1 = sx0 + dyp[i]*mxj;
+    sy1 = sy0 + dyp[i]*myj + D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -720,17 +746,19 @@
       {
 	ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
-	// DrawLine (sx0, sy0, sx1, sy1);
 	if (bar) {
 	  sx10 = sx1 - sz;
 	  sx11 = sx1 + sz;
 	  ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
-	  // DrawLine (sx10, sy1, sx11, sy1);
-	}
-      }
+	}
+      }
+  skip_dyp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (D > fabs(dym[i]*myj)) continue;
     sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
-    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
+    sy0 = x[i]*myi + y[i]*myj + by + D;
+    sx1 = sx0 - dym[i]*mxj;
+    sy1 = sy0 - dym[i]*myj - D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -739,10 +767,8 @@
       {
 	ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
-	// DrawLine (sx0, sy0, sx1, sy1);
 	if (bar) {
 	  sx10 = sx1 - sz;
 	  sx11 = sx1 + sz;
 	  ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
-	  // DrawLine (sx10, sy1, sx11, sy1);
 	}
       }
Index: /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/bDrawObjects.c	(revision 37945)
+++ /branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/bDrawObjects.c	(revision 37946)
@@ -656,8 +656,10 @@
 void bDrawXErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
   
-  int i, bar;
-  float *x, *y, *dxm, *dxp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dxm, *dxp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11;
+
+  int scaleSize = (object[0].size < 0);
 
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -674,5 +676,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    
@@ -682,10 +687,19 @@
   double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
+    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + D;
     sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
+    sx1 = sx0 + dxp[i]*mxi - D;
+    sy1 = sy0 + dxp[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -694,17 +708,17 @@
     {
       bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
-      //   DrawLine (buffer, sx0, sy0, sx1, sy1);
       if (bar) {
 	sx10 = sy1 - sz;
 	sx11 = sy1 + sz;
 	bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
-	//   DrawLine (buffer, sx1, sx10, sx1, sx11);
-      }
-    }
+      }
+    }
+  skip_dxp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
+    if (D > fabs(dxm[i]*mxi)) continue;
+    sx0 = x[i]*mxi + y[i]*mxj + bx - D;
     sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
+    sx1 = sx0 - dxm[i]*mxi + D;
+    sy1 = sy0 - dxm[i]*myi;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -713,10 +727,8 @@
     {
       bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
-      //   DrawLine (buffer, sx0, sy0, sx1, sy1);
       if (bar) {
 	sx10 = sy1 - sz;
 	sx11 = sy1 + sz;
 	bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
-	//   DrawLine (buffer, sx1, sx10, sx1, sx11);
       }
     }
@@ -727,9 +739,11 @@
 void bDrawYErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
   
-  int i, bar;
-  float *x, *y, *dym, *dyp;
+  int i, bar, dz, ds, D;
+  float *x, *y, *z, *dym, *dyp;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
   double sx0, sy0, sx1, sy1, sz, sx10, sx11;
   
+  int scaleSize = (object[0].size < 0);
+
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
   mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
@@ -745,5 +759,8 @@
   by = byi + byj;
   
-  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; 
+  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
+  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
+
+  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
   bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
   
@@ -753,10 +770,19 @@
   double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
 
+  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
+
   for (i = 0; i < object[0].Npts; i++) {
-    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
+    // for open circles, only go to the outer radius
+    D = 0;
+    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
+    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
+    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
     sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
-    sy1 = x[i]*myi + (y[i] + dyp[i])*myj + by;
+    sy0 = x[i]*myi + y[i]*myj + by - D;
+    sx1 = sx0 + dyp[i]*mxj;
+    sy1 = sy0 + dyp[i]*myj + D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -765,17 +791,19 @@
     {
       bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
-      //   DrawLine (buffer, sx0, sy0, sx1, sy1);
       if (bar) {
 	sx10 = sx1 - sz;
 	sx11 = sx1 + sz;
 	bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
-	//   DrawLine (buffer, sx10, sy1, sx11, sy1);
-      }
-    }
+      }
+    }
+  skip_dyp:
     if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
+    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
+    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
+    if (D > fabs(dym[i]*myj)) continue;
     sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
-    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
+    sy0 = x[i]*myi + y[i]*myj + by + D;
+    sx1 = sx0 - dym[i]*mxj;
+    sy1 = sy0 - dym[i]*myj - D;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -784,10 +812,8 @@
     {
       bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
-      //   DrawLine (buffer, sx0, sy0, sx1, sy1);
       if (bar) {
 	sx10 = sx1 - sz;
 	sx11 = sx1 + sz;
 	bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
-	//   DrawLine (buffer, sx10, sy1, sx11, sy1);
       }
     }
