Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/biassub.c	(revision 20839)
@@ -5,5 +5,6 @@
   int i, j, k, N, dir, nlong, nwide, start;
   int sx, sy, nx, ny, NX, NY, NoVector, Nval;
-  float *V, *DV, dV, *vect, *segment, val;
+  float *V, dV, *segment, val;
+  opihi_flt *DV, *vect;
   Vector *xvec, *yvec;
   Buffer *buf;
@@ -54,5 +55,5 @@
   }
 
-  ALLOCATE (vect, float, nlong);
+  ALLOCATE (vect, opihi_flt, nlong);
   ALLOCATE (segment, float, nwide);
 
@@ -91,9 +92,9 @@
   if (!NoVector) {
     xvec[0].Nelements = yvec[0].Nelements = nlong;
-    REALLOCATE (xvec[0].elements, float, nlong);
-    REALLOCATE (yvec[0].elements, float, nlong);
+    REALLOCATE (xvec[0].elements.Flt, opihi_flt, nlong);
+    REALLOCATE (yvec[0].elements.Flt, opihi_flt, nlong);
     for (i = 0; i < nlong; i++) {
-      xvec[0].elements[i] = i + start;
-      yvec[0].elements[i] = vect[i];
+      xvec[0].elements.Flt[i] = i + start;
+      yvec[0].elements.Flt[i] = vect[i];
     }
   }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cgrid.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 20839)
@@ -3,6 +3,6 @@
   if (N == NELEMENTS) { \
     NELEMENTS +=200; \
-    REALLOCATE (Xvec.elements, float, NELEMENTS); \
-    REALLOCATE (Yvec.elements, float, NELEMENTS); \
+    REALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS); \
+    REALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS); \
   }
 
@@ -96,6 +96,6 @@
   /* prepare vectors to hold data */
   NELEMENTS = 200;
-  ALLOCATE (Xvec.elements, float, NELEMENTS);
-  ALLOCATE (Yvec.elements, float, NELEMENTS);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS);
   N = 0;
   
@@ -109,23 +109,23 @@
     for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
       D = MAX (-90, MIN(90, d));
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -142,23 +142,23 @@
     for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
       D = MAX (-90, MIN(90, d));
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -181,23 +181,23 @@
     for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
       D = MAX (-90, MIN(90, d));
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -214,23 +214,23 @@
     for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
       D = MAX (-90, MIN(90, d));
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -253,23 +253,23 @@
     First = TRUE;
     for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -285,23 +285,23 @@
     LOnPic = TRUE;
     for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -324,23 +324,23 @@
     First = TRUE;
     for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -356,23 +356,23 @@
     LOnPic = TRUE;
     for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
-      status = fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements[N] - Xvec.elements[N-1]) > 10) && (fabs(Yvec.elements[N] - Yvec.elements[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements[N] >= graphmode.xmin) && (Xvec.elements[N] <= graphmode.xmax) && 
-	  (Yvec.elements[N] >= graphmode.ymin) && (Yvec.elements[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements[N] = Xvec.elements[N-1];
-	  Yvec.elements[N] = Yvec.elements[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements[N-2] = Xvec.elements[N-1];
-	    Yvec.elements[N-2] = Yvec.elements[N-1];
+      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
+      /*
+      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
+	First = TRUE;
+	*/
+      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
+	N++;
+	CHECKELEMENTS;
+	OnPic = TRUE;
+	if (!First) {
+	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
+	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
+	  N++;
+	  CHECKELEMENTS;
+	} else {
+	  if (N > 1) {
+	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
+	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
 	    N--;
 	  }
@@ -391,8 +391,8 @@
   graphmode.ptype = 100; /* connect a pair */
   graphmode.etype = 0;
-  PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
-
-  free (Xvec.elements);
-  free (Yvec.elements);
+  PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
+
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   return (TRUE);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/coords.c	(revision 20839)
@@ -89,5 +89,5 @@
   if (mode == SKY) {
     for (i = 0; i < xvec[0].Nelements; i++) {
-      fXY_to_RD (&xvec[0].elements[i], &yvec[0].elements[i], xvec[0].elements[i], yvec[0].elements[i], &coords);
+      XY_to_RD (&xvec[0].elements.Flt[i], &yvec[0].elements.Flt[i], xvec[0].elements.Flt[i], yvec[0].elements.Flt[i], &coords);
     }
     return (TRUE);
@@ -95,5 +95,5 @@
   if (mode == PIXEL) {
     for (i = 0; i < xvec[0].Nelements; i++) {
-      fRD_to_XY (&xvec[0].elements[i], &yvec[0].elements[i], xvec[0].elements[i], yvec[0].elements[i], &coords);
+      RD_to_XY (&xvec[0].elements.Flt[i], &yvec[0].elements.Flt[i], xvec[0].elements.Flt[i], yvec[0].elements.Flt[i], &coords);
     }
     return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/cplot.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, kapa, Npts, status, leftside;
-  float *x, *y, *r, *d, Rmin, Rmax, Rmid;
+  opihi_flt *x, *y, *r, *d, Rmin, Rmax, Rmid;
   Vector Xvec, Yvec, *xvec, *yvec;
   Graphdata graphmode;
@@ -28,14 +28,14 @@
   }
 
-  ALLOCATE (Xvec.elements, float, xvec[0].Nelements);
-  ALLOCATE (Yvec.elements, float, xvec[0].Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, xvec[0].Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, xvec[0].Nelements);
     
   Xvec.Nelements = xvec[0].Nelements;
   Yvec.Nelements = xvec[0].Nelements;
   
-  r = xvec[0].elements;
-  d = yvec[0].elements;
-  x = Xvec.elements;
-  y = Yvec.elements;
+  r = xvec[0].elements.Flt;
+  d = yvec[0].elements.Flt;
+  x = Xvec.elements.Flt;
+  y = Yvec.elements.Flt;
   
   Npts = 0;
@@ -51,5 +51,5 @@
       if (!leftside && (r[0] < Rmid - 90)) { r[0] += 360.0; }
     }
-    status = fRD_to_XY (x, y, *r, *d, &graphmode.coords);
+    status = RD_to_XY (x, y, *r, *d, &graphmode.coords);
 
     // if we fail on one of the points, drop the corresponding pair
@@ -77,8 +77,8 @@
 
   graphmode.etype = 0;
-  PlotVectorPair (kapa, Npts, Xvec.elements, Yvec.elements, &graphmode);
+  PlotVectorPair (kapa, Npts, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
     
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/csystem.c	(revision 20839)
@@ -6,5 +6,5 @@
   int i;
   double X, Y, x, y;
-  float *xptr, *yptr;
+  opihi_flt *xptr, *yptr;
   Vector *xvec, *yvec;
   CoordTransformSystem input, output;
@@ -54,12 +54,9 @@
   }
   
-  xptr = xvec[0].elements;
-  yptr = yvec[0].elements;
+  xptr = xvec[0].elements.Flt;
+  yptr = yvec[0].elements.Flt;
 
   for (i = 0; i < xvec[0].Nelements; i++, xptr++, yptr++) {
-    // ApplyTransform takes (double *), but xptr, yptr are (float *)
-    ApplyTransform (&x, &y, *xptr, *yptr, transform);
-    *xptr = x;
-    *yptr = y;
+    ApplyTransform (xptr, yptr, *xptr, *yptr, transform);
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/czplot.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, kapa, Npts;
   double min, range, Rmin, Rmax;
-  float *in, *out, *r, *d, *x, *y;
+  opihi_flt *in, *out, *r, *d, *x, *y;
   Vector Xvec, Yvec, Zvec, *xvec, *yvec, *zvec;
   Graphdata graphmode;
@@ -37,18 +37,18 @@
   Yvec.Nelements = xvec[0].Nelements;
   Zvec.Nelements = zvec[0].Nelements;
-  ALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  ALLOCATE (Yvec.elements, float, Yvec.Nelements);
-  ALLOCATE (Zvec.elements, float, Zvec.Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+  ALLOCATE (Zvec.elements.Flt, opihi_flt, Zvec.Nelements);
   
-  r   = xvec[0].elements;
-  d   = yvec[0].elements;
-  in  = zvec[0].elements;
-  x   = Xvec.elements;
-  y   = Yvec.elements;
-  out = Zvec.elements;
+  r   = xvec[0].elements.Flt;
+  d   = yvec[0].elements.Flt;
+  in  = zvec[0].elements.Flt;
+  x   = Xvec.elements.Flt;
+  y   = Yvec.elements.Flt;
+  out = Zvec.elements.Flt;
   for (i = 0; i < Zvec.Nelements; i++, in++, out++, r++, d++, x++, y++) {
     *out = MIN (1.0, MAX (0.01, (*in - min) / range));
     *r = ohana_normalize_angle (*r);
-    fRD_to_XY (x, y, *r, *d, &graphmode.coords);
+    RD_to_XY (x, y, *r, *d, &graphmode.coords);
   }
 
@@ -57,9 +57,9 @@
   graphmode.etype = 0;
   Npts = Xvec.Nelements;
-  PlotVectorTriplet (kapa, Npts, Xvec.elements, Yvec.elements, Zvec.elements, &graphmode);
+  PlotVectorTriplet (kapa, Npts, Xvec.elements.Flt, Yvec.elements.Flt, Zvec.elements.Flt, &graphmode);
 
-  free (Xvec.elements);
-  free (Yvec.elements);
-  free (Zvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
+  free (Zvec.elements.Flt);
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-fgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float fgaussTD (float, float, float *, int, float *);
+opihi_flt fgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  fgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -40,8 +40,8 @@
 
 /* real 2D gaussian -- x, y, sx, sy, sxy, I, sky */
-float fgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt fgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float pgauss_psfTD (float, float, float *, int, float *);
+opihi_flt pgauss_psfTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  pgauss_psfCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -38,8 +38,8 @@
 
 /* pseudo 2D gaussian -- x, y, (sx), (sy), (sxy), I, sky */
-float pgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt pgauss_psfTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   /* par -> fpar: (2,0), (3,1), (4,2) */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float pgaussTD (float, float, float *, int, float *);
+opihi_flt pgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  pgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0.0);
@@ -40,8 +40,8 @@
 
 /* pseudo 2D gaussian -- x, y, sx, sy, sxy, I, sky */
-float pgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt pgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float qfgaussTD (float, float, float *, int, float *);
+opihi_flt qfgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  qfgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0]  = get_variable_default ("Xg", 0);
@@ -44,8 +44,8 @@
 
 /* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky */
-float qfgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt qfgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float qgauss_psfTD (float, float, float *, int, float *);
+opihi_flt qgauss_psfTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  qgauss_psfCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0]  = get_variable_default ("Xg", 0);
@@ -41,8 +41,8 @@
 
 /* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky, sr */
-float qgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt qgauss_psfTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float qgaussTD (float, float, float *, int, float *);
+opihi_flt qgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  qgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0]  = get_variable_default ("Xg", 0);
@@ -44,8 +44,8 @@
 
 /* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky, sr */
-float qgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt qgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float qrgaussTD (float, float, float *, int, float *);
+opihi_flt qrgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  qrgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0]  = get_variable_default ("Xg", 0);
@@ -44,8 +44,8 @@
 }
 
-float qrgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt qrgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   X = x - par[0];
@@ -77,8 +77,8 @@
 # if (0)
 /* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky, sr */
-float qrgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt qrgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f;
 
   /* if (par[7] < 1.0) par[7] = 1.0; */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-rgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float rgaussTD (float, float, float *, int, float *);
+opihi_flt rgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  rgaussCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -36,8 +36,8 @@
 
 /* two components: (1 + z_1 + 0.5*z_1^2 + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
-float rgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt rgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px1, py1, px2, py2;
-  float z1, z2, r, q1, q2, f;
+  opihi_flt X, Y, px1, py1, px2, py2;
+  opihi_flt z1, z2, r, q1, q2, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-serbulge.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-serbulge.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-serbulge.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float serbulgeTD (float, float, float *, int, float *);
+opihi_flt serbulgeTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  serbulgeCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -41,8 +41,8 @@
 /* sersic galaxy model w/ bulge: -- x, y, (sx, sy, sxy)_1, I_1, sky, (sx, sy, sxy)_2, I_2, n */
 /* exp (-b (r/r_e)^(1/n)) + pgauss (r) */
-float serbulgeTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt serbulgeTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px1, px2, py1, py2;
-  float z1, z2, r1, r2, t, q1, q2, f;
+  opihi_flt X, Y, px1, px2, py1, py2;
+  opihi_flt z1, z2, r1, r2, t, q1, q2, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sersic.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sersic.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sersic.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float sersicTD (float, float, float *, int, float *);
+opihi_flt sersicTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  sersicCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -33,8 +33,8 @@
 /* sersic galaxy model -- x, y, sx, sy, sxy, I, sky, n */
 /* exp (-b (r/r_e)^(1/n)) */
-float sersicTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt sersicTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, t, q, f;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, t, q, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float sgauss_psfTD (float, float, float *, int, float *);
+opihi_flt sgauss_psfTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  sgauss_psfCL ();
 
@@ -14,8 +14,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -43,8 +43,8 @@
 
 /* two components: (1 + z_1 + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
-float sgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt sgauss_psfTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px1, py1, px2, py2;
-  float z1, z2, r, q1, q2, f;
+  opihi_flt X, Y, px1, py1, px2, py2;
+  opihi_flt z1, z2, r, q1, q2, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 20839)
@@ -3,5 +3,5 @@
 # define FSCALE 1.2
 
-float sgaussTD (float, float, float *, int, float *);
+opihi_flt sgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  sgaussCL ();
 
@@ -16,8 +16,8 @@
 
   /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
+  ALLOCATE (par, opihi_flt, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(opihi_flt));
+  ALLOCATE (fpar, opihi_flt, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(opihi_flt));
 
   par[0] = get_variable_default ("Xg", 0);
@@ -52,8 +52,8 @@
 
 /* two components: (1 + z_1 + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
-float sgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt sgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px1, py1, px2, py2;
-  float z1, z2, r, q1, q2, f, f1, f2;
+  opihi_flt X, Y, px1, py1, px2, py2;
+  opihi_flt z1, z2, r, q1, q2, f, f1, f2;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-tgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float tgaussTD (float, float, float *, int, float *);
+opihi_flt tgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  tgaussCL ();
 
@@ -31,8 +31,8 @@
 
 /* two components: (1 + z_1^M + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
-float tgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+opihi_flt tgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px1, py1, px2, py2;
-  float z1, z2, r, q1, q2, f;
+  opihi_flt X, Y, px1, py1, px2, py2;
+  opihi_flt z1, z2, r, q1, q2, f;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-vgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 20839)
@@ -1,5 +1,5 @@
 # include "imfit.h"
 
-float vgaussTD (float, float, float *, int, float *);
+opihi_flt vgaussTD (opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void  vgaussCL ();
 
@@ -25,9 +25,9 @@
 }
 
-/* pseudo 2D gaussian with floating 2nd and 3rd order terms -- x, y, sx, sy, sxy, I, sky, f1, f2 */
-float vgaussTD (float x, float y, float *par, int Npar, float *dpar) {
+/* pseudo 2D gaussian with opihi_flting 2nd and 3rd order terms -- x, y, sx, sy, sxy, I, sky, f1, f2 */
+opihi_flt vgaussTD (opihi_flt x, opihi_flt y, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float X, Y, px, py;
-  float z, r, q, f, k;
+  opihi_flt X, Y, px, py;
+  opihi_flt z, r, q, f, k;
 
   X = x - par[0];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/imfit.c	(revision 20839)
@@ -6,5 +6,6 @@
   int sx, sy, nx, ny, Nx, Ny;
   float chisq, ochisq, dchisq, Gain, RDnoise, SatThreshold;
-  float *x, *y, *z, *dz, *V;
+  opihi_flt *x, *y, *z, *dz;
+  float *V;
   Buffer *buf;
 
@@ -94,8 +95,8 @@
   N = 0;
   Npts = nx*ny;
-  ALLOCATE (x,  float, 2*Npts);
-  ALLOCATE (y,  float, 2*Npts);
-  ALLOCATE (z,  float, 2*Npts);
-  ALLOCATE (dz, float, 2*Npts);
+  ALLOCATE (x,  opihi_flt, 2*Npts);
+  ALLOCATE (y,  opihi_flt, 2*Npts);
+  ALLOCATE (z,  opihi_flt, 2*Npts);
+  ALLOCATE (dz, opihi_flt, 2*Npts);
   for (j = 0; j < ny; j++) {
     if (j + sy < 0) continue;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/multifit.c	(revision 20839)
@@ -72,5 +72,5 @@
 	    v = 0;
 	    for (n = 0; n < Nwo[i-1][0].Nelements; n++) {
-	      v += -pow (Nwo[i-1][0].elements[n], (double)(j+J));
+	      v += -pow (Nwo[i-1][0].elements.Flt[n], (double)(j+J));
 	    }
 	    a[Ny][Nx] = v;
@@ -83,5 +83,5 @@
 	    v = 0;
 	    for (n = 0; n < Nwo[i][0].Nelements; n++) {
-	      v += -pow (Nwo[i][0].elements[n], (double)(j+J));
+	      v += -pow (Nwo[i][0].elements.Flt[n], (double)(j+J));
 	    }
 	    a[Ny][Nx] = v;
@@ -94,14 +94,14 @@
 	    v = 0;
 	    for (n = 0; n < Nwb[i][0].Nelements; n++) {
-	      v += pow (Nwb[i][0].elements[n], (double)(j+J));
+	      v += pow (Nwb[i][0].elements.Flt[n], (double)(j+J));
 	    }
 	    if (i > 0) {
 	      for (n = 0; n < Nwo[i-1][0].Nelements; n++) {
-		v += pow (Nwo[i-1][0].elements[n], (double)(j+J));
+		v += pow (Nwo[i-1][0].elements.Flt[n], (double)(j+J));
 	      }
 	    }
 	    if (i < Norder - 1) {
 	      for (n = 0; n < Nwo[i][0].Nelements; n++) {
-		v += pow (Nwo[i][0].elements[n], (double)(j+J));
+		v += pow (Nwo[i][0].elements.Flt[n], (double)(j+J));
 	      }
 	    }
@@ -123,17 +123,17 @@
       v = 0;
       for (n = 0; n < Nwb[i][0].Nelements; n++) {
-	v += NMb[i][0].elements[n]*pow (Nwb[i][0].elements[n], (double)j);
-	v -= Nmb[i][0].elements[n]*pow (Nwb[i][0].elements[n], (double)j);
+	v += NMb[i][0].elements.Flt[n]*pow (Nwb[i][0].elements.Flt[n], (double)j);
+	v -= Nmb[i][0].elements.Flt[n]*pow (Nwb[i][0].elements.Flt[n], (double)j);
       }
       if (i > 0) {
 	for (n = 0; n < Nwo[i-1][0].Nelements; n++) {
-	  v += Nmh[i-1][0].elements[n] * pow (Nwo[i-1][0].elements[n], (double)j);
-	  v -= Nml[i-1][0].elements[n] * pow (Nwo[i-1][0].elements[n], (double)j);
+	  v += Nmh[i-1][0].elements.Flt[n] * pow (Nwo[i-1][0].elements.Flt[n], (double)j);
+	  v -= Nml[i-1][0].elements.Flt[n] * pow (Nwo[i-1][0].elements.Flt[n], (double)j);
 	}
       }
       if (i < Norder - 1) {
 	for (n = 0; n < Nwo[i][0].Nelements; n++) {
-	  v += Nml[i][0].elements[n] * pow (Nwo[i][0].elements[n], (double)j);
-	  v -= Nmh[i][0].elements[n] * pow (Nwo[i][0].elements[n], (double)j);
+	  v += Nml[i][0].elements.Flt[n] * pow (Nwo[i][0].elements.Flt[n], (double)j);
+	  v -= Nmh[i][0].elements.Flt[n] * pow (Nwo[i][0].elements.Flt[n], (double)j);
 	}
       }
@@ -146,7 +146,7 @@
   for (i = 0; i < Norder; i++) {
     Nc[i][0].Nelements = nterm[i];
-    REALLOCATE (Nc[i][0].elements, float, nterm[i]);
+    REALLOCATE (Nc[i][0].elements.Flt, opihi_flt, nterm[i]);
     for (j = 0; j < nterm[i]; j++, Ny++) {
-      Nc[i][0].elements[j] = b[Ny][0];
+      Nc[i][0].elements.Flt[j] = b[Ny][0];
     }
   }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/precess.c	(revision 20839)
@@ -91,6 +91,6 @@
   
   for (i = 0; i < xvec[0].Nelements; i++) {
-    A = xvec[0].elements[i];
-    D = yvec[0].elements[i];
+    A = xvec[0].elements.Flt[i];
+    D = yvec[0].elements.Flt[i];
     SD =  cos(RAD_DEG*A + zeta)*sin(theta)*cos(RAD_DEG*D) + cos(theta)*sin(RAD_DEG*D);
     CD = sqrt (1 - SD*SD);
@@ -104,6 +104,6 @@
       RA += 360;
     
-    xvec[0].elements[i] = RA;
-    yvec[0].elements[i] = DEC; 
+    xvec[0].elements.Flt[i] = RA;
+    yvec[0].elements.Flt[i] = DEC; 
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/profile.c	(revision 20839)
@@ -29,7 +29,7 @@
 
   xvec[0].Nelements = yvec[0].Nelements = (int)SQ(2*N+1);
-  REALLOCATE (xvec[0].elements, float, 5*(int)SQ(2*N+1));
-  REALLOCATE (yvec[0].elements, float, 5*(int)SQ(2*N+1));
-  bzero (yvec[0].elements, (int)SQ(2*N+1)*sizeof(float)+1);
+  REALLOCATE (xvec[0].elements.Flt, opihi_flt, 5*(int)SQ(2*N+1));
+  REALLOCATE (yvec[0].elements.Flt, opihi_flt, 5*(int)SQ(2*N+1));
+  bzero (yvec[0].elements.Flt, (int)SQ(2*N+1)*sizeof(opihi_flt)+1);
   V = (float *)(buf[0].matrix.buffer); 
   Npt = 0;
@@ -37,10 +37,10 @@
   for (i = sx - N; i < sx + N; i++) {
     for (j = sy - N; j < sy + N; j++, Npt++) {
-      yvec[0].elements[Npt] = V[i + j*Nx];
-      xvec[0].elements[Npt] = hypot (i - sx, j - sy);
+      yvec[0].elements.Flt[Npt] = V[i + j*Nx];
+      xvec[0].elements.Flt[Npt] = hypot (i - sx, j - sy);
     }
   }
 
-  fsortpair (xvec[0].elements, yvec[0].elements, xvec[0].Nelements);
+  dsortpair (xvec[0].elements.Flt, yvec[0].elements.Flt, xvec[0].Nelements);
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.astro/spec.c	(revision 20839)
@@ -55,6 +55,6 @@
 
   N = y2 - y1;
-  REALLOCATE (xvec[0].elements, float, N);
-  REALLOCATE (yvec[0].elements, float, N);
+  REALLOCATE (xvec[0].elements.Flt, opihi_flt, N);
+  REALLOCATE (yvec[0].elements.Flt, opihi_flt, N);
   xvec[0].Nelements = N;
   yvec[0].Nelements = N;
@@ -103,6 +103,6 @@
       R += 1.0 / sky2;
     }
-    xvec[0].elements[j] = j + y1; 
-    yvec[0].elements[j] = F / R; 
+    xvec[0].elements.Flt[j] = j + y1; 
+    yvec[0].elements.Flt[j] = F / R; 
     gprint (GP_ERR, " %5.1f %7.1f  %6.2f\n", sky, sky2, (F/R));
   }    
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/accum.c	(revision 20839)
@@ -5,5 +5,6 @@
   int i, Nbins, bin, N, Normalize;
   float start, end, delta;
-  float *V, *K, *O, *NV;
+  int *NV;
+  opihi_flt *V, *K, *O;
   Vector *val, *key, *out;
 
@@ -46,14 +47,14 @@
 
   out[0].Nelements = Nbins;
-  REALLOCATE (out[0].elements, float, out[0].Nelements);
-  bzero (out[0].elements, sizeof(float)*out[0].Nelements);
+  REALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
+  bzero (out[0].elements.Flt, sizeof(opihi_flt)*out[0].Nelements);
   if (Normalize) {
-    ALLOCATE (NV, float, Nbins);
-    bzero (NV, sizeof(float)*Nbins);
+    ALLOCATE (NV, int, Nbins);
+    bzero (NV, sizeof(int)*Nbins);
   }
 
-  V = val[0].elements;
-  K = key[0].elements;
-  O = out[0].elements;
+  V = val[0].elements.Flt;
+  K = key[0].elements.Flt;
+  O = out[0].elements.Flt;
 
   for (i = 0; i < val[0].Nelements; i++, V++, K++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit.c	(revision 20839)
@@ -1,5 +1,3 @@
 # include "data.h"
-
-char *get_variable (char *);
 
 int applyfit (int argc, char **argv) {
@@ -8,5 +6,5 @@
   char *c, name[64];
   double *C, X;
-  float *x, *y;
+  opihi_flt *x, *y;
   Vector *xvec, *yvec;
 
@@ -39,8 +37,8 @@
   }
   yvec[0].Nelements = xvec[0].Nelements;
-  REALLOCATE (yvec[0].elements, float, yvec[0].Nelements);
-  bzero (yvec[0].elements, sizeof(float)*yvec[0].Nelements);
-  x = xvec[0].elements;
-  y = yvec[0].elements;
+  REALLOCATE (yvec[0].elements.Flt, opihi_flt, yvec[0].Nelements);
+  bzero (yvec[0].elements.Flt, sizeof(opihi_flt)*yvec[0].Nelements);
+  x = xvec[0].elements.Flt;
+  y = yvec[0].elements.Flt;
 
   for (j = 0; j < xvec[0].Nelements; j++, x++, y++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 20839)
@@ -1,5 +1,3 @@
 # include "data.h"
-
-char *get_variable (char *);
 
 int applyfit2d (int argc, char **argv) {
@@ -8,5 +6,5 @@
   char *c, name[64];
   double **C, X, Y;
-  float *x, *y, *z;
+  opihi_flt *x, *y, *z;
   Vector *xvec, *yvec, *zvec;
 
@@ -46,9 +44,9 @@
 
   zvec[0].Nelements = xvec[0].Nelements;
-  REALLOCATE (zvec[0].elements, float, zvec[0].Nelements);
-  bzero (zvec[0].elements, sizeof(float)*zvec[0].Nelements);
-  x = xvec[0].elements;
-  y = yvec[0].elements;
-  z = zvec[0].elements;
+  REALLOCATE (zvec[0].elements.Flt, opihi_flt, zvec[0].Nelements);
+  bzero (zvec[0].elements.Flt, sizeof(opihi_flt)*zvec[0].Nelements);
+  x = xvec[0].elements.Flt;
+  y = yvec[0].elements.Flt;
+  z = zvec[0].elements.Flt;
 
   for (n = 0; n < xvec[0].Nelements; n++, x++, y++, z++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/concat.c	(revision 20839)
@@ -19,6 +19,6 @@
     Nin = ovec[0].Nelements;
     ovec[0].Nelements++;
-    REALLOCATE (ovec[0].elements, float, ovec[0].Nelements);
-    ovec[0].elements[Nin] = value;
+    REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
+    ovec[0].elements.Flt[Nin] = value;
     return (TRUE);
   } 
@@ -26,7 +26,7 @@
   if ((ivec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   
-  REALLOCATE (ovec[0].elements, float, ovec[0].Nelements + ivec[0].Nelements);
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements + ivec[0].Nelements);
   for (j = ovec[0].Nelements, i = 0; i < ivec[0].Nelements; i++, j++) {
-    ovec[0].elements[j] = ivec[0].elements[i];
+    ovec[0].elements.Flt[j] = ivec[0].elements.Flt[i];
   }
   ovec[0].Nelements += ivec[0].Nelements;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/contour.c	(revision 20839)
@@ -44,11 +44,10 @@
 int N, NVEC;
 
-void DUMP (float x, float y, float dx, float dy) {
-  
-  xv[0].elements[N]   = x;
-  xv[0].elements[N+1] = x+dx;
-  
-  yv[0].elements[N]   = y;
-  yv[0].elements[N+1] = y+dy;
+void DUMP (opihi_flt x, opihi_flt y, opihi_flt dx, opihi_flt dy) {
+  
+  xv[0].elements.Flt[N]   = x;
+  xv[0].elements.Flt[N+1] = x+dx;
+  yv[0].elements.Flt[N]   = y;
+  yv[0].elements.Flt[N+1] = y+dy;
   
   N+=2;
@@ -56,6 +55,6 @@
   if (N >= NVEC - 2) {
     NVEC += 100;
-    REALLOCATE (xv[0].elements, float, NVEC);
-    REALLOCATE (yv[0].elements, float, NVEC);
+    REALLOCATE (xv[0].elements.Flt, opihi_flt, NVEC);
+    REALLOCATE (yv[0].elements.Flt, opihi_flt, NVEC);
   }
 }
@@ -64,6 +63,6 @@
 
   int i, j, Nx, Ny;
+  opihi_flt x, y, dx, dy;
   float level, d00, d01, d10, d11, tmp;
-  float x, y, dx, dy;
   float *v00, *v01, *v10, *v11;
   float *matrix;
@@ -93,6 +92,6 @@
   N = 0;
   NVEC = 100;
-  REALLOCATE (xv[0].elements, float, NVEC);
-  REALLOCATE (yv[0].elements, float, NVEC);
+  REALLOCATE (xv[0].elements.Flt, opihi_flt, NVEC);
+  REALLOCATE (yv[0].elements.Flt, opihi_flt, NVEC);
 
   for (j = 1; j < Ny; j++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/create.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/create.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/create.c	(revision 20839)
@@ -28,8 +28,8 @@
 
   vec[0].Nelements = (end - start) / delta;
-  REALLOCATE (vec[0].elements, float, vec[0].Nelements);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, vec[0].Nelements);
 
   for (i = 0; i < vec[0].Nelements; i++) {
-    vec[0].elements[i] = start + i*delta;
+    vec[0].elements.Flt[i] = start + i*delta;
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cumulative.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i;
-  float *Vi, *Vo;
+  opihi_flt *Vi, *Vo;
   Vector *ivec, *ovec;
 
@@ -16,9 +16,9 @@
   ovec[0].Nelements = ivec[0].Nelements;
     
-  REALLOCATE (ovec[0].elements, float, ovec[0].Nelements);
-  bzero (ovec[0].elements, sizeof(float)*ovec[0].Nelements);
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
+  bzero (ovec[0].elements.Flt, sizeof(opihi_flt)*ovec[0].Nelements);
 
-  Vi = ivec[0].elements;
-  Vo = ovec[0].elements;
+  Vi = ivec[0].elements.Flt;
+  Vo = ovec[0].elements.Flt;
   *Vo = *Vi;
   for (i = 1; i < ivec[0].Nelements; i++, Vi++, Vo++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/cut.c	(revision 20839)
@@ -49,9 +49,9 @@
     /* create output vectors */
     xvec[0].Nelements = yvec[0].Nelements = nx;
-    REALLOCATE (xvec[0].elements, float, MAX (nx, 1));
-    REALLOCATE (yvec[0].elements, float, MAX (nx, 1));
-    bzero (yvec[0].elements, nx*sizeof(float));
+    REALLOCATE (xvec[0].elements.Flt, opihi_flt, MAX (nx, 1));
+    REALLOCATE (yvec[0].elements.Flt, opihi_flt, MAX (nx, 1));
+    bzero (yvec[0].elements.Flt, nx*sizeof(opihi_flt));
     for (i = 0; i < nx; i++) {
-      xvec[0].elements[i] = i + sx; 
+      xvec[0].elements.Flt[i] = i + sx; 
     }
     ALLOCATE (Vbuf, float, MAX (ny, 1));
@@ -74,5 +74,5 @@
 	if (Mode == MEAN) { value /= ny; }
       }
-      yvec[0].elements[i] = value;
+      yvec[0].elements.Flt[i] = value;
     }
     free (Vbuf);
@@ -82,9 +82,9 @@
   case 'Y':
     xvec[0].Nelements = yvec[0].Nelements = ny;
-    REALLOCATE (xvec[0].elements, float, ny);
-    REALLOCATE (yvec[0].elements, float, ny);
-    bzero (yvec[0].elements, ny*sizeof(float));
+    REALLOCATE (xvec[0].elements.Flt, opihi_flt, ny);
+    REALLOCATE (yvec[0].elements.Flt, opihi_flt, ny);
+    bzero (yvec[0].elements.Flt, ny*sizeof(opihi_flt));
     for (i = 0; i < ny; i++) {
-      xvec[0].elements[i] = i + sy; 
+      xvec[0].elements.Flt[i] = i + sy; 
     }
     ALLOCATE (Vbuf, float, MAX (nx, 1));
@@ -107,5 +107,5 @@
 	if (Mode == MEAN) { value /= nx; }
       }
-      yvec[0].elements[i] = value;
+      yvec[0].elements.Flt[i] = value;
     }
     free (Vbuf);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dbselect.c	(revision 20839)
@@ -67,5 +67,5 @@
       return (FALSE);
     }
-    REALLOCATE (vec[i][0].elements, float, Nrows);
+    REALLOCATE (vec[i][0].elements.Flt, opihi_flt, Nrows);
     vec[i][0].Nelements = Nrows;
   }
@@ -91,5 +91,5 @@
 	  case FIELD_TYPE_FLOAT:
 	  case FIELD_TYPE_DOUBLE:
-	    vec[i][0].elements[j] = atof (row[i]);
+	    vec[i][0].elements.Flt[j] = atof (row[i]);
 	    break;
 	  case FIELD_TYPE_TIME:
@@ -97,11 +97,11 @@
 	  case FIELD_TYPE_DATETIME:
 	    seconds = ohana_date_to_sec (row[i]);
-	    vec[i][0].elements[j] = ohana_sec_to_mjd (seconds);
+	    vec[i][0].elements.Flt[j] = ohana_sec_to_mjd (seconds);
 	    break;
 	  default:
-	    vec[i][0].elements[j] = NAN;
+	    vec[i][0].elements.Flt[j] = NAN;
 	}
       } else {
-	vec[i][0].elements[j] = NAN;
+	vec[i][0].elements.Flt[j] = NAN;
       }
     }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimendown.c	(revision 20839)
@@ -6,5 +6,6 @@
   
   int i, Nx, Ny, Npix, N, mode;
-  float *in, *out;
+  float *in;
+  opihi_flt *out;
   Vector *vec;
   Buffer *buf;
@@ -30,8 +31,8 @@
 
   vec[0].Nelements = Npix;
-  REALLOCATE (vec[0].elements, float, Npix);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npix);
 
   in = (float *) buf[0].matrix.buffer;
-  out = vec[0].elements;
+  out = vec[0].elements.Flt;
 
   switch (mode) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/dimenup.c	(revision 20839)
@@ -4,5 +4,6 @@
   
   int i, Nx, Ny, Npix;
-  float *in, *out;
+  opihi_flt *in;
+  float *out;
   Vector *vec;
   Buffer *buf;
@@ -29,5 +30,5 @@
 
   out = (float *) buf[0].matrix.buffer;
-  in = vec[0].elements;
+  in = vec[0].elements.Flt;
 
   for (i = 0; i < Npix; i++, in++, out++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fft1d.c	(revision 20839)
@@ -43,18 +43,18 @@
   Ore[0].Nelements = Npix;
   Oim[0].Nelements = Npix;
-  REALLOCATE (Ore[0].elements, float, Npix);
-  REALLOCATE (Oim[0].elements, float, Npix);
+  REALLOCATE (Ore[0].elements.Flt, opihi_flt, Npix);
+  REALLOCATE (Oim[0].elements.Flt, opihi_flt, Npix);
  
   // copy data to output vectors (fft is done in place)
-  memcpy (Ore[0].elements, Ire[0].elements, Npix*sizeof(float));
+  memcpy (Ore[0].elements.Flt, Ire[0].elements.Flt, Npix*sizeof(opihi_flt));
 
   // copy imaginary vector or create a zero vector
   if (ZeroImaginary) {
-    memset (Oim[0].elements, 0, Npix*sizeof(float));
+    memset (Oim[0].elements.Flt, 0, Npix*sizeof(opihi_flt));
   } else {
-    memcpy (Oim[0].elements, Iim[0].elements, Npix*sizeof(float));
+    memcpy (Oim[0].elements.Flt, Iim[0].elements.Flt, Npix*sizeof(opihi_flt));
   }    
 
-  fft1D (Ore[0].elements, Oim[0].elements, Npix, Nbit, forward); 
+  dfft1D (Ore[0].elements.Flt, Oim[0].elements.Flt, Npix, Nbit, forward); 
   
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit.c	(revision 20839)
@@ -8,5 +8,5 @@
   int N, Weight, Quiet, ClipNiter;
   Vector *xvec, *yvec, *dyvec;
-  float *x, *y, *dy, *yf, *yfit;
+  opihi_flt *x, *y, *dy, *yf, *yfit;
   char name[64], *mask;
 
@@ -63,5 +63,5 @@
   mterm = 2*nterm;
 
-  ALLOCATE (yfit, float, xvec[0].Nelements);
+  ALLOCATE (yfit, opihi_flt, xvec[0].Nelements);
   ALLOCATE (mask, char, xvec[0].Nelements);
   memset (mask, 0, xvec[0].Nelements);
@@ -88,7 +88,7 @@
 
     /* perform linear fit */
-    x = xvec[0].elements;
-    y = yvec[0].elements;
-    if (Weight) dy = dyvec[0].elements;
+    x = xvec[0].elements.Flt;
+    y = yvec[0].elements.Flt;
+    if (Weight) dy = dyvec[0].elements.Flt;
 
     for (i = 0; i < xvec[0].Nelements; i++, x++, y++) {
@@ -121,5 +121,5 @@
 
     /* generate fitted values */
-    x = xvec[0].elements;
+    x = xvec[0].elements.Flt;
     yf = yfit;
     for (i = 0; i < xvec[0].Nelements; i++, x++, yf++) {
@@ -134,6 +134,6 @@
 
     /* measure fit residual scatter */
-    x  = xvec[0].elements;
-    y  = yvec[0].elements;
+    x  = xvec[0].elements.Flt;
+    y  = yvec[0].elements.Flt;
     yf = yfit;
     dY = dY2 = 0;
@@ -150,6 +150,6 @@
 
     /* mask outlier points */
-    x  = xvec[0].elements;
-    y  = yvec[0].elements;
+    x  = xvec[0].elements.Flt;
+    y  = yvec[0].elements.Flt;
     yf = yfit;
     Nmask = 0;
@@ -193,12 +193,12 @@
     if ((fvec = SelectVector ("yfit", ANYVECTOR, TRUE)) == NULL) return (FALSE);    
     if ((mvec = SelectVector ("mask", ANYVECTOR, TRUE)) == NULL) return (FALSE);    
-    free (fvec[0].elements);
-    fvec[0].elements = yfit;
+    free (fvec[0].elements.Flt);
+    fvec[0].elements.Flt = yfit;
     fvec[0].Nelements = xvec[0].Nelements;
     mvec[0].Nelements = xvec[0].Nelements;
 
-    REALLOCATE (mvec[0].elements, float, xvec[0].Nelements);
+    REALLOCATE (mvec[0].elements.Flt, opihi_flt, xvec[0].Nelements);
     for (i = 0; i < xvec[0].Nelements; i++) {
-      mvec[0].elements[i] = mask[i];
+      mvec[0].elements.Flt[i] = mask[i];
     }
   } else {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/fit2d.c	(revision 20839)
@@ -7,5 +7,5 @@
   int k, K, i, j, n, Npt, Nmask, nx, ny, nterm, mterm, wterm, order;
   int N, Weight, Quiet, ClipNiter, VERBOSE;
-  float *x, *y, *z, *dz, *zfit, *zf; 
+  opihi_flt *x, *y, *z, *dz, *zfit, *zf; 
   char name[64], *mask;
   Vector *xvec, *yvec, *zvec, *dzvec;
@@ -74,5 +74,5 @@
   mterm = 2*order + 1;
 
-  ALLOCATE (zfit, float, xvec[0].Nelements);
+  ALLOCATE (zfit, opihi_flt, xvec[0].Nelements);
   ALLOCATE (mask, char, xvec[0].Nelements);
   memset (mask, 0, xvec[0].Nelements);
@@ -102,8 +102,8 @@
     }
 
-    x = xvec[0].elements;
-    y = yvec[0].elements;
-    z = zvec[0].elements;
-    if (Weight) dz = dzvec[0].elements;
+    x = xvec[0].elements.Flt;
+    y = yvec[0].elements.Flt;
+    z = zvec[0].elements.Flt;
+    if (Weight) dz = dzvec[0].elements.Flt;
 
     /* add up the x,y values */
@@ -128,7 +128,7 @@
 
     /* add up the z values */
-    x = xvec[0].elements;
-    y = yvec[0].elements;
-    z = zvec[0].elements;
+    x = xvec[0].elements.Flt;
+    y = yvec[0].elements.Flt;
+    z = zvec[0].elements.Flt;
     for (i = 0; i < xvec[0].Nelements; i++, x++, y++, z++) {
       if (mask[i]) continue;
@@ -179,6 +179,6 @@
     */
     /* generate fitted values */
-    x = xvec[0].elements;
-    y = yvec[0].elements;
+    x = xvec[0].elements.Flt;
+    y = yvec[0].elements.Flt;
     zf = zfit;
     for (n = 0; n < xvec[0].Nelements; n++, x++, y++, zf++) {
@@ -197,7 +197,7 @@
 
     /* measure fit residual scatter */
-    x  = xvec[0].elements;
-    y  = yvec[0].elements;
-    z  = zvec[0].elements;
+    x  = xvec[0].elements.Flt;
+    y  = yvec[0].elements.Flt;
+    z  = zvec[0].elements.Flt;
     zf = zfit;
     dZ = dZ2 = 0;
@@ -216,7 +216,7 @@
 
     /* mask outlier points */
-    x  = xvec[0].elements;
-    y  = yvec[0].elements;
-    z  = zvec[0].elements;
+    x  = xvec[0].elements.Flt;
+    y  = yvec[0].elements.Flt;
+    z  = zvec[0].elements.Flt;
     zf = zfit;
     Nmask = 0;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 20839)
@@ -16,9 +16,9 @@
 
   vec[0].Nelements = Npts;
-  REALLOCATE (vec[0].elements, float, Npts);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npts);
 
   gauss_init (2048);
   for (i = 0; i < Npts; i++) {
-    vec[0].elements[i] = rnd_gauss (mean, sigma);
+    vec[0].elements.Flt[i] = rnd_gauss (mean, sigma);
   }
   return (TRUE);
@@ -47,9 +47,9 @@
 
   vec[0].Nelements = Npts;
-  REALLOCATE (vec[0].elements, float, Npts);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, Npts);
 
   gauss_init (Npts);
   for (i = 0; i < Npts; i++) {
-    vec[0].elements[i] = int_gauss (i);
+    vec[0].elements.Flt[i] = int_gauss (i);
   }
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gaussj.c	(revision 20839)
@@ -2,6 +2,7 @@
 
 int gaussjordan (int argc, char **argv) {
-  
-  float *m, *v;
+
+  float *m;
+  opihi_flt *v;
   double **a, **b;
   int i, j, N, status, QUIET;
@@ -32,5 +33,5 @@
 
   m = (float *) A[0].matrix.buffer;
-  v = B[0].elements;
+  v = B[0].elements.Flt;
   for (i = 0; i < N; i++) {
     for (j = 0; j < N; j++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/grid.c	(revision 20839)
@@ -25,6 +25,6 @@
   Xvec.Nelements = 200;
   Yvec.Nelements = 200;
-  ALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  ALLOCATE (Yvec.elements, float, Yvec.Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
 
   major = minor = 1;
@@ -64,21 +64,21 @@
       if (MajorTick) {
 	/* major tick */
-	Xvec.elements[N] = next;
-	Yvec.elements[N] = graphmode.ymin;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
-	}
-	Xvec.elements[N] = next;
-	Yvec.elements[N] = graphmode.ymax;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
+	Xvec.elements.Flt[N] = next;
+	Yvec.elements.Flt[N] = graphmode.ymin;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+	}
+	Xvec.elements.Flt[N] = next;
+	Yvec.elements.Flt[N] = graphmode.ymax;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
 	}
       }
@@ -86,21 +86,21 @@
       if (MinorTick) {
 	/* minor tick */
-	Xvec.elements[N] = next;
-	Yvec.elements[N] = graphmode.ymin;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
-	}
-	Xvec.elements[N] = next;
-	Yvec.elements[N] = graphmode.ymax;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
+	Xvec.elements.Flt[N] = next;
+	Yvec.elements.Flt[N] = graphmode.ymin;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+	}
+	Xvec.elements.Flt[N] = next;
+	Yvec.elements.Flt[N] = graphmode.ymax;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
 	}
       }
@@ -144,21 +144,21 @@
       if (MajorTick) {
 	/* major tick */
-	Xvec.elements[N] = graphmode.xmin;
-	Yvec.elements[N] = next;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
-	}
-	Xvec.elements[N] = graphmode.xmax;
-	Yvec.elements[N] = next;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
+	Xvec.elements.Flt[N] = graphmode.xmin;
+	Yvec.elements.Flt[N] = next;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+	}
+	Xvec.elements.Flt[N] = graphmode.xmax;
+	Yvec.elements.Flt[N] = next;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
 	}
       }
@@ -166,21 +166,21 @@
       if (MinorTick) {
 	/* minor tick */
-	Xvec.elements[N] = graphmode.xmin;
-	Yvec.elements[N] = next;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
-	}
-	Xvec.elements[N] = graphmode.xmax;
-	Yvec.elements[N] = next;
-	N++;
-	if (N == Xvec.Nelements) {
-	  Xvec.Nelements += 200;
-	  Yvec.Nelements += 200;
-	  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-	  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
+	Xvec.elements.Flt[N] = graphmode.xmin;
+	Yvec.elements.Flt[N] = next;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+	}
+	Xvec.elements.Flt[N] = graphmode.xmax;
+	Yvec.elements.Flt[N] = next;
+	N++;
+	if (N == Xvec.Nelements) {
+	  Xvec.Nelements += 200;
+	  Yvec.Nelements += 200;
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
 	}
       }
@@ -193,8 +193,8 @@
   graphmode.ptype = 100; /* connect a pair */
   graphmode.etype = 0;
-  PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
-
-  free (Xvec.elements);
-  free (Yvec.elements);
+  PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
+
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/gridify.c	(revision 20839)
@@ -5,8 +5,9 @@
   int i, Nx, Ny, Xb, Yb, Normalize, N;
   float Xmin, Xmax, dX, Ymin, Ymax, dY;
-  float *buf, *val, *x, *y, *z;
+  float *buf, *val;
   int *Nval;
   Buffer *bf;
   Vector *vx, *vy, *vz;
+  opihi_flt *x, *y, *z;
 
   Normalize = TRUE;
@@ -50,7 +51,7 @@
   bzero (Nval, Nx*Ny*sizeof(int));
 
-  x = vx[0].elements;
-  y = vy[0].elements;
-  z = vz[0].elements;
+  x = vx[0].elements.Flt;
+  y = vy[0].elements.Flt;
+  z = vz[0].elements.Flt;
   for (i = 0; i < vx[0].Nelements; i++, x++, y++, z++) {
     Xb = (*x - Xmin) / dX;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/histogram.c	(revision 20839)
@@ -4,5 +4,6 @@
   
   int i, bin, Nbins;
-  float *V, start, end, delta;
+  opihi_flt start, end, delta;
+  opihi_flt *V;
   Vector *xvec, *yvec;
 
@@ -32,15 +33,15 @@
   yvec[0].Nelements = Nbins;
     
-  REALLOCATE (yvec[0].elements, float, yvec[0].Nelements);
-  bzero (yvec[0].elements, sizeof(float)*yvec[0].Nelements);
+  REALLOCATE (yvec[0].elements.Flt, opihi_flt, yvec[0].Nelements);
+  bzero (yvec[0].elements.Flt, sizeof(opihi_flt)*yvec[0].Nelements);
   if (Nbins < 1) {
       return (TRUE);
   }
 
-  V = xvec[0].elements;
+  V = xvec[0].elements.Flt;
   for (i = 0; i < xvec[0].Nelements; i++, V++) {
     if (isnan(*V)) continue;
     bin = MIN (MAX (0, (*V - start) / delta), Nbins - 1);
-    yvec[0].elements[bin] += 1.0;
+    yvec[0].elements.Flt[bin] += 1.0;
   }      
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imcut.c	(revision 20839)
@@ -37,6 +37,6 @@
   dY = dY / L;
 
-  REALLOCATE (xvec[0].elements, float, MAX (L, 1));
-  REALLOCATE (yvec[0].elements, float, MAX (L, 1));
+  REALLOCATE (xvec[0].elements.Flt, opihi_flt, MAX (L, 1));
+  REALLOCATE (yvec[0].elements.Flt, opihi_flt, MAX (L, 1));
   xvec[0].Nelements = L;
   yvec[0].Nelements = L;
@@ -46,6 +46,6 @@
     xi = xs + i*dX - 0.5;
     yi = ys + i*dY - 0.5;
-    xvec[0].elements[i] = i;
-    yvec[0].elements[i] = V[xi + Nx*yi];
+    xvec[0].elements.Flt[i] = i;
+    yvec[0].elements.Flt[i] = V[xi + Nx*yi];
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/imhist.c	(revision 20839)
@@ -107,8 +107,8 @@
   vec1[0].Nelements = Nbins + 1;
   vec2[0].Nelements = Nbins + 1;
-  REALLOCATE (vec1[0].elements, float, vec1[0].Nelements);
-  bzero (vec1[0].elements, vec1[0].Nelements*sizeof(float));
-  REALLOCATE (vec2[0].elements, float, vec2[0].Nelements);
-  bzero (vec2[0].elements, vec2[0].Nelements*sizeof(float));
+  REALLOCATE (vec1[0].elements.Flt, opihi_flt, vec1[0].Nelements);
+  bzero (vec1[0].elements.Flt, vec1[0].Nelements*sizeof(opihi_flt));
+  REALLOCATE (vec2[0].elements.Flt, opihi_flt, vec2[0].Nelements);
+  bzero (vec2[0].elements.Flt, vec2[0].Nelements*sizeof(opihi_flt));
   
   for (j = sy; j < sy + ny; j++) {
@@ -116,9 +116,9 @@
     for (i = 0; i < nx; i++, V++) {
       bin = MAX (MIN (Nbins, (*V - min) / dx), 0);
-      vec2[0].elements[bin] += 1.0;
+      vec2[0].elements.Flt[bin] += 1.0;
     }
   }
   for (i = 0; i < Nbins + 1; i++, V++) {
-    vec1[0].elements[i] = i*dx + min;
+    vec1[0].elements.Flt[i] = i*dx + min;
   }
   
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/integrate.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, N, VERBOSE;
-  float *X, *Y;
+  opihi_flt *X, *Y;
   double start, end, value, range;
   Vector *vecx, *vecy;
@@ -25,6 +25,6 @@
   end   = atof (argv[4]);
 
-  X = vecx[0].elements;
-  Y = vecy[0].elements;
+  X = vecx[0].elements.Flt;
+  Y = vecy[0].elements.Flt;
 
   value = 0;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/interpolate.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/interpolate.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/interpolate.c	(revision 20839)
@@ -22,27 +22,27 @@
 
   yout[0].Nelements = xout[0].Nelements;
-  REALLOCATE (yout[0].elements, float, yout[0].Nelements);
+  REALLOCATE (yout[0].elements.Flt, opihi_flt, yout[0].Nelements);
 
-  dx = xin[0].elements[1] - xin[0].elements[0];
-  dy = yin[0].elements[1] - yin[0].elements[0];
-  x0 = xin[0].elements[0];
-  y0 = yin[0].elements[0];
+  dx = xin[0].elements.Flt[1] - xin[0].elements.Flt[0];
+  dy = yin[0].elements.Flt[1] - yin[0].elements.Flt[0];
+  x0 = xin[0].elements.Flt[0];
+  y0 = yin[0].elements.Flt[0];
   
   /* in vectors are sorted, out vectors are not */
   for (j = 0; j < xin[0].Nelements - 1; j++) {
-    dx = xin[0].elements[j+1] - xin[0].elements[j];
-    dy = yin[0].elements[j+1] - yin[0].elements[j];
-    x0 = xin[0].elements[j];
-    y0 = yin[0].elements[j];
-    x1 = xin[0].elements[j+1];
+    dx = xin[0].elements.Flt[j+1] - xin[0].elements.Flt[j];
+    dy = yin[0].elements.Flt[j+1] - yin[0].elements.Flt[j];
+    x0 = xin[0].elements.Flt[j];
+    y0 = yin[0].elements.Flt[j];
+    x1 = xin[0].elements.Flt[j+1];
     for (i = 0; i < xout[0].Nelements; i++) {
-      if ((xout[0].elements[i] >= x0) && (xout[0].elements[i] < x1)) {
-	yout[0].elements[i] = (dy/dx)*(xout[0].elements[i] - x0) + y0;
+      if ((xout[0].elements.Flt[i] >= x0) && (xout[0].elements.Flt[i] < x1)) {
+	yout[0].elements.Flt[i] = (dy/dx)*(xout[0].elements.Flt[i] - x0) + y0;
       }
-      if ((j == 0) && (xout[0].elements[i] < x0)) {
-	yout[0].elements[i] = (dy/dx)*(xout[0].elements[i] - x0) + y0;
+      if ((j == 0) && (xout[0].elements.Flt[i] < x0)) {
+	yout[0].elements.Flt[i] = (dy/dx)*(xout[0].elements.Flt[i] - x0) + y0;
       }
-      if ((j == xin[0].Nelements - 2) && (xout[0].elements[i] >= x1)) {
-	yout[0].elements[i] = (dy/dx)*(xout[0].elements[i] - x0) + y0;
+      if ((j == xin[0].Nelements - 2) && (xout[0].elements.Flt[i] >= x1)) {
+	yout[0].elements.Flt[i] = (dy/dx)*(xout[0].elements.Flt[i] - x0) + y0;
       }
     }    
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/lookup.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/lookup.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/lookup.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, j;
-  float *ip, *op, *xp, *yp;
+  opihi_flt *ip, *op, *xp, *yp;
   Vector *in, *out, *xv, *yv;
 
@@ -23,13 +23,13 @@
 
   out[0].Nelements = in[0].Nelements;
-  REALLOCATE (out[0].elements, float, out[0].Nelements);
+  REALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
 
-  ip = in[0].elements;
-  op = out[0].elements;
+  ip = in[0].elements.Flt;
+  op = out[0].elements.Flt;
 
   for (i = 0; i < in[0].Nelements; i++, ip++, op++) {
     // re-write this using bisection
-    xp = xv[0].elements;
-    yp = yv[0].elements;
+    xp = xv[0].elements.Flt;
+    yp = yv[0].elements.Flt;
 
     for (j = 0; (*ip < *xp) && (j < yv[0].Nelements); j++);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/medacc.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/medacc.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/medacc.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, j, Nbins, Nvalues, N, N0, N1;
   double start, end, delta, k0, k1, fn;
-  float *V, *K, *V1, *K1, *O, *tmpvec, *tmpkey;
+  opihi_flt *V, *K, *V1, *K1, *O, *tmpvec, *tmpkey;
   Vector *val, *key, *out;
 
@@ -35,13 +35,13 @@
 
   out[0].Nelements = Nbins;
-  REALLOCATE (out[0].elements, float, out[0].Nelements);
-  bzero (out[0].elements, sizeof(float)*out[0].Nelements);
+  REALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
+  bzero (out[0].elements.Flt, sizeof(opihi_flt)*out[0].Nelements);
 
   /* copy vec and key to temp vectors */
-  ALLOCATE (tmpvec, float, val[0].Nelements);
-  ALLOCATE (tmpkey, float, val[0].Nelements);
+  ALLOCATE (tmpvec, opihi_flt, val[0].Nelements);
+  ALLOCATE (tmpkey, opihi_flt, val[0].Nelements);
 
-  V = val[0].elements;
-  K = key[0].elements;
+  V = val[0].elements.Flt;
+  K = key[0].elements.Flt;
   V1 = tmpvec;
   K1 = tmpkey;
@@ -53,7 +53,7 @@
 
   /* sort vec and key by key */
-  fsortpair (tmpkey, tmpvec, Nvalues);
+  dsortpair (tmpkey, tmpvec, Nvalues);
 
-  O = out[0].elements;
+  O = out[0].elements.Flt;
   /* find the start and end key for each range */
   N0 = 0;
@@ -67,5 +67,5 @@
     N1 = j;
     N = N1 - N0;
-    fsort (&tmpvec[N0], N);
+    dsort (&tmpvec[N0], N);
     fn = O[i] = 0;
     for (j = N0 + 0.25*N; j < N0 + 0.75*N; j++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mget.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mget.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mget.c	(revision 20839)
@@ -4,5 +4,6 @@
   
   int i, Nx, Ny, Npix, xdir, Nset;
-  float *in, *out;
+  float *in;
+  opihi_flt *out;
   Buffer *buf;
   Vector *vec;
@@ -33,5 +34,5 @@
   if (xdir) {
     vec[0].Nelements = Npix = Nx;
-    REALLOCATE (vec[0].elements, float, Npix);
+    REALLOCATE (vec[0].elements.Flt, opihi_flt, Npix);
     if (Nset >= Ny) {
       gprint (GP_ERR, "row out of range\n");
@@ -39,12 +40,11 @@
     }
     in  = (float *) buf[0].matrix.buffer + Nx*Nset;
-    out = vec[0].elements;
+    out = vec[0].elements.Flt;
     for (i = 0; i < Npix; i++, in++, out++) {
       *out = *in;
     }
-    return (TRUE);
   } else {
     vec[0].Nelements = Npix = Ny;
-    REALLOCATE (vec[0].elements, float, Npix);
+    REALLOCATE (vec[0].elements.Flt, opihi_flt, Npix);
     if (Nset >= Nx) {
       gprint (GP_ERR, "column out of range\n");
@@ -52,10 +52,9 @@
     }
     in  = (float *) buf[0].matrix.buffer + Nset;
-    out = vec[0].elements;
+    out = vec[0].elements.Flt;
     for (i = 0; i < Npix; i++, in+=Nx, out++) {
       *out = *in;
     }
-    return (TRUE);
-  }    
+  }
+  return (TRUE);
 }
-
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mset.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mset.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/mset.c	(revision 20839)
@@ -4,5 +4,6 @@
   
   int i, Nx, Ny, Npix, xdir, Nset;
-  float *in, *out;
+  opihi_flt *in;
+  float *out;
   Buffer *buf;
   Vector *vec;
@@ -42,5 +43,5 @@
     }
     out = (float *) buf[0].matrix.buffer + Nx*Nset;
-    in = vec[0].elements;
+    in = vec[0].elements.Flt;
     for (i = 0; i < Npix; i++, in++, out++) {
       *out = *in;
@@ -57,5 +58,5 @@
     }
     out = (float *) buf[0].matrix.buffer + Nset;
-    in = vec[0].elements;
+    in = vec[0].elements.Flt;
     for (i = 0; i < Npix; i++, in++, out+=Nx) {
       *out = *in;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/peak.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/peak.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/peak.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, N, imax, QUIET;
   double start, end, xmax, ymax;
-  float *X, *Y;
+  opihi_flt *X, *Y;
   Vector *vecx, *vecy;
 
@@ -26,10 +26,10 @@
     end   = atof (argv[4]);
   } else {
-    start = vecx[0].elements[0];
-    end   = vecx[0].elements[vecx[0].Nelements - 1];
+    start = vecx[0].elements.Flt[0];
+    end   = vecx[0].elements.Flt[vecx[0].Nelements - 1];
   }
 
-  X = vecx[0].elements;
-  Y = vecy[0].elements;
+  X = vecx[0].elements.Flt;
+  Y = vecy[0].elements.Flt;
 
   imax = -1;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/periodogram.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/periodogram.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/periodogram.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, N, Npt, Np, NP, VERBOSE;
-  float *tv, *fv;
+  opihi_flt *tv, *fv;
   float minP, maxP, minT, maxT, dTime;
   float mean, var, w, tau, P, Pc, Ps, Po;
@@ -29,8 +29,8 @@
 
   /* find the max baseline, mean, and variance */
-  minT = maxT = time[0].elements[0];
+  minT = maxT = time[0].elements.Flt[0];
   Npt = time[0].Nelements;
-  tv = time[0].elements;
-  fv = flux[0].elements;
+  tv = time[0].elements.Flt;
+  fv = flux[0].elements.Flt;
   mean = var = 0;
   for (i = 0; i < Npt; i++, tv++, fv++) {
@@ -40,5 +40,5 @@
   }
   mean = mean / Npt;
-  fv = flux[0].elements;
+  fv = flux[0].elements.Flt;
   for (i = 0; i < Npt; i++, fv++) {
     var += SQ(*fv - mean);
@@ -56,6 +56,6 @@
   Np = 0;
   NP = 100;
-  REALLOCATE (power[0].elements, float, NP);
-  REALLOCATE (period[0].elements, float, NP);
+  REALLOCATE (power[0].elements.Flt, opihi_flt, NP);
+  REALLOCATE (period[0].elements.Flt, opihi_flt, NP);
 
   P = minP;
@@ -64,5 +64,5 @@
     
     /* find the period offset tau  */
-    tv = time[0].elements;
+    tv = time[0].elements.Flt;
     cs = sn = 0;
     for (i = 0; i < Npt; i++, tv++) {
@@ -73,6 +73,6 @@
       
     /* find the power at this period */
-    tv = time[0].elements;
-    fv = flux[0].elements;
+    tv = time[0].elements.Flt;
+    fv = flux[0].elements.Flt;
     cs = sn = cs2 = sn2 = 0;
     for (i = 0; i < Npt; i++, tv++, fv++) {
@@ -90,11 +90,11 @@
     Po = (Pc + Ps) / (2*var);
 
-    power[0].elements[Np] = Po;
-    period[0].elements[Np] = P;
+    power[0].elements.Flt[Np] = Po;
+    period[0].elements.Flt[Np] = P;
     Np ++;
     if (Np >= NP) {
       NP += 100;
-      REALLOCATE (power[0].elements, float, NP);
-      REALLOCATE (period[0].elements, float, NP);
+      REALLOCATE (power[0].elements.Flt, opihi_flt, NP);
+      REALLOCATE (period[0].elements.Flt, opihi_flt, NP);
     }
 
@@ -108,6 +108,6 @@
   power[0].Nelements = Np;
   period[0].Nelements = Np;
-  REALLOCATE (power[0].elements, float, Np);
-  REALLOCATE (period[0].elements, float, Np);
+  REALLOCATE (power[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (period[0].elements.Flt, opihi_flt, Np);
  
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/plot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/plot.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/plot.c	(revision 20839)
@@ -58,13 +58,13 @@
   if (!KapaPrepPlot (kapa, Npts, &graphmode)) return (FALSE);
   
-  KapaPlotVector (kapa, Npts, xvec[0].elements, "x");
-  KapaPlotVector (kapa, Npts, yvec[0].elements, "y");
+  PlotVectorSingle (kapa, Npts, xvec[0].elements.Flt, "x");
+  PlotVectorSingle (kapa, Npts, yvec[0].elements.Flt, "y");
   if (graphmode.etype & 0x01) {
-    KapaPlotVector (kapa, Npts, dymvec[0].elements, "dym");
-    KapaPlotVector (kapa, Npts, dypvec[0].elements, "dyp");
+    PlotVectorSingle (kapa, Npts, dymvec[0].elements.Flt, "dym");
+    PlotVectorSingle (kapa, Npts, dypvec[0].elements.Flt, "dyp");
   }
   if (graphmode.etype & 0x02) {
-    KapaPlotVector (kapa, Npts, dxmvec[0].elements, "dxm");
-    KapaPlotVector (kapa, Npts, dxpvec[0].elements, "dxp");
+    PlotVectorSingle (kapa, Npts, dxmvec[0].elements.Flt, "dxm");
+    PlotVectorSingle (kapa, Npts, dxpvec[0].elements.Flt, "dxp");
   }
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/read_vectors.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 20839)
@@ -84,5 +84,5 @@
   NELEM = 1000;
   for (i = 0; i < Nvec; i++) {
-    REALLOCATE (vec[i][0].elements, float, NELEM);
+    REALLOCATE (vec[i][0].elements.Flt, opihi_flt, NELEM);
   }
   
@@ -121,6 +121,6 @@
 	for (i = 0; (i < Nvec) && status; i++) {
 	  status = dparse (&value, col[i], c0);
-	  vec[i][0].elements[N] = value;
-	  if (!status) vec[i][0].elements[N] = 0.0/0.0;
+	  vec[i][0].elements.Flt[N] = value;
+	  if (!status) vec[i][0].elements.Flt[N] = 0.0/0.0;
 	}
 	if (status) N++;
@@ -130,5 +130,5 @@
 	NELEM += 1000;
 	for (i = 0; i < Nvec; i++) {
-	  REALLOCATE (vec[i][0].elements, float, NELEM);
+	  REALLOCATE (vec[i][0].elements.Flt, opihi_flt, NELEM);
 	}
       }
@@ -137,5 +137,5 @@
   }
   for (i = 0; i < Nvec; i++) {
-    REALLOCATE (vec[i][0].elements, float, MAX (N,1));
+    REALLOCATE (vec[i][0].elements.Flt, opihi_flt, MAX (N,1));
     vec[i][0].Nelements = N;
   }
@@ -268,5 +268,5 @@
 	sprintf (name, "%s:%d", argv[i], j);
       if ((vec[j] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) ESCAPE ("bad vector name");
-      REALLOCATE (vec[j][0].elements, float, MAX (Ny,1));
+      REALLOCATE (vec[j][0].elements.Flt, opihi_flt, MAX (Ny,1));
       vec[j][0].Nelements = Ny;
     }
@@ -276,5 +276,5 @@
       for (j = 0; j < Ny; j++) {
 	for (k = 0; k < Nval; k++, Pd++) {
-	  vec[k][0].elements[j] = *Pd;
+	  vec[k][0].elements.Flt[j] = *Pd;
 	}
       }
@@ -284,5 +284,5 @@
       for (j = 0; j < Ny; j++) {
 	for (k = 0; k < Nval; k++, Pf++) {
-	  vec[k][0].elements[j] = *Pf;
+	  vec[k][0].elements.Flt[j] = *Pf;
 	}
       }
@@ -292,5 +292,5 @@
       for (j = 0; j < Ny; j++) {
 	for (k = 0; k < Nval; k++, Pi++) {
-	  vec[k][0].elements[j] = *Pi;
+	  vec[k][0].elements.Flt[j] = *Pi;
 	}
       }
@@ -300,5 +300,5 @@
       for (j = 0; j < Ny; j++) {
 	for (k = 0; k < Nval; k++, Ps++) {
-	  vec[k][0].elements[j] = *Ps;
+	  vec[k][0].elements.Flt[j] = *Ps;
 	}
       }
@@ -308,5 +308,5 @@
       for (j = 0; j < Ny; j++) {
 	for (k = 0; k < Nval; k++, Pc++) {
-	  vec[k][0].elements[j] = *Pc;
+	  vec[k][0].elements.Flt[j] = *Pc;
 	}
       }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/select.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/select.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/select.c	(revision 20839)
@@ -27,10 +27,10 @@
   /* check size of in1, in2, tvec: must match */
 
-  REALLOCATE (ovec[0].elements, float, MAX (tvec[0].Nelements, 1));
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, MAX (tvec[0].Nelements, 1));
   for (i = 0; i < tvec[0].Nelements; i++) {
-    ovec[0].elements[i] = tvec[0].elements[i] ? in1[0].elements[i] : in2[0].elements[i];
+    ovec[0].elements.Flt[i] = tvec[0].elements.Flt[i] ? in1[0].elements.Flt[i] : in2[0].elements.Flt[i];
   }
   ovec[0].Nelements = tvec[0].Nelements;
-  REALLOCATE (ovec[0].elements, float, MAX (ovec[0].Nelements, 1));
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, MAX (ovec[0].Nelements, 1));
   
   DeleteVector (tvec);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/sort.c	(revision 20839)
@@ -1,8 +1,24 @@
 # include "data.h"
+
+void sortindex (double *X, int *IDX, int N) {
+
+# define SWAPFUNC(A,B){ double tmp; int itmp; 	\
+  tmp = X[A]; X[A] = X[B]; X[B] = tmp; \
+  itmp = IDX[A]; IDX[A] = IDX[B]; IDX[B] = itmp; \
+}
+# define COMPARE(A,B)(X[A] < X[B])
+
+  OHANA_SORT (N, COMPARE, SWAPFUNC);
+
+# undef SWAPFUNC
+# undef COMPARE
+
+}
 
 int sort_vectors (int argc, char **argv) {
   
   int i, j, Nvec, Nval;
-  float *temp, *index, *T, *V, *I;
+  opihi_flt *temp, *T, *V;
+  int *index, *I;
   Vector **vec;
 
@@ -36,20 +52,20 @@
   
   /* create index (use float to use sortpair) */
-  ALLOCATE (index, float, Nval);
+  ALLOCATE (index, int, Nval);
   for (i = 0; i < Nval; i++) index[i] = i;
 
   /* sort key & index */
-  fsortpair (vec[0][0].elements, index, Nval);
+  sortindex (vec[0][0].elements.Flt, index, Nval);
 
-  ALLOCATE (temp, float, Nval);
+  ALLOCATE (temp, opihi_flt, Nval);
   for (i = 1; i < Nvec; i++) {
     T = temp;
-    V = vec[i][0].elements;
+    V = vec[i][0].elements.Flt;
     I = index;
     for (j = 0; j < Nval; j++, T++, I++) {
-      *T = V[(int)(*I)];
+      *T = V[*I];
     }
-    /* swap .elements (== V) and temp */ 
-    vec[i][0].elements = temp;
+    /* swap .elements.Flt (== V) and temp */ 
+    vec[i][0].elements.Flt = temp;
     temp = V;
   }
@@ -61,4 +77,2 @@
 
 }
-
-
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/subset.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/subset.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/subset.c	(revision 20839)
@@ -28,13 +28,13 @@
   /* check size of ivec, tvec: must match */
 
-  REALLOCATE (ovec[0].elements, float, MAX (tvec[0].Nelements, 1));
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, MAX (tvec[0].Nelements, 1));
   for (j = i = 0; i < tvec[0].Nelements; i++) {
-    if (tvec[0].elements[i]) {
-      ovec[0].elements[j] = ivec[0].elements[i];
+    if (tvec[0].elements.Flt[i]) {
+      ovec[0].elements.Flt[j] = ivec[0].elements.Flt[i];
       j++;
     }
   }
   ovec[0].Nelements = j;
-  REALLOCATE (ovec[0].elements, float, MAX (ovec[0].Nelements, 1));
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, MAX (ovec[0].Nelements, 1));
 
   DeleteVector (tvec);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/svd.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/svd.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/svd.c	(revision 20839)
@@ -4,7 +4,8 @@
   
   int i, Nx, Ny, status;
-  float *in, *out, *A, *U, *W, *V;
+  float *in, *out, *A, *U, *V;
+  Buffer *Ma, *Mu, *Mv;
   Vector *Vw;
-  Buffer *Ma, *Mu, *Mv;
+  opihi_flt *W;
 
   if (argc != 6) goto usage;
@@ -43,11 +44,11 @@
   /* w is Nx */
   Vw[0].Nelements = Nx;
-  REALLOCATE (Vw[0].elements, float, Nx);
+  REALLOCATE (Vw[0].elements.Flt, opihi_flt, Nx);
 
   /* pointers to the various arrays */
   A = (float *) Ma[0].matrix.buffer;
   U = (float *) Mu[0].matrix.buffer;
-  W = (float *) Vw[0].elements;
   V = (float *) Mv[0].matrix.buffer;
+  W = Vw[0].elements.Flt;
 
   /* copy A to U (svdcmp replaces A with U) */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/test/histogram.sh
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/test/histogram.sh	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/test/histogram.sh	(revision 20839)
@@ -12,5 +12,6 @@
  local i
 
- create x 0 10 0.1
+ # set data values at the i*0.1 + 0.05 values so round-off does not causs miscounts
+ create x 0.05 10.05 0.1
 
  for i 45 55
@@ -18,4 +19,5 @@
  end
 
+ # histogram bins are 0-0.1, 0.1-0.2, etc
  histogram x xhis 0 10 0.1
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/ungridify.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/ungridify.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/ungridify.c	(revision 20839)
@@ -6,7 +6,8 @@
   int Nx, Ny, NX, NY;
   int Xmin, Xmax, Ymin, Ymax;
-  float *v, *x, *y, *z;
   Buffer *bf;
+  float *v;
   Vector *vx, *vy, *vz;
+  opihi_flt *x, *y, *z;
 
   if (argc != 9) {
@@ -29,22 +30,22 @@
   if ((vy = SelectVector (argv[7], ANYVECTOR, TRUE)) == NULL) return (FALSE);
   if ((vz = SelectVector (argv[8], ANYVECTOR, TRUE)) == NULL) return (FALSE);
-  REALLOCATE (vx[0].elements, float, Nx*Ny);
-  REALLOCATE (vy[0].elements, float, Nx*Ny);
-  REALLOCATE (vz[0].elements, float, Nx*Ny);
+  REALLOCATE (vx[0].elements.Flt, opihi_flt, Nx*Ny);
+  REALLOCATE (vy[0].elements.Flt, opihi_flt, Nx*Ny);
+  REALLOCATE (vz[0].elements.Flt, opihi_flt, Nx*Ny);
 
-  x = vx[0].elements;
-  y = vy[0].elements;
-  z = vz[0].elements;
+  x = vx[0].elements.Flt;
+  y = vy[0].elements.Flt;
+  z = vz[0].elements.Flt;
   n = 0;
   v = (float *)bf[0].matrix.buffer;
   for (j = Ymin; j < Ymax; j++) {
     for (i = Xmin; i < Xmax; i++, x++, y++, z++, n++) {
-      vx[0].elements[n] = i;
-      vy[0].elements[n] = j;
+      vx[0].elements.Flt[n] = i;
+      vy[0].elements.Flt[n] = j;
       if (i < 0) continue;
       if (i >= NX) continue;
       if (j < 0) continue;
       if (j >= NY) continue;
-      vz[0].elements[n] = v[i+j*NX];
+      vz[0].elements.Flt[n] = v[i+j*NX];
     }
   }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/uniq.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/uniq.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/uniq.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int Nnew, i, j, found;
-  float *v1, *v2;
+  opihi_flt *v1, *v2;
   Vector *ivec, *ovec;
 
@@ -16,10 +16,10 @@
 
   /* allocate the maximum possible needed */
-  ALLOCATE (ovec[0].elements, float, ivec[0].Nelements);
+  ALLOCATE (ovec[0].elements.Flt, opihi_flt, ivec[0].Nelements);
 
   Nnew = 0;
-  v1 = ivec[0].elements;
+  v1 = ivec[0].elements.Flt;
   for (i = 0; i < ivec[0].Nelements; i++, v1++) {
-    v2 = ovec[0].elements;
+    v2 = ovec[0].elements.Flt;
     found = FALSE;
     for (j = 0; !found && (j < Nnew); j++, v2++) {
@@ -27,5 +27,5 @@
     }
     if (!found) {
-      ovec[0].elements[Nnew] = *v1;
+      ovec[0].elements.Flt[Nnew] = *v1;
       Nnew ++;
     }
@@ -33,5 +33,5 @@
 
   ovec[0].Nelements = Nnew;
-  REALLOCATE (ovec[0].elements, float, ovec[0].Nelements);
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, ovec[0].Nelements);
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vbin.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vbin.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vbin.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, j, n, N, Nin, Nout;
   int Normalize, Ignore;
-  float *Vout, *Vin, IgnoreValue;
+  opihi_flt *Vout, *Vin, IgnoreValue;
   double scale;
   Vector *in, *out;
@@ -42,9 +42,9 @@
   Nout = Nin / scale;
 
-  REALLOCATE (out[0].elements, float, Nout);
+  REALLOCATE (out[0].elements.Flt, opihi_flt, Nout);
   out[0].Nelements = Nout;
 
-  Vin  = in[0].elements;
-  Vout = out[0].elements;
+  Vin  = in[0].elements.Flt;
+  Vout = out[0].elements.Flt;
   for (n = j = 0; j < Nout; j++, Vout++) {
     *Vout = 0;
@@ -57,5 +57,5 @@
     if (Normalize) {
       if (N > 0) { 
-	*Vout /= (float) N; 
+	*Vout /= (opihi_flt) N; 
       } else {
 	*Vout = 0;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vclip.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vclip.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vclip.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, Npix, DO_NAN, DO_INF, N;
   double min, Vmin, max, Vmax, nan_val, inf_val;
-  float *in;
+  opihi_flt *in;
   Vector *vec;
 
@@ -41,5 +41,5 @@
 
   Npix = vec[0].Nelements;
-  in =   vec[0].elements;
+  in =   vec[0].elements.Flt;
 
   if (argc == 6) {
@@ -51,5 +51,5 @@
     }
   }
-  in = vec[0].elements;
+  in = vec[0].elements.Flt;
   if (DO_NAN) {
     for (i = 0; i < Npix; i++, in++) {
@@ -59,5 +59,5 @@
     }
   }
-  in = vec[0].elements;
+  in = vec[0].elements.Flt;
   if (DO_INF) {
     for (i = 0; i < Npix; i++, in++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgauss.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgauss.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgauss.c	(revision 20839)
@@ -2,5 +2,5 @@
 
 /* local private functions */
-float fgaussOD (float, float *, int, float *);
+opihi_flt fgaussOD (opihi_flt, opihi_flt *, int, opihi_flt *);
 
 # define GET_VAR(V,A) \
@@ -16,6 +16,6 @@
 
   int i, N, Npts, Npar, Quiet;
-  float par[4], *v1, *v2, *dy, **covar;
-  float chisq, ochisq, dchisq;
+  opihi_flt par[4], *v1, *v2, *dy, **covar;
+  opihi_flt chisq, ochisq, dchisq;
   Vector *xvec, *yvec, *svec, *ovec;
   char *c, name[16];
@@ -43,6 +43,6 @@
 
   Npts = xvec[0].Nelements;
-  ALLOCATE (dy, float, Npts);
-  REALLOCATE (ovec[0].elements, float, Npts);
+  ALLOCATE (dy, opihi_flt, Npts);
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, Npts);
 
   GET_VAR (par[0], "C0");
@@ -52,5 +52,5 @@
   Npar = 4;
 
-  v1 = svec[0].elements;
+  v1 = svec[0].elements.Flt;
   v2 = dy;
   for (i = 0; i < Npts; i++, v1++, v2++) {
@@ -58,9 +58,9 @@
   } 
   
-  ochisq = mrqinit (xvec[0].elements, yvec[0].elements, dy, Npts, par, Npar, fgaussOD, !Quiet);
+  ochisq = mrqinit (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fgaussOD, !Quiet);
   dchisq = ochisq + 2*Npts;
 
   for (i = 0; (i < 20) && ((dchisq > 0.1*(Npts - Npar)) || (dchisq <= 0.0)); i++) {
-    chisq = mrqmin (xvec[0].elements, yvec[0].elements, dy, Npts, par, Npar, fgaussOD, !Quiet);
+    chisq = mrqmin (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fgaussOD, !Quiet);
     dchisq = ochisq - chisq;
     ochisq = chisq;
@@ -70,5 +70,5 @@
 
   for (i = 0; i < Npts; i++) {
-    ovec[0].elements[i] = fgaussOD (xvec[0].elements[i], par, Npar, dy);
+    ovec[0].elements.Flt[i] = fgaussOD (xvec[0].elements.Flt[i], par, Npar, dy);
   }
   ovec[0].Nelements = Npts;
@@ -90,7 +90,7 @@
 
 /* pars: x_o, sigma, I, back */
-float fgaussOD (float x, float *par, int Npar, float *dpar) {
+opihi_flt fgaussOD (opihi_flt x, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float z, r, f;
+  opihi_flt z, r, f;
 
   z = (x - par[0])/par[1];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgrid.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgrid.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vgrid.c	(revision 20839)
@@ -5,5 +5,6 @@
   int i, Nx, Ny, Xb, Yb;
   float Xmin, Xmax, dX, Ymin, Ymax, dY;
-  float *buf, *val, *x, *y, *z;
+  float *buf;
+  opihi_flt *val, *x, *y, *z;
   int *Nval;
   Buffer *bf;
@@ -39,12 +40,12 @@
   strcpy (bf[0].file, "(empty)");
 
-  ALLOCATE (val, float, Nx*Ny);
-  bzero (val, Nx*Ny*sizeof(float));
+  ALLOCATE (val, opihi_flt, Nx*Ny);
+  bzero (val, Nx*Ny*sizeof(opihi_flt));
   ALLOCATE (Nval, int, Nx*Ny);
   bzero (Nval, Nx*Ny*sizeof(int));
 
-  x = vx[0].elements;
-  y = vy[0].elements;
-  z = vz[0].elements;
+  x = vx[0].elements.Flt;
+  y = vy[0].elements.Flt;
+  z = vz[0].elements.Flt;
   for (i = 0; i < vx[0].Nelements; i++, x++, y++, z++) {
     Xb = (*x - Xmin) / dX;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vload.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vload.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vload.c	(revision 20839)
@@ -6,5 +6,5 @@
   int kapa, type;
   char *name;
-  double dx, dy, size, angle;
+  double dx, dy, angle;
   KiiOverlay *overlay;
   Vector *vecx, *vecy;
@@ -82,6 +82,6 @@
     overlay[i].type = type;
     overlay[i].text = NULL;
-    overlay[i].x = vecx[0].elements[i]+0.5;
-    overlay[i].y = vecy[0].elements[i]+0.5;
+    overlay[i].x = vecx[0].elements.Flt[i]+0.5;
+    overlay[i].y = vecy[0].elements.Flt[i]+0.5;
     overlay[i].dx = dx;
     overlay[i].dy = dy;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vmaxwell.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vmaxwell.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vmaxwell.c	(revision 20839)
@@ -2,5 +2,5 @@
 
 /* local private functions */
-float fmaxwellOD (float, float *, int, float *);
+opihi_flt fmaxwellOD (opihi_flt, opihi_flt *, int, opihi_flt *);
 
 # define GET_VAR(V,A) \
@@ -16,6 +16,6 @@
 
   int i, N, Npts, Npar, Quiet;
-  float par[5], *v1, *v2, *dy, **covar;
-  float chisq, ochisq, dchisq;
+  opihi_flt par[5], *v1, *v2, *dy, **covar;
+  opihi_flt chisq, ochisq, dchisq;
   Vector *xvec, *yvec, *svec, *ovec;
   char *c, name[16];
@@ -43,6 +43,6 @@
 
   Npts = xvec[0].Nelements;
-  ALLOCATE (dy, float, Npts);
-  REALLOCATE (ovec[0].elements, float, Npts);
+  ALLOCATE (dy, opihi_flt, Npts);
+  REALLOCATE (ovec[0].elements.Flt, opihi_flt, Npts);
 
   GET_VAR (par[0], "C0");
@@ -54,13 +54,13 @@
   /* careful of variable renomalization */
 
-  v1 = svec[0].elements;
+  v1 = svec[0].elements.Flt;
   v2 = dy;
   for (i = 0; i < Npts; i++, v1++, v2++) *v2 = 1.0 / (*v1 * *v1);
   
-  ochisq = mrqinit (xvec[0].elements, yvec[0].elements, dy, Npts, par, Npar, fmaxwellOD, !Quiet);
+  ochisq = mrqinit (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fmaxwellOD, !Quiet);
   dchisq = ochisq + 2*Npts;
 
   for (i = 0; (i < 20) && ((dchisq > 0.1*(Npts - Npar)) || (dchisq <= 0.0)); i++) {
-    chisq = mrqmin (xvec[0].elements, yvec[0].elements, dy, Npts, par, Npar, fmaxwellOD, !Quiet);
+    chisq = mrqmin (xvec[0].elements.Flt, yvec[0].elements.Flt, dy, Npts, par, Npar, fmaxwellOD, !Quiet);
     dchisq = ochisq - chisq;
     ochisq = chisq;
@@ -70,5 +70,5 @@
 
   for (i = 0; i < Npts; i++) {
-    ovec[0].elements[i] = fmaxwellOD (xvec[0].elements[i], par, Npar, dy);
+    ovec[0].elements.Flt[i] = fmaxwellOD (xvec[0].elements.Flt[i], par, Npar, dy);
   }
   ovec[0].Nelements = Npts;
@@ -90,7 +90,7 @@
 
 /* pars: x_o, -0.5/sigma^2, I, back, ref */
-float fmaxwellOD (float x, float *par, int Npar, float *dpar) {
+opihi_flt fmaxwellOD (opihi_flt x, opihi_flt *par, int Npar, opihi_flt *dpar) {
 
-  float z, r, f;
+  opihi_flt z, r, f;
 
   z = (x - par[0])/par[1];
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vpop.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vpop.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vpop.c	(revision 20839)
@@ -17,5 +17,5 @@
 
   if (Npix > 1) {
-    memmove (&vec[0].elements[0], &vec[0].elements[1], Npix*sizeof(float));
+    memmove (&vec[0].elements.Flt[0], &vec[0].elements.Flt[1], Npix*sizeof(opihi_flt));
   }
   vec[0].Nelements = Npix - 1;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vroll.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vroll.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vroll.c	(revision 20839)
@@ -4,5 +4,5 @@
 
   int Npix;
-  float first;
+  opihi_flt first;
   Vector *vec;
 
@@ -17,7 +17,7 @@
   if (Npix < 2) return (TRUE);
 
-  first = vec[0].elements[0];
-  memmove (&vec[0].elements[0], &vec[0].elements[1], Npix*sizeof(float));
-  vec[0].elements[Npix-1] = first;
+  first = vec[0].elements.Flt[0];
+  memmove (&vec[0].elements.Flt[0], &vec[0].elements.Flt[1], Npix*sizeof(opihi_flt));
+  vec[0].elements.Flt[Npix-1] = first;
   return (TRUE);
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vsmooth.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vsmooth.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vsmooth.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, n, N, Nx, Ns, Ngauss;
-  float *vi, *vo, *gauss, *gaussnorm;
+  opihi_flt *vi, *vo, *gauss, *gaussnorm;
   float g, s, sigma, Nsigma;
   Vector *in;
@@ -23,10 +23,10 @@
   sigma = atof (argv[2]);
   Nx = in[0].Nelements;
-  vi = in[0].elements;
+  vi = in[0].elements.Flt;
 
   /* build a 1D gaussian */
   Ns = (int) (Nsigma*sigma + 0.5);
   Ngauss = 2*Ns + 1;
-  ALLOCATE (gaussnorm, float, Ngauss);
+  ALLOCATE (gaussnorm, opihi_flt, Ngauss);
   gauss = &gaussnorm[Ns];
   for (i = -Ns; i < Ns + 1; i++) {
@@ -34,5 +34,5 @@
   }
 
-  ALLOCATE (vo, float, Nx);
+  ALLOCATE (vo, opihi_flt, Nx);
 
   for (i = 0; i < Nx; i++) {
@@ -47,8 +47,8 @@
   }
 
-  free (in[0].elements);
+  free (in[0].elements.Flt);
   free (gaussnorm);
 
-  in[0].elements = vo;
+  in[0].elements.Flt = vo;
   return (TRUE);
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vstat.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vstat.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vstat.c	(revision 20839)
@@ -5,5 +5,5 @@
   int i, N;
   double max, min, sum, var, dvar, mean, stdev;
-  float *X, IgnoreValue;
+  opihi_flt *X, IgnoreValue;
   int Ignore, Quiet;
 
@@ -41,5 +41,5 @@
 
   /* calculate max, min, mean, sum, npix */
-  X = vec[0].elements;
+  X = vec[0].elements.Flt;
   max = -HUGE_VAL;
   min = HUGE_VAL;
@@ -65,5 +65,5 @@
   ALLOCATE (Nval, int, 1002);
   bzero (Nval, 1000*sizeof(int));
-  X = vec[0].elements;
+  X = vec[0].elements.Flt;
   var = 0;
   for (i = 0; i < vec[0].Nelements; i++, X++) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vzload.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vzload.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/vzload.c	(revision 20839)
@@ -58,11 +58,11 @@
 
   for (i = N = 0; i < Noverlay; i++) {
-    size = MIN (MAX_OUTPUT_SIZE, (vecz[0].elements[i] - min) / range);
+    size = MIN (MAX_OUTPUT_SIZE, (vecz[0].elements.Flt[i] - min) / range);
     if (size < 0.1) continue;
 
     overlay[N].type = type;
     overlay[N].text = NULL;
-    overlay[N].x = vecx[0].elements[i]+0.5;
-    overlay[N].y = vecy[0].elements[i]+0.5;
+    overlay[N].x = vecx[0].elements.Flt[i]+0.5;
+    overlay[N].y = vecy[0].elements.Flt[i]+0.5;
     overlay[N].angle = 0.0;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/write_vectors.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 20839)
@@ -78,5 +78,5 @@
     for (i = 0; i < vec[0][0].Nelements; i++) {
       for (j = 0; j < Nvec; j++) {
-	fprintf (f, "%.10g ", vec[j][0].elements[i]);
+	fprintf (f, "%.10g ", vec[j][0].elements.Flt[i]);
       }
       fprintf (f, "\n");
@@ -135,8 +135,8 @@
     for (j = 0; j < Nvec; j++) {
       if (fmttype[j] == 'd') {
-	fprintf (f, fmtlist[j], (int)(vec[j][0].elements[i]));
+	fprintf (f, fmtlist[j], (int)(vec[j][0].elements.Flt[i]));
       } 
       if (fmttype[j] == 'f') {
-	fprintf (f, fmtlist[j], (float)(vec[j][0].elements[i]));
+	fprintf (f, fmtlist[j], (float)(vec[j][0].elements.Flt[i]));
       } 
     }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/zplot.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/zplot.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/cmd.data/zplot.c	(revision 20839)
@@ -4,5 +4,5 @@
   
   int i, kapa, Npts;
-  float *in, *out;
+  opihi_flt *in, *out;
   double min, range;
   Graphdata graphmode;
@@ -32,8 +32,8 @@
   }
   Zvec.Nelements = zvec[0].Nelements;
-  ALLOCATE (Zvec.elements, float, Zvec.Nelements);
+  ALLOCATE (Zvec.elements.Flt, opihi_flt, Zvec.Nelements);
  
-  in = zvec[0].elements;
-  out = Zvec.elements;
+  in = zvec[0].elements.Flt;
+  out = Zvec.elements.Flt;
   for (i = 0; i < Zvec.Nelements; i++, in++, out++) {
     *out = MIN (1.0, MAX (0.01, (*in - min) / range));
@@ -45,7 +45,7 @@
   graphmode.etype = 0; /* no errorbars */
   Npts = xvec[0].Nelements;
-  PlotVectorTriplet (kapa, Npts, xvec[0].elements, yvec[0].elements, Zvec.elements, &graphmode);
+  PlotVectorTriplet (kapa, Npts, xvec[0].elements.Flt, yvec[0].elements.Flt, Zvec.elements.Flt, &graphmode);
 
-  free (Zvec.elements);
+  free (Zvec.elements.Flt);
 
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/avextract.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/avextract.c	(revision 20839)
@@ -1,4 +1,5 @@
 # include "dvoshell.h"
 
+// XXX need to promote values (and dbStack entries) to opihi_flt, but wait until done testing
 int avextract (int argc, char **argv) {
   
@@ -116,5 +117,5 @@
       if (!dbBooleanCond (stack, Nstack, values)) continue;
       for (n = 0; n < Nreturn; n++) {
-	vec[n][0].elements[Npts] = values[n];
+	vec[n][0].elements.Flt[Npts] = values[n];
       }
       Npts++;
@@ -122,5 +123,5 @@
 	NPTS += 2000;
 	for (n = 0; n < Nreturn; n++) {
-	  REALLOCATE (vec[n][0].elements, float, NPTS);
+	  REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS);
 	}
       }
@@ -132,5 +133,5 @@
   for (n = 0; n < Nreturn; n++) {
     vec[n][0].Nelements = Npts;
-    REALLOCATE (vec[n][0].elements, float, MAX(1,Npts));
+    REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts));
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/calmextract.c	(revision 20839)
@@ -61,5 +61,5 @@
   if ((vec[Nd2] = SelectVector ("cal:dm2",      ANYVECTOR, TRUE)) == NULL) goto escape;
   for (k = 0; k < NVEC; k++) {
-    REALLOCATE (vec[k][0].elements, float, NSTAR);
+    REALLOCATE (vec[k][0].elements.Flt, opihi_flt, NSTAR);
     vec[k][0].Nelements = 0;
   }
@@ -110,5 +110,5 @@
 	NSTAR += N1 + 100;
 	for (k = 0; k < NVEC; k++) {
-	  REALLOCATE (vec[k][0].elements, float, NSTAR);
+	  REALLOCATE (vec[k][0].elements.Flt, opihi_flt, NSTAR);
 	}
       }
@@ -125,12 +125,12 @@
 
       for (j = 0; j < N1; j++, N++) {
-	vec[Nd ][0].elements[N] = M1[j] - M2;
-	vec[Nm1][0].elements[N] = M1[j];
-	vec[Nm2][0].elements[N] = M2;
-	vec[Nd2][0].elements[N] = dM2;
-	vec[Nc ][0].elements[N] = color;
-	vec[Ns ][0].elements[N] = Nstar;
-	vec[NR ][0].elements[N] = catalog.average[i].R;
-	vec[ND ][0].elements[N] = catalog.average[i].D;
+	vec[Nd ][0].elements.Flt[N] = M1[j] - M2;
+	vec[Nm1][0].elements.Flt[N] = M1[j];
+	vec[Nm2][0].elements.Flt[N] = M2;
+	vec[Nd2][0].elements.Flt[N] = dM2;
+	vec[Nc ][0].elements.Flt[N] = color;
+	vec[Ns ][0].elements.Flt[N] = Nstar;
+	vec[NR ][0].elements.Flt[N] = catalog.average[i].R;
+	vec[ND ][0].elements.Flt[N] = catalog.average[i].D;
       }
       Nstar ++; 
@@ -178,5 +178,5 @@
   Ns = vec[0].Nelements;
   for (i = 0; i < N; i++) {
-    vec[0].elements[Ns+i] = value[i];
+    vec[0].elements.Flt[Ns+i] = value[i];
   }
   vec[0].Nelements = Ns + N;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/ccd.c	(revision 20839)
@@ -97,11 +97,11 @@
       for (i1 = 0; i1 < N1; i1++) {
 	for (i2 = 0; i2 < N2; i2++) {
-	  xvec[0].elements[Npts] = M1[i1];
-	  yvec[0].elements[Npts] = M2[i2];
+	  xvec[0].elements.Flt[Npts] = M1[i1];
+	  yvec[0].elements.Flt[Npts] = M2[i2];
 	  Npts++;
 	  if (Npts >= NPTS) {
 	    NPTS += 2000;
-	    REALLOCATE (xvec[0].elements, float, NPTS);
-	    REALLOCATE (yvec[0].elements, float, NPTS);
+	    REALLOCATE (xvec[0].elements.Flt, opihi_flt, NPTS);
+	    REALLOCATE (yvec[0].elements.Flt, opihi_flt, NPTS);
 	  }
 	}
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmd.c	(revision 20839)
@@ -95,11 +95,11 @@
       for (i1 = 0; i1 < N1; i1++) {
 	for (i3 = 0; i3 < N3; i3++) {
-	  xvec[0].elements[Npts] = M1[i1];
-	  yvec[0].elements[Npts] = M3[i3];
+	  xvec[0].elements.Flt[Npts] = M1[i1];
+	  yvec[0].elements.Flt[Npts] = M3[i3];
 	  Npts++;
 	  if (Npts >= NPTS) {
 	    NPTS += 2000;
-	    REALLOCATE (xvec[0].elements, float, NPTS);
-	    REALLOCATE (yvec[0].elements, float, NPTS);
+	    REALLOCATE (xvec[0].elements.Flt, opihi_flt, NPTS);
+	    REALLOCATE (yvec[0].elements.Flt, opihi_flt, NPTS);
 	  }
 	}
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/cmpread.c	(revision 20839)
@@ -89,7 +89,7 @@
   fclose (f);
 
-  REALLOCATE (vec[0].elements, float, Nstars);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, Nstars);
   vec[0].Nelements = Nstars;
-  bzero (vec[0].elements, Nstars*sizeof(float));
+  bzero (vec[0].elements.Flt, Nstars*sizeof(opihi_flt));
 
   value = 0;
@@ -135,5 +135,5 @@
 	break;
     }
-    vec[0].elements[i] = value;
+    vec[0].elements.Flt[i] = value;
   }      
   free (stars);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/compare.c	(revision 20839)
@@ -10,10 +10,10 @@
   Nmatch = 0;
   NMATCH = D_NMATCH;
-  REALLOCATE (rvec[0].elements, float, NMATCH);
-  REALLOCATE (dvec[0].elements, float, NMATCH);
-  REALLOCATE (mvec[0].elements, float, NMATCH);
-  REALLOCATE (drvec[0].elements, float, NMATCH);
-  REALLOCATE (ddvec[0].elements, float, NMATCH);
-  REALLOCATE (dmvec[0].elements, float, NMATCH);
+  REALLOCATE (rvec[0].elements.Flt, opihi_flt, NMATCH);
+  REALLOCATE (dvec[0].elements.Flt, opihi_flt, NMATCH);
+  REALLOCATE (mvec[0].elements.Flt, opihi_flt, NMATCH);
+  REALLOCATE (drvec[0].elements.Flt, opihi_flt, NMATCH);
+  REALLOCATE (ddvec[0].elements.Flt, opihi_flt, NMATCH);
+  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NMATCH);
 
   for (i = j = 0; (i < catlog1[0].Naverage) && (j < catlog2[0].Naverage);) {
@@ -36,19 +36,19 @@
 	dR = hypot (dX, dY);
 	if (dR < radius) {
-	  rvec[0].elements[Nmatch] = catlog1[0].average[i].R;
-	  dvec[0].elements[Nmatch] = catlog1[0].average[i].D;
-	  // mvec[0].elements[Nmatch] = catlog1[0].average[i].M;
-	  drvec[0].elements[Nmatch] = dX;
-	  ddvec[0].elements[Nmatch] = dY;
-	  // dmvec[0].elements[Nmatch] = catlog1[0].average[i].M - catlog2[0].average[j].M;
+	  rvec[0].elements.Flt[Nmatch] = catlog1[0].average[i].R;
+	  dvec[0].elements.Flt[Nmatch] = catlog1[0].average[i].D;
+	  // mvec[0].elements.Flt[Nmatch] = catlog1[0].average[i].M;
+	  drvec[0].elements.Flt[Nmatch] = dX;
+	  ddvec[0].elements.Flt[Nmatch] = dY;
+	  // dmvec[0].elements.Flt[Nmatch] = catlog1[0].average[i].M - catlog2[0].average[j].M;
 	  Nmatch ++;
 	  if (Nmatch == NMATCH - 1) {
 	    NMATCH += D_NMATCH;
-	    REALLOCATE ( rvec[0].elements, float, NMATCH);
-	    REALLOCATE ( dvec[0].elements, float, NMATCH);
-	    REALLOCATE ( mvec[0].elements, float, NMATCH);
-	    REALLOCATE (drvec[0].elements, float, NMATCH);
-	    REALLOCATE (ddvec[0].elements, float, NMATCH);
-	    REALLOCATE (dmvec[0].elements, float, NMATCH);
+	    REALLOCATE ( rvec[0].elements.Flt, opihi_flt, NMATCH);
+	    REALLOCATE ( dvec[0].elements.Flt, opihi_flt, NMATCH);
+	    REALLOCATE ( mvec[0].elements.Flt, opihi_flt, NMATCH);
+	    REALLOCATE (drvec[0].elements.Flt, opihi_flt, NMATCH);
+	    REALLOCATE (ddvec[0].elements.Flt, opihi_flt, NMATCH);
+	    REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NMATCH);
 	  }
 	}
@@ -59,10 +59,10 @@
   }
 
-  REALLOCATE ( rvec[0].elements, float, Nmatch);
-  REALLOCATE ( dvec[0].elements, float, Nmatch);
-  REALLOCATE ( mvec[0].elements, float, Nmatch);
-  REALLOCATE (drvec[0].elements, float, Nmatch);
-  REALLOCATE (ddvec[0].elements, float, Nmatch);
-  REALLOCATE (dmvec[0].elements, float, Nmatch);
+  REALLOCATE ( rvec[0].elements.Flt, opihi_flt, Nmatch);
+  REALLOCATE ( dvec[0].elements.Flt, opihi_flt, Nmatch);
+  REALLOCATE ( mvec[0].elements.Flt, opihi_flt, Nmatch);
+  REALLOCATE (drvec[0].elements.Flt, opihi_flt, Nmatch);
+  REALLOCATE (ddvec[0].elements.Flt, opihi_flt, Nmatch);
+  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, Nmatch);
   
   rvec[0].Nelements = Nmatch;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/detrend.c	(revision 20839)
@@ -15,5 +15,5 @@
   int Type, mode, CCD;
   int NVALUE;
-  float *value;
+  opihi_flt *value;
   time_t TimeReference;
   int TimeFormat;
@@ -151,6 +151,6 @@
   N = 0;
   NVALUE = 1000;
-  REALLOCATE (vec[0].elements, float, NVALUE);
-  value = vec[0].elements;
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, NVALUE);
+  value = vec[0].elements.Flt;
 
   GetTimeFormat (&TimeReference, &TimeFormat);
@@ -193,10 +193,10 @@
     if (N >= NVALUE - 1) {
       NVALUE += 1000;
-      REALLOCATE (vec[0].elements, float, NVALUE);
-      value = vec[0].elements;
-    }
-  }
-
-  REALLOCATE (vec[0].elements, float, MAX (1,N));
+      REALLOCATE (vec[0].elements.Flt, opihi_flt, NVALUE);
+      value = vec[0].elements.Flt;
+    }
+  }
+
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, MAX (1,N));
   vec[0].Nelements = N;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/fitcolors.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/fitcolors.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/fitcolors.c	(revision 20839)
@@ -17,6 +17,7 @@
   char name[64], filename[64], plotname[64], label[64];
   double *M1, *M2;
-  float *out, *colorFit, *deltaFit, dColor, C0, C1;
-  float minDelta, maxDelta, minColor, maxColor;
+  float *out;
+  opihi_flt *colorFit, *deltaFit, dColor, C0, C1;
+  opihi_flt minDelta, maxDelta, minColor, maxColor;
   int kapa, Npx, Npy, NPX, NPY, Nplot, PLOT;
   Graphdata graphdata;
@@ -99,6 +100,6 @@
     KapaSetFont (kapa, "helvetica", 14);
 
-    ALLOCATE (colorFit, float, 11);
-    ALLOCATE (deltaFit, float, 11);
+    ALLOCATE (colorFit, opihi_flt, 11);
+    ALLOCATE (deltaFit, opihi_flt, 11);
     dColor = (maxColor - minColor) / 10.0;
     for (i = 0; i < 11; i++) {
@@ -232,11 +233,11 @@
 	      if (M2[i2] < minColor) continue;
 	      if (M2[i2] > maxColor) continue;
-	      yvec[0].elements[Npts] = M1[i1];
-	      xvec[0].elements[Npts] = M2[i2];
+	      yvec[0].elements.Flt[Npts] = M1[i1];
+	      xvec[0].elements.Flt[Npts] = M2[i2];
 	      Npts++;
 	      if (Npts >= NPTS) {
 		NPTS += 2000;
-		REALLOCATE (xvec[0].elements, float, NPTS);
-		REALLOCATE (yvec[0].elements, float, NPTS);
+		REALLOCATE (xvec[0].elements.Flt, opihi_flt, NPTS);
+		REALLOCATE (yvec[0].elements.Flt, opihi_flt, NPTS);
 	      }
 	    }
@@ -305,7 +306,6 @@
 	KapaSetLimits (kapa, &graphdata);
 	KapaBox (kapa, &graphdata);
-	KapaPrepPlot (kapa, Npts, &graphdata);
-	KapaPlotVector (kapa, Npts, xvec[0].elements, "x");
-	KapaPlotVector (kapa, Npts, yvec[0].elements, "y");
+
+	PlotVectorPair (kapa, Npts, xvec[0].elements.Flt, yvec[0].elements.Flt, &graphdata);
 
 	for (i = 0; i < 11; i++) {
@@ -314,7 +314,6 @@
 	graphdata.style = 0;
 	graphdata.color = KapaColorByName ("red");
-	KapaPrepPlot (kapa, 11, &graphdata);
-	KapaPlotVector (kapa, 11, colorFit, "x");
-	KapaPlotVector (kapa, 11, deltaFit, "y");
+
+	PlotVectorPair (kapa, 11, colorFit, deltaFit, &graphdata);
 
 	KapaSetFont (kapa, "helvetica", 8);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/gstar.c	(revision 20839)
@@ -136,8 +136,8 @@
     N = 0;
     NPTS = 1000;
-    ALLOCATE (vec1[0].elements, float, NPTS);
-    ALLOCATE (vec2[0].elements, float, NPTS);
-    ALLOCATE (vec3[0].elements, float, NPTS);
-    ALLOCATE (vec4[0].elements, float, NPTS);
+    ALLOCATE (vec1[0].elements.Flt, opihi_flt, NPTS);
+    ALLOCATE (vec2[0].elements.Flt, opihi_flt, NPTS);
+    ALLOCATE (vec3[0].elements.Flt, opihi_flt, NPTS);
+    ALLOCATE (vec4[0].elements.Flt, opihi_flt, NPTS);
   }
 
@@ -250,15 +250,15 @@
 	  
 	  if (SaveVectors) {
-	    vec1[0].elements[N] = Mcat;
-	    vec2[0].elements[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
-	    vec3[0].elements[N] = catalog.measure[m].airmass;
-	    vec4[0].elements[N] = catalog.measure[m].photcode;
+	    vec1[0].elements.Flt[N] = Mcat;
+	    vec2[0].elements.Flt[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
+	    vec3[0].elements.Flt[N] = catalog.measure[m].airmass;
+	    vec4[0].elements.Flt[N] = catalog.measure[m].photcode;
 	    N ++;
 	    if (N == NPTS - 1) {
 	      NPTS += 2000;
-	      REALLOCATE (vec1[0].elements, float, NPTS);
-	      REALLOCATE (vec2[0].elements, float, NPTS);
-	      REALLOCATE (vec3[0].elements, float, NPTS);
-	      REALLOCATE (vec4[0].elements, float, NPTS);
+	      REALLOCATE (vec1[0].elements.Flt, opihi_flt, NPTS);
+	      REALLOCATE (vec2[0].elements.Flt, opihi_flt, NPTS);
+	      REALLOCATE (vec3[0].elements.Flt, opihi_flt, NPTS);
+	      REALLOCATE (vec4[0].elements.Flt, opihi_flt, NPTS);
 	    }
 	  }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/images.c	(revision 20839)
@@ -113,6 +113,6 @@
 
   npts = NPTS = 200;
-  ALLOCATE (Xvec.elements, float, NPTS);
-  ALLOCATE (Yvec.elements, float, NPTS);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
   ALLOCATE (plist, int, NPTS);
   n = N = 0;
@@ -238,12 +238,12 @@
     status = FALSE;
     for (j = 0; j < Npts; j++) {
-      status |= fRD_to_XY (&Xvec.elements[N+2*j], &Yvec.elements[N+2*j], r[j], d[j], &graphmode.coords);
+      status |= RD_to_XY (&Xvec.elements.Flt[N+2*j], &Yvec.elements.Flt[N+2*j], r[j], d[j], &graphmode.coords);
       if (j > 0) {
-	Xvec.elements[N+2*j - 1] = Xvec.elements[N+2*j];
-	Yvec.elements[N+2*j - 1] = Yvec.elements[N+2*j];
+	Xvec.elements.Flt[N+2*j - 1] = Xvec.elements.Flt[N+2*j];
+	Yvec.elements.Flt[N+2*j - 1] = Yvec.elements.Flt[N+2*j];
       }
     }
-    Xvec.elements[N+2*Npts-1] = Xvec.elements[N];
-    Yvec.elements[N+2*Npts-1] = Yvec.elements[N];
+    Xvec.elements.Flt[N+2*Npts-1] = Xvec.elements.Flt[N];
+    Yvec.elements.Flt[N+2*Npts-1] = Yvec.elements.Flt[N];
     if (!status) continue;
     // if none of the points are on the visible side of the projection, do not plot the image
@@ -251,8 +251,8 @@
     InPic = FALSE;
     for (j = 0; j < 2*Npts; j+=2) {
-      if ((Xvec.elements[N+j] >= graphmode.xmin) && 
-	  (Xvec.elements[N+j] <= graphmode.xmax) && 
-	  (Yvec.elements[N+j] >= graphmode.ymin) && 
-	  (Yvec.elements[N+j] <= graphmode.ymax))
+      if ((Xvec.elements.Flt[N+j] >= graphmode.xmin) && 
+	  (Xvec.elements.Flt[N+j] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[N+j] >= graphmode.ymin) && 
+	  (Yvec.elements.Flt[N+j] <= graphmode.ymax))
 	InPic = TRUE;
     }
@@ -269,6 +269,6 @@
     if (N + 16 >= NPTS) {  /* need to leave room for 8 point image */
       NPTS += 400;
-      REALLOCATE (Xvec.elements, float, NPTS);
-      REALLOCATE (Yvec.elements, float, NPTS);
+      REALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+      REALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
     }
   }
@@ -280,9 +280,9 @@
     graphmode.ptype = 100; /* connect pairs of points */
     graphmode.etype = 0;
-    PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
-  }
-
-  free (Xvec.elements);
-  free (Yvec.elements);
+    PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
+  }
+
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   free (image);
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imbox.c	(revision 20839)
@@ -36,6 +36,6 @@
   
   /* project this image to screen display coords */
-  ALLOCATE (Xvec.elements, float, 8);
-  ALLOCATE (Yvec.elements, float, 8);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, 8);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, 8);
 
   while (gfits_fread_header (f, &header)) {
@@ -82,18 +82,18 @@
 	while (r > Rmid) r-= 360.0;
       }
-      status |= fRD_to_XY (&Xvec.elements[2*j], &Yvec.elements[2*j], r, d, &graphmode.coords);
+      status |= RD_to_XY (&Xvec.elements.Flt[2*j], &Yvec.elements.Flt[2*j], r, d, &graphmode.coords);
       if (j > 0) {
-	Xvec.elements[2*j - 1] = Xvec.elements[2*j];
-	Yvec.elements[2*j - 1] = Yvec.elements[2*j];
+	Xvec.elements.Flt[2*j - 1] = Xvec.elements.Flt[2*j];
+	Yvec.elements.Flt[2*j - 1] = Yvec.elements.Flt[2*j];
       }
     }
-    Xvec.elements[7] = Xvec.elements[0];
-    Yvec.elements[7] = Yvec.elements[0];
+    Xvec.elements.Flt[7] = Xvec.elements.Flt[0];
+    Yvec.elements.Flt[7] = Yvec.elements.Flt[0];
     InPic = FALSE;
     for (j = 0; j < 8; j+=2) {
-      if ((Xvec.elements[j] >= graphmode.xmin) && 
-	  (Xvec.elements[j] <= graphmode.xmax) && 
-	  (Yvec.elements[j] >= graphmode.ymin) && 
-	  (Yvec.elements[j] <= graphmode.ymax))
+      if ((Xvec.elements.Flt[j] >= graphmode.xmin) && 
+	  (Xvec.elements.Flt[j] <= graphmode.xmax) && 
+	  (Yvec.elements.Flt[j] >= graphmode.ymin) && 
+	  (Yvec.elements.Flt[j] <= graphmode.ymax))
 	InPic = TRUE;
     }
@@ -104,5 +104,5 @@
       graphmode.ptype = 100; /* connect pairs of points */
       graphmode.etype = 0;
-      PlotVectorPair (kapa, 8, Xvec.elements, Yvec.elements, &graphmode);
+      PlotVectorPair (kapa, 8, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
     }
   skip:
@@ -112,6 +112,6 @@
   }
   fclose (f);
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   return (TRUE);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdata.c	(revision 20839)
@@ -125,5 +125,5 @@
   /* create output vector */
   NPTS = 1000;
-  REALLOCATE (vec[0].elements, float, NPTS);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS);
   vec[0].Nelements = N = 0;
 
@@ -153,7 +153,7 @@
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
 	  n = catalog.measure[i].averef;
-	  vec[0].elements[N] = catalog.average[n].R - catalog.measure[i].dR / 3600.0;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.average[n].R - catalog.measure[i].dR / 3600.0;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -162,7 +162,7 @@
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
 	  n = catalog.measure[i].averef;
-	  vec[0].elements[N] = catalog.average[n].D - catalog.measure[i].dD / 3600.0;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.average[n].D - catalog.measure[i].dD / 3600.0;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -170,7 +170,7 @@
 	for (i = 0; i < catalog.Nmeasure; i++) {
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
-	  vec[0].elements[N] = catalog.measure[i].M;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.measure[i].M;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -178,7 +178,7 @@
 	for (i = 0; i < catalog.Nmeasure; i++) {
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
-	  vec[0].elements[N] = catalog.measure[i].dM;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.measure[i].dM;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -186,7 +186,7 @@
 	for (i = 0; i < catalog.Nmeasure; i++) {
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
-	  vec[0].elements[N] = catalog.measure[i].Mcal;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.measure[i].Mcal;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -195,5 +195,5 @@
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
 	  n = catalog.measure[i].averef;
-	  // vec[0].elements[N] = catalog.average[n].M;
+	  // vec[0].elements.Flt[N] = catalog.average[n].M;
 	  N++;
 	}
@@ -202,7 +202,7 @@
 	for (i = 0; i < catalog.Nmeasure; i++) {
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
-	  vec[0].elements[N] = catalog.measure[i].photcode;
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = catalog.measure[i].photcode;
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -210,7 +210,7 @@
 	for (i = 0; i < catalog.Nmeasure; i++) {
 	  if ((catalog.measure[i].t < start) || (catalog.measure[i].t > stop)) continue;
-	  vec[0].elements[N] = TimeValue (catalog.measure[i].t, TimeReference, TimeFormat);
-	  N++;
-	  CHECK_REALLOCATE (vec[0].elements, float, NPTS, N, 1000);
+	  vec[0].elements.Flt[N] = TimeValue (catalog.measure[i].t, TimeReference, TimeFormat);
+	  N++;
+	  CHECK_REALLOCATE (vec[0].elements.Flt, opihi_flt, NPTS, N, 1000);
 	}
 	break;
@@ -220,5 +220,5 @@
   
   vec[0].Nelements = N;
-  REALLOCATE (vec[0].elements, float, MAX(1,N));
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, MAX(1,N));
   return (TRUE);
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imdense.c	(revision 20839)
@@ -31,6 +31,6 @@
 
   NPTS = 200;
-  ALLOCATE (Xvec.elements, float, NPTS);
-  ALLOCATE (Yvec.elements, float, NPTS);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
   N = 0;
   for (i = 0; i < Nimage; i++) {
@@ -45,14 +45,14 @@
     while (r < Rmin) r += 360.0; 
     while (r > Rmax) r -= 360.0; 
-    status |= fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], r, d, &graphmode.coords);
-    if ((Xvec.elements[N] >= graphmode.xmin) && 
-	(Xvec.elements[N] <= graphmode.xmax) && 
-	(Yvec.elements[N] >= graphmode.ymin) && 
-	(Yvec.elements[N] <= graphmode.ymax) && status) {
+    status |= RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, d, &graphmode.coords);
+    if ((Xvec.elements.Flt[N] >= graphmode.xmin) && 
+	(Xvec.elements.Flt[N] <= graphmode.xmax) && 
+	(Yvec.elements.Flt[N] >= graphmode.ymin) && 
+	(Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
       N++;
       if (N > NPTS - 1) { 
 	NPTS += 200;
-	REALLOCATE (Xvec.elements, float, NPTS);
-	REALLOCATE (Yvec.elements, float, NPTS);
+	REALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+	REALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
       }
     }
@@ -63,9 +63,9 @@
     graphmode.style = 2; /* points */
     graphmode.etype = 0;
-    PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
+    PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   }
 
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   free (image);
   return (TRUE);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imextract.c	(revision 20839)
@@ -165,5 +165,5 @@
 
   /* create storage vector */
-  REALLOCATE (vec[0].elements, float, Nimage);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, Nimage);
   vec[0].Nelements = Nimage;
   
@@ -186,5 +186,5 @@
 	y = 0.5*image[j].NY;
 	XY_to_RD (&ra, &dec, x, y, &image[j].coords);
-	vec[0].elements[N] = ra;
+	vec[0].elements.Flt[N] = ra;
 	break;
       case DEC:
@@ -193,51 +193,51 @@
 	y = 0.5*image[j].NY;
 	XY_to_RD (&ra, &dec, x, y, &image[j].coords);
-	vec[0].elements[N] = dec;
+	vec[0].elements.Flt[N] = dec;
 	break;
       case Xm:
-	vec[0].elements[N] = pow(10.0, 0.01*image[j].Xm);
+	vec[0].elements.Flt[N] = pow(10.0, 0.01*image[j].Xm);
 	break;
       case AIRMASS:
-	vec[0].elements[N] = image[j].secz;
+	vec[0].elements.Flt[N] = image[j].secz;
 	break;
       case MCAL:
-	vec[0].elements[N] = image[j].Mcal;
+	vec[0].elements.Flt[N] = image[j].Mcal;
 	break;
       case dMCAL:
-	vec[0].elements[N] = image[j].dMcal;
+	vec[0].elements.Flt[N] = image[j].dMcal;
 	break;
       case PHOTCODE:
-	vec[0].elements[N] = image[j].photcode;
+	vec[0].elements.Flt[N] = image[j].photcode;
 	break;
       case TIME:
 	t = image[j].tzero + 0.5*image[j].NY * image[j].trate / 10000;
-	vec[0].elements[N] = TimeValue (t, TimeReference, TimeFormat);
+	vec[0].elements.Flt[N] = TimeValue (t, TimeReference, TimeFormat);
 	break;
       case FWHM:
-	vec[0].elements[N] = image[j].fwhm_x / 25.0;
+	vec[0].elements.Flt[N] = image[j].fwhm_x / 25.0;
 	break;
       case EXPTIME:
-	vec[0].elements[N] = image[j].exptime;
+	vec[0].elements.Flt[N] = image[j].exptime;
 	break;
       case NSTAR:
-	vec[0].elements[N] = image[j].nstar;
+	vec[0].elements.Flt[N] = image[j].nstar;
 	break;
       case NCAL:
-	vec[0].elements[N] = image[j].Mxxxx;
+	vec[0].elements.Flt[N] = image[j].Mxxxx;
 	break;
       case SKY:
-	vec[0].elements[N] = image[j].Myyyy + 0x8000;
+	vec[0].elements.Flt[N] = image[j].Myyyy + 0x8000;
 	break;
       case FLAG:
-	vec[0].elements[N] = image[j].code;
+	vec[0].elements.Flt[N] = image[j].code;
 	break;
       case NX_PIX:
-	vec[0].elements[N] = image[j].NX;
+	vec[0].elements.Flt[N] = image[j].NX;
 	break;
       case NY_PIX:
-	vec[0].elements[N] = image[j].NY;
+	vec[0].elements.Flt[N] = image[j].NY;
 	break;
       case IMAGE_ID:
-	vec[0].elements[N] = image[j].imageID;
+	vec[0].elements.Flt[N] = image[j].imageID;
 	break;
       case THETA: {
@@ -247,5 +247,5 @@
 	theta1 = DEG_RAD*atan2 (+s1*image[j].coords.pc1_2, s1*image[j].coords.pc1_1);
 	theta2 = DEG_RAD*atan2 (-s2*image[j].coords.pc2_1, s2*image[j].coords.pc2_2);
-	vec[0].elements[N] = 0.5*(theta1+theta2);
+	vec[0].elements.Flt[N] = 0.5*(theta1+theta2);
 	break; }
       case SKEW: {
@@ -255,5 +255,5 @@
 	theta1 = DEG_RAD*atan2 (+s1*image[j].coords.pc1_2, s1*image[j].coords.pc1_1);
 	theta2 = DEG_RAD*atan2 (-s2*image[j].coords.pc2_1, s2*image[j].coords.pc2_2);
-	vec[0].elements[N] = (theta1-theta2);
+	vec[0].elements.Flt[N] = (theta1-theta2);
 	break; }
       case SCALE: {
@@ -261,5 +261,5 @@
 	scale1 = fabs(image[j].coords.cdelt1);
 	scale2 = fabs(image[j].coords.cdelt2);
-	vec[0].elements[N] = 0.5*(scale1+scale2);
+	vec[0].elements.Flt[N] = 0.5*(scale1+scale2);
 	break; }
       case DSCALE: {
@@ -267,5 +267,5 @@
 	scale1 = fabs(image[j].coords.cdelt1);
 	scale2 = fabs(image[j].coords.cdelt2);
-	vec[0].elements[N] = (scale1-scale2);
+	vec[0].elements.Flt[N] = (scale1-scale2);
 	break; }
 
@@ -275,13 +275,13 @@
     case Y_LR_CHIP:
     case X_UL_CHIP:
-      vec[0].elements[N] = 0.0;
+      vec[0].elements.Flt[N] = 0.0;
       break;
     case X_LR_CHIP:
     case X_UR_CHIP:
-      vec[0].elements[N] = image[j].NX;
+      vec[0].elements.Flt[N] = image[j].NX;
       break;
     case Y_UL_CHIP:
     case Y_UR_CHIP:
-      vec[0].elements[N] = image[j].NX;
+      vec[0].elements.Flt[N] = image[j].NX;
       break;
 
@@ -289,20 +289,20 @@
     case Y_LL_FP:
       XY_to_LM (&x, &y, 0.0, 0.0, &image[j].coords);
-      vec[0].elements[N] = (mode == X_LL_FP) ? x : y;
+      vec[0].elements.Flt[N] = (mode == X_LL_FP) ? x : y;
       break;
     case X_LR_FP:
     case Y_LR_FP:
       XY_to_LM (&x, &y, image[j].NX, 0.0, &image[j].coords);
-      vec[0].elements[N] = (mode == X_LR_FP) ? x : y;
+      vec[0].elements.Flt[N] = (mode == X_LR_FP) ? x : y;
       break;
     case X_UL_FP:
     case Y_UL_FP:
       XY_to_LM (&x, &y, 0.0, image[j].NY, &image[j].coords);
-      vec[0].elements[N] = (mode == X_UL_FP) ? x : y;
+      vec[0].elements.Flt[N] = (mode == X_UL_FP) ? x : y;
       break;
     case X_UR_FP:
     case Y_UR_FP:
       XY_to_LM (&x, &y, image[j].NX, image[j].NY, &image[j].coords);
-      vec[0].elements[N] = (mode == X_UR_FP) ? x : y;
+      vec[0].elements.Flt[N] = (mode == X_UR_FP) ? x : y;
       break;
     }
@@ -311,5 +311,5 @@
   
   vec[0].Nelements = N;
-  REALLOCATE (vec[0].elements, float, N);
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, N);
 
   free (subset);
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imrough.c	(revision 20839)
@@ -13,5 +13,5 @@
   char DataBase[256], *Filter;
   double trange;
-  float *Vec;
+  opihi_flt *Vec;
   time_t tzero, tend, TimeReference;
   RegImage *image;
@@ -132,6 +132,6 @@
   N = 0;
   NVEC = 1000;
-  REALLOCATE (vec[0].elements, float, NVEC);
-  Vec = vec[0].elements;
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, NVEC);
+  Vec = vec[0].elements.Flt;
 
   GetTimeFormat (&TimeReference, &TimeFormat);
@@ -216,10 +216,10 @@
     if (N >= NVEC - 1) {
       NVEC += 1000;
-      REALLOCATE (vec[0].elements, float, NVEC);
-      Vec = vec[0].elements;
-    }
-  }
-
-  REALLOCATE (vec[0].elements, float, MAX (1,N));
+      REALLOCATE (vec[0].elements.Flt, opihi_flt, NVEC);
+      Vec = vec[0].elements.Flt;
+    }
+  }
+
+  REALLOCATE (vec[0].elements.Flt, opihi_flt, MAX (1,N));
   vec[0].Nelements = N;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/imstats.c	(revision 20839)
@@ -35,17 +35,17 @@
   Xvec.Nelements = Nimage;
   Yvec.Nelements = Nimage;
-  ALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  ALLOCATE (Yvec.elements, float, Yvec.Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
   gprint (GP_LOG, "seq  ra (J2000) dec    time (s)   Nstars\n");
   for (i = 0; i < Nimage; i++) {
-    Xvec.elements[i] = image[i].secz;
+    Xvec.elements.Flt[i] = image[i].secz;
     if (Mcal) 
-      Yvec.elements[i] = image[i].Mcal;
+      Yvec.elements.Flt[i] = image[i].Mcal;
     else 
-      Yvec.elements[i] = image[i].dMcal;
+      Yvec.elements.Flt[i] = image[i].dMcal;
     if (!FindMosaicForImage (image, Nimage, i)) continue;
     XY_to_RD (&r, &d, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
     gprint (GP_ERR, "%d %8.4f %8.4f %10d %6d  %5.3f %6.3f %6.3f\n", 
-	     i, r, d, image[i].tzero, image[i].nstar, Xvec.elements[i], 
+	     i, r, d, image[i].tzero, image[i].nstar, Xvec.elements.Flt[i], 
 	     image[i].Mcal, image[i].dMcal);
   } 
@@ -54,8 +54,8 @@
   graphmode.style = 2;
   graphmode.etype = 0;
-  PlotVectorPair (kapa, Nimage, Xvec.elements, Yvec.elements, &graphmode);
+  PlotVectorPair (kapa, Nimage, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   return (TRUE);
 }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lcurve.c	(revision 20839)
@@ -103,8 +103,8 @@
 
   NPTS = 100;
-  ALLOCATE (Xvec.elements, float, NPTS);
-  ALLOCATE (Yvec.elements, float, NPTS);
-  dYvec.elements = NULL;
-  if (ErrorBars) { ALLOCATE (dYvec.elements, float, NPTS); }
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
+  dYvec.elements.Flt = NULL;
+  if (ErrorBars) { ALLOCATE (dYvec.elements.Flt, opihi_flt, NPTS); }
   N = 0;
 
@@ -124,14 +124,14 @@
       m = catalog.average[N1[i]].measureOffset;
       for (j = 0; j < catalog.average[N1[i]].Nmeasure; j++, m++) {
-	if (ErrorBars) dYvec.elements[N] = catalog.measure[m].dM;
-	Xvec.elements[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
-	Yvec.elements[N] = PhotCat (&catalog.measure[m]);
+	if (ErrorBars) dYvec.elements.Flt[N] = catalog.measure[m].dM;
+	Xvec.elements.Flt[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
+	Yvec.elements.Flt[N] = PhotCat (&catalog.measure[m]);
 	/**** need to use PhotRel optionally here ****/
 	N++; 
 	if (N == NPTS) {
 	  NPTS += 100;
-	  REALLOCATE (Xvec.elements, float, NPTS);
-	  REALLOCATE (Yvec.elements, float, NPTS);
-	  if (ErrorBars) { REALLOCATE (dYvec.elements, float, NPTS); }
+	  REALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+	  REALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
+	  if (ErrorBars) { REALLOCATE (dYvec.elements.Flt, opihi_flt, NPTS); }
 	}
       }      
@@ -142,7 +142,7 @@
   
   if (ErrorBars)
-    fsortthree (Xvec.elements, Yvec.elements, dYvec.elements, N);
+    dsortthree (Xvec.elements.Flt, Yvec.elements.Flt, dYvec.elements.Flt, N);
   else
-    fsortpair (Xvec.elements, Yvec.elements, N);
+    dsortpair (Xvec.elements.Flt, Yvec.elements.Flt, N);
 
   /* autoscale the plot */
@@ -154,10 +154,8 @@
     graphmode.etype = 0;  
 
-  KapaPrepPlot (kapa, N, &graphmode);
-  KapaPlotVector (kapa, N, Xvec.elements, "x");
-  KapaPlotVector (kapa, N, Yvec.elements, "y");
   if (ErrorBars) {
-    KapaPlotVector (kapa, N, dYvec.elements, "dym");
-    KapaPlotVector (kapa, N, dYvec.elements, "dyp");
+    PlotVectorPairErrors (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, dYvec.elements.Flt, &graphmode);
+  } else {
+    PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   }
 
@@ -175,15 +173,15 @@
 
   if (SaveVectors) {
-    free (xvec[0].elements);
-    free (yvec[0].elements);
-    xvec[0].elements = Xvec.elements;
-    yvec[0].elements = Yvec.elements;
+    free (xvec[0].elements.Flt);
+    free (yvec[0].elements.Flt);
+    xvec[0].elements.Flt = Xvec.elements.Flt;
+    yvec[0].elements.Flt = Yvec.elements.Flt;
     xvec[0].Nelements = yvec[0].Nelements = Xvec.Nelements;
   } else {
-    free (Xvec.elements);
-    free (Yvec.elements);
+    free (Xvec.elements.Flt);
+    free (Yvec.elements.Flt);
   }
 
-  if (ErrorBars) free (dYvec.elements);
+  if (ErrorBars) free (dYvec.elements.Flt);
   dvo_catalog_free (&catalog);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/lightcurve.c	(revision 20839)
@@ -87,7 +87,7 @@
   N = 0;
   NPTS = 100;
-  REALLOCATE (tvec[0].elements, float, NPTS);
-  REALLOCATE (mvec[0].elements, float, NPTS);
-  REALLOCATE (dmvec[0].elements, float, NPTS);
+  REALLOCATE (tvec[0].elements.Flt, opihi_flt, NPTS);
+  REALLOCATE (mvec[0].elements.Flt, opihi_flt, NPTS);
+  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NPTS);
   
   GetTimeFormat (&TimeReference, &TimeFormat);
@@ -117,22 +117,22 @@
 	}      
 
-	tvec[0].elements[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
-	dmvec[0].elements[N] = catalog.measure[m].dM;
+	tvec[0].elements.Flt[N] = TimeValue (catalog.measure[m].t, TimeReference, TimeFormat);
+	dmvec[0].elements.Flt[N] = catalog.measure[m].dM;
 	if (RELPHOT) {
-	  mvec[0].elements[N] = PhotCat (&catalog.measure[m]);
+	  mvec[0].elements.Flt[N] = PhotCat (&catalog.measure[m]);
 	} else {
-	  mvec[0].elements[N] = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
+	  mvec[0].elements.Flt[N] = PhotRel (&catalog.measure[m], &catalog.average[k], &catalog.secfilt[k*Nsecfilt]);
 	}
 	N++; 
 	if (N == NPTS) {
 	  NPTS += 100;
-	  REALLOCATE (tvec[0].elements, float, NPTS);
-	  REALLOCATE (mvec[0].elements, float, NPTS);
-	  REALLOCATE (dmvec[0].elements, float, NPTS);
+	  REALLOCATE (tvec[0].elements.Flt, opihi_flt, NPTS);
+	  REALLOCATE (mvec[0].elements.Flt, opihi_flt, NPTS);
+	  REALLOCATE (dmvec[0].elements.Flt, opihi_flt, NPTS);
 	}
       }      
     }
   }
-  fsortthree (tvec[0].elements, mvec[0].elements, dmvec[0].elements, N);
+  dsortthree (tvec[0].elements.Flt, mvec[0].elements.Flt, dmvec[0].elements.Flt, N);
   tvec[0].Nelements = mvec[0].Nelements = dmvec[0].Nelements = N;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mextract.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mextract.c	(revision 20839)
@@ -139,5 +139,5 @@
 	if (!dbBooleanCond (stack, Nstack, values)) continue;
 	for (n = 0; n < Nreturn; n++) {
-	  vec[n][0].elements[Npts] = values[n];
+	  vec[n][0].elements.Flt[Npts] = values[n];
 	  // fprintf (stderr, "keep : field: %s, value: %f\n", fields[n].name, values[n]);
 	}
@@ -146,5 +146,5 @@
 	  NPTS += 2000;
 	  for (n = 0; n < Nreturn; n++) {
-	    REALLOCATE (vec[n][0].elements, float, NPTS);
+	    REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS);
 	  }
 	}
@@ -162,5 +162,5 @@
   for (n = 0; n < Nreturn; n++) {
     vec[n][0].Nelements = Npts;
-    REALLOCATE (vec[n][0].elements, float, MAX(1,Npts));
+    REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts));
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mmextract.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mmextract.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/mmextract.c	(revision 20839)
@@ -232,6 +232,6 @@
 	for (n2 = 0; n2 < Nt2; n2++) {
 	  for (n = 0; n < Nreturn_base; n++) {
-	    vec[2*n+0][0].elements[Npts] = table1[n][n1];
-	    vec[2*n+1][0].elements[Npts] = table2[n][n2];
+	    vec[2*n+0][0].elements.Flt[Npts] = table1[n][n1];
+	    vec[2*n+1][0].elements.Flt[Npts] = table2[n][n2];
 	  }
 	  Npts++;
@@ -239,5 +239,5 @@
 	    NPTS += 2000;
 	    for (n = 0; n < Nreturn; n++) {
-	      REALLOCATE (vec[n][0].elements, float, NPTS);
+	      REALLOCATE (vec[n][0].elements.Flt, opihi_flt, NPTS);
 	    }
 	  }
@@ -257,5 +257,5 @@
   for (n = 0; n < Nreturn; n++) {
     vec[n][0].Nelements = Npts;
-    REALLOCATE (vec[n][0].elements, float, MAX(1,Npts));
+    REALLOCATE (vec[n][0].elements.Flt, opihi_flt, MAX(1,Npts));
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/paverage.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/paverage.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/paverage.c	(revision 20839)
@@ -10,5 +10,5 @@
   double Radius, Rmin, Rmax, R, D;
   unsigned IDclip, IDchoice, LimExclude;
-  float *Xvec, *Yvec, *Zvec;
+  opihi_flt *Xvec, *Yvec, *Zvec;
   void *Signal;
 
@@ -96,7 +96,7 @@
   Npts = 0;
   NPTS = 1000;
-  ALLOCATE (Xvec, float, NPTS);
-  ALLOCATE (Yvec, float, NPTS);
-  ALLOCATE (Zvec, float, NPTS);
+  ALLOCATE (Xvec, opihi_flt, NPTS);
+  ALLOCATE (Yvec, opihi_flt, NPTS);
+  ALLOCATE (Zvec, opihi_flt, NPTS);
 
   // prepare to handle interrupt signals
@@ -133,5 +133,5 @@
       R = average[i].R;
       D = average[i].D;
-      status = fRD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
+      status = RD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
       if (!status) continue;
       Npts ++;
@@ -139,7 +139,7 @@
       if (Npts == NPTS - 1) {
 	  NPTS += 1000;
-	  REALLOCATE (Xvec, float, NPTS);
-	  REALLOCATE (Yvec, float, NPTS);
-	  REALLOCATE (Zvec, float, NPTS);
+	  REALLOCATE (Xvec, opihi_flt, NPTS);
+	  REALLOCATE (Yvec, opihi_flt, NPTS);
+	  REALLOCATE (Zvec, opihi_flt, NPTS);
       }
       if ((Npts > NCHUNK) || (Nloaded >= 25)) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/pmeasure.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/pmeasure.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/pmeasure.c	(revision 20839)
@@ -14,5 +14,5 @@
   unsigned photFlagChoice, photFlagClip;
   int PhotcodeClip;
-  float *Xvec, *Yvec, *Zvec;
+  opihi_flt *Xvec, *Yvec, *Zvec;
   time_t tzero, tend;
   void *Signal;
@@ -169,7 +169,7 @@
   Npts = 0;
   NPTS = 1000;
-  ALLOCATE (Xvec, float, NPTS);
-  ALLOCATE (Yvec, float, NPTS);
-  ALLOCATE (Zvec, float, NPTS);
+  ALLOCATE (Xvec, opihi_flt, NPTS);
+  ALLOCATE (Yvec, opihi_flt, NPTS);
+  ALLOCATE (Zvec, opihi_flt, NPTS);
 
   // prepare to handle interrupt signals
@@ -218,5 +218,5 @@
 	  free (date);
 	}
-	status = fRD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
+	status = RD_to_XY (&Xvec[Npts], &Yvec[Npts], R, D, &graphmode.coords);
 	if (!status) continue;
 	Npts ++;
@@ -224,7 +224,7 @@
 	if (Npts == NPTS - 1) {
 	    NPTS += 1000;
-	    REALLOCATE (Xvec, float, NPTS);
-	    REALLOCATE (Yvec, float, NPTS);
-	    REALLOCATE (Zvec, float, NPTS);
+	    REALLOCATE (Xvec, opihi_flt, NPTS);
+	    REALLOCATE (Yvec, opihi_flt, NPTS);
+	    REALLOCATE (Zvec, opihi_flt, NPTS);
 	}
 	if ((Npts > NCHUNK) || (Nloaded >= 25)) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/procks.c	(revision 20839)
@@ -96,6 +96,6 @@
   /* data has been loaded, get ready to plot it */
   Yvec.Nelements = Xvec.Nelements = 3*Nrocks;
-  ALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  ALLOCATE (Yvec.elements, float, Yvec.Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
   
   /* project stars to screen display coords */
@@ -106,5 +106,5 @@
       while (rocks[i].ra[j] < Rmin) rocks[i].ra[j] += 360.0;
       while (rocks[i].ra[j] > Rmax) rocks[i].ra[j] -= 360.0;
-      fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], rocks[i].ra[j], rocks[i].dec[j], &graphmode.coords);
+      RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], rocks[i].ra[j], rocks[i].dec[j], &graphmode.coords);
       N ++;
     }
@@ -114,10 +114,10 @@
   graphmode.style = 2; /* set style to points */
   graphmode.etype = 0; /* no errorbars */
-  PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
+  PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
 
   /* now plot vectors between two extrema */
   Yvec.Nelements = Xvec.Nelements = 2*Nrocks;
-  REALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  REALLOCATE (Yvec.elements, float, Yvec.Nelements);
+  REALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  REALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
   
   /* project stars to screen display coords */
@@ -136,7 +136,7 @@
     while (rocks[i].ra[N1] < Rmin) rocks[i].ra[N1] += 360.0;
     while (rocks[i].ra[N1] > Rmax) rocks[i].ra[N1] -= 360.0;
-    fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], rocks[i].ra[N0], rocks[i].dec[N0], &graphmode.coords);
+    RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], rocks[i].ra[N0], rocks[i].dec[N0], &graphmode.coords);
     N ++;
-    fRD_to_XY (&Xvec.elements[N], &Yvec.elements[N], rocks[i].ra[N1], rocks[i].dec[N1], &graphmode.coords);
+    RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], rocks[i].ra[N1], rocks[i].dec[N1], &graphmode.coords);
     N ++;
   }
@@ -147,8 +147,8 @@
   graphmode.etype = 0; /* no errorbars */
 
-  PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
+  PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
 
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   return (TRUE);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/showtile.c	(revision 20839)
@@ -22,6 +22,6 @@
   N = 0;
   NPTS = 200;
-  ALLOCATE (Xvec.elements, float, NPTS);
-  ALLOCATE (Yvec.elements, float, NPTS);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
 
   /* starting position */
@@ -49,8 +49,8 @@
       for (i = 0; i < 4; i++) {
 	fXY_to_RD (&R, &D, dr[i], dd[i], &coords);
-	status |= fRD_to_XY (&Xvec.elements[N+2*i], &Yvec.elements[N+2*i], R, D, &graphmode.coords);
+	status |= RD_to_XY (&Xvec.elements.Flt[N+2*i], &Yvec.elements.Flt[N+2*i], R, D, &graphmode.coords);
 	if (i > 0) {
-	  Xvec.elements[N+2*i - 1] = Xvec.elements[N+2*i];
-	  Yvec.elements[N+2*i - 1] = Yvec.elements[N+2*i];
+	  Xvec.elements.Flt[N+2*i - 1] = Xvec.elements.Flt[N+2*i];
+	  Yvec.elements.Flt[N+2*i - 1] = Yvec.elements.Flt[N+2*i];
 	}
 	if (i == 1) {
@@ -59,14 +59,14 @@
 	}
       }
-      Xvec.elements[N+7] = Xvec.elements[N];
-      Yvec.elements[N+7] = Yvec.elements[N];
+      Xvec.elements.Flt[N+7] = Xvec.elements.Flt[N];
+      Yvec.elements.Flt[N+7] = Yvec.elements.Flt[N];
 
       /* check if any corner is in plotting region */
       InPic = FALSE;
       for (i = 0; i < 8; i+=2) {
-	if ((Xvec.elements[N+i] >= graphmode.xmin) && 
-	    (Xvec.elements[N+i] <= graphmode.xmax) && 
-	    (Yvec.elements[N+i] >= graphmode.ymin) && 
-	    (Yvec.elements[N+i] <= graphmode.ymax))
+	if ((Xvec.elements.Flt[N+i] >= graphmode.xmin) && 
+	    (Xvec.elements.Flt[N+i] <= graphmode.xmax) && 
+	    (Yvec.elements.Flt[N+i] >= graphmode.ymin) && 
+	    (Yvec.elements.Flt[N+i] <= graphmode.ymax))
 	  InPic = TRUE;
       }
@@ -75,6 +75,6 @@
       if (N > NPTS - 1) {  /* this is OK because NPTS is made always a multiple of 8 */
 	NPTS += 200;
-	REALLOCATE (Xvec.elements, float, NPTS);
-	REALLOCATE (Yvec.elements, float, NPTS);
+	REALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+	REALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
       }
     }
@@ -86,9 +86,9 @@
     graphmode.ptype = 100; /* connect pairs of points */
     graphmode.etype = 0;
-    PlotVectorPair (kapa, N, Xvec.elements, Yvec.elements, &graphmode);
+    PlotVectorPair (kapa, N, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   }
 
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   return (TRUE);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/simage.c	(revision 20839)
@@ -95,7 +95,7 @@
   Yvec.Nelements = Nstars;
   Zvec.Nelements = Nstars;
-  ALLOCATE (Xvec.elements, float, Xvec.Nelements);
-  ALLOCATE (Yvec.elements, float, Yvec.Nelements);
-  ALLOCATE (Zvec.elements, float, Zvec.Nelements);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, Xvec.Nelements);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, Yvec.Nelements);
+  ALLOCATE (Zvec.elements.Flt, opihi_flt, Zvec.Nelements);
   ALLOCATE (buffer, char, (BLOCK*BYTES_STAR));
 
@@ -107,7 +107,7 @@
     if (nbytes != BLOCK*BYTES_STAR) {
       gprint (GP_ERR, "failed to read in stars (1)\n");
-      free (Xvec.elements);
-      free (Yvec.elements);
-      free (Zvec.elements);
+      free (Xvec.elements.Flt);
+      free (Yvec.elements.Flt);
+      free (Zvec.elements.Flt);
       free (buffer);
       return (FALSE);
@@ -118,6 +118,6 @@
       dparse (&M,  3, &buffer[j*BYTES_STAR]);
       XY_to_RD (&R, &D, X, Y, &coords);
-      fRD_to_XY (&Xvec.elements[nstars], &Yvec.elements[nstars], R, D, &graphmode.coords);
-      Zvec.elements[nstars] = MIN (1.0, MAX (0.01, (M - zero) / range));
+      RD_to_XY (&Xvec.elements.Flt[nstars], &Yvec.elements.Flt[nstars], R, D, &graphmode.coords);
+      Zvec.elements.Flt[nstars] = MIN (1.0, MAX (0.01, (M - zero) / range));
     }
   }
@@ -126,7 +126,7 @@
   if (nbytes != (Nbytes % (BLOCK*BYTES_STAR))) {
     gprint (GP_ERR, "ERROR: failed to read in stars (2)\n");
-    free (Xvec.elements);
-    free (Yvec.elements);
-    free (Zvec.elements);
+    free (Xvec.elements.Flt);
+    free (Yvec.elements.Flt);
+    free (Zvec.elements.Flt);
     free (buffer);
     return (FALSE);
@@ -137,13 +137,13 @@
     dparse (&M,  3, &buffer[j*BYTES_STAR]);
     XY_to_RD (&R, &D, X, Y, &coords);
-    fRD_to_XY (&Xvec.elements[nstars], &Yvec.elements[nstars], R, D, &graphmode.coords);
-    Zvec.elements[nstars] = MIN (1.0, MAX (0.01, (M - zero) / range));
+    RD_to_XY (&Xvec.elements.Flt[nstars], &Yvec.elements.Flt[nstars], R, D, &graphmode.coords);
+    Zvec.elements.Flt[nstars] = MIN (1.0, MAX (0.01, (M - zero) / range));
   }
   
   if (nstars != Nstars) {
     gprint (GP_ERR, "ERROR: failed to read in all stars (%d of %d)\n", nstars, Nstars);
-    free (Xvec.elements);
-    free (Yvec.elements);
-    free (Zvec.elements);
+    free (Xvec.elements.Flt);
+    free (Yvec.elements.Flt);
+    free (Zvec.elements.Flt);
     free (buffer);
     return (FALSE);
@@ -155,9 +155,9 @@
   Npts = Xvec.Nelements;
 
-  PlotVectorTriplet (kapa, Npts, Xvec.elements, Yvec.elements, Zvec.elements, &graphmode);
+  PlotVectorTriplet (kapa, Npts, Xvec.elements.Flt, Yvec.elements.Flt, Zvec.elements.Flt, &graphmode);
 
-  free (Xvec.elements);
-  free (Yvec.elements);
-  free (Zvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
+  free (Zvec.elements.Flt);
   free (buffer);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/dvo/skycat.c	(revision 20839)
@@ -54,6 +54,6 @@
 
   NPTS = 200;
-  ALLOCATE (Xvec.elements, float, NPTS);
-  ALLOCATE (Yvec.elements, float, NPTS);
+  ALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+  ALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
   Npts = 0;
    
@@ -76,19 +76,19 @@
       RD_to_XYpic (&X[3], &Y[3], regions[i][0].Rmax, regions[i][0].Dmin, &graphmode.coords, Rmin, Rmax, Rmid, &leftside);
 
-      Xvec.elements[Npts] = X[0];
-      Yvec.elements[Npts] = Y[0];
+      Xvec.elements.Flt[Npts] = X[0];
+      Yvec.elements.Flt[Npts] = Y[0];
       for (j = 1; j < 4; j++) {
-	Xvec.elements[Npts + j*2 - 0] = X[j];
-	Yvec.elements[Npts + j*2 - 0] = Y[j];
-	Xvec.elements[Npts + j*2 - 1] = X[j];
-	Yvec.elements[Npts + j*2 - 1] = Y[j];
+	Xvec.elements.Flt[Npts + j*2 - 0] = X[j];
+	Yvec.elements.Flt[Npts + j*2 - 0] = Y[j];
+	Xvec.elements.Flt[Npts + j*2 - 1] = X[j];
+	Yvec.elements.Flt[Npts + j*2 - 1] = Y[j];
       }
-      Xvec.elements[Npts+7] = Xvec.elements[Npts];
-      Yvec.elements[Npts+7] = Yvec.elements[Npts];
+      Xvec.elements.Flt[Npts+7] = Xvec.elements.Flt[Npts];
+      Yvec.elements.Flt[Npts+7] = Yvec.elements.Flt[Npts];
       Npts += 8;
       if (Npts > NPTS - 1) {  /* this is OK because NPTS is made always a multiple of 8 */
 	NPTS += 200;
-	REALLOCATE (Xvec.elements, float, NPTS);
-	REALLOCATE (Yvec.elements, float, NPTS);
+	REALLOCATE (Xvec.elements.Flt, opihi_flt, NPTS);
+	REALLOCATE (Yvec.elements.Flt, opihi_flt, NPTS);
       }
     }
@@ -101,9 +101,9 @@
     graphmode.ptype = 100; /* connect pairs of points */
     graphmode.etype = 0;
-    PlotVectorPair (kapa, Npts, Xvec.elements, Yvec.elements, &graphmode);
+    PlotVectorPair (kapa, Npts, Xvec.elements.Flt, Yvec.elements.Flt, &graphmode);
   }
 
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Flt);
+  free (Yvec.elements.Flt);
   free (regions);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/data.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/data.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/data.h	(revision 20839)
@@ -78,4 +78,6 @@
 void fft1D (float *dataRe, float *dataIm, int N, int Nbit, int forward);
 int fftND (float *dataRe, float *dataIm, int Ndim, int *Nsize, int forward);
+void dfft1D (double *dataRe, double *dataIm, int N, int Nbit, int forward);
+int dfftND (double *dataRe, double *dataIm, int Ndim, int *Nsize, int forward);
 int IsBinary (int N, int *Nbit);
 
@@ -85,43 +87,43 @@
 
 /* in svdcmp.c */
-int svdcmp (float *a, float *w, float *v, int Nx, int Ny);
+int svdcmp (float *a, opihi_flt *w, float *v, int Nx, int Ny);
 
 /* mrqmin.c */
-float mrqcof (float *x, float *y, float *dy, int Npts, 
-	      float *par, int Npar, float **ta, float **tb, 
-	      float (funcs)(float, float *, int, float *));
+opihi_flt mrqcof (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, opihi_flt **ta, opihi_flt **tb, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *));
 
-float mrqmin (float *x, float *y, float *dy, int Npts, 
-	      float *par, int Npar, 
-	      float (funcs)(float, float *, int, float *), int VERBOSE);
+opihi_flt mrqmin (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE);
 
-float mrqinit (float *x, float *y, float *dy, int Npts, 
-	       float *par, int Npar, 
-	       float (funcs)(float, float *, int, float *), int VERBOSE);
+opihi_flt mrqinit (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	       opihi_flt *par, int Npar, 
+	       opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE);
 
-float **mrqcovar (int Npar);
+opihi_flt **mrqcovar (int Npar);
 
 void mrqfree (int Npar);
 
 /* mrq2dmin.c */
-float mrq2dcof (float *x, float *t, float *y, float *dy, int Npts, 
-		float *par, int Npar, float **ta, float **tb, 
-		float (funcs)(float, float, float *, int, float *));
+opihi_flt mrq2dcof (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+		opihi_flt *par, int Npar, opihi_flt **ta, opihi_flt **tb, 
+		opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *));
 
-float mrq2dmin (float *x, float *t, float *y, float *dy, int Npts, 
-		float *par, int Npar, 
-		float (funcs)(float, float, float *, int, float *), int VERBOSE);
+opihi_flt mrq2dmin (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+		opihi_flt *par, int Npar, 
+		opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE);
 
-float mrq2dinit (float *x, float *t, float *y, float *dy, int Npts, 
-		 float *par, int Npar, 
-		 float (funcs)(float, float, float *, int, float *), int VERBOSE);
+opihi_flt mrq2dinit (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+		 opihi_flt *par, int Npar, 
+		 opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE);
 
-float mrq2dchi (float *x, float *t, float *y, float *dy, int Npts, 
-		float *par, int Npar, 
-		float (funcs)(float, float, float *, int, float *));
+opihi_flt mrq2dchi (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+		opihi_flt *par, int Npar, 
+		opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *));
 
-int mrq2dlimits (float *pmin, float *pmax, int Npar);
+int mrq2dlimits (opihi_flt *pmin, opihi_flt *pmax, int Npar);
 
-float **mrq2dcovar (int Npar);
+opihi_flt **mrq2dcovar (int Npar);
 
 void mrq2dfree (int Npar);
@@ -135,5 +137,5 @@
 double get_aperture_stats (Matrix *matrix, int X, int Y, int Npix, int Nborder, double max);
 int set_rough_radii (double Ra, double Ri, double Ro);
-int get_rough_star (float *data, int Nx, int Ny, int x, int y, float *xc, float *yc, float *sx, float *sy, float *sxy, float *zs, float *zp, float *sk);
+int get_rough_star (float *data, int Nx, int Ny, int x, int y, opihi_flt *xc, opihi_flt *yc, opihi_flt *sx, opihi_flt *sy, opihi_flt *sxy, opihi_flt *zs, opihi_flt *zp, opihi_flt *sk);
 
 /* precess.c */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/display.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/display.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/display.h	(revision 20839)
@@ -1,4 +1,5 @@
 # include "external.h"
 # include "kapa.h"
+# include "dvomath.h"
 
 # ifndef DISPLAY_H
@@ -6,6 +7,8 @@
 
 /*** kapa graph functions ***/
-int           PlotVectorPair        PROTO((int kapa, int Npts, float *xValues, float *yValues, Graphdata *graphmode));
-int           PlotVectorTriplet     PROTO((int kapa, int Npts, float *xValues, float *yValues, float *zValues, Graphdata *graphmode));
+int           PlotVectorSingle      PROTO((int kapa, int Npts, opihi_flt *values, char *mode));
+int           PlotVectorPair        PROTO((int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, Graphdata *graphmode));
+int           PlotVectorPairErrors  PROTO((int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, opihi_flt *dyValues, Graphdata *graphmode));
+int           PlotVectorTriplet     PROTO((int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, opihi_flt *zValues, Graphdata *graphmode));
 int           GetGraphData          PROTO((Graphdata *data, int *kapa, char *name));
 int           GetGraph              PROTO((Graphdata *data, int *kapa, char *name));
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/dvomath.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/dvomath.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/dvomath.h	(revision 20839)
@@ -4,11 +4,13 @@
 # define DVOMATH_H
 
+# define OPIHI_NAME_SIZE 1024
+
 # define NCHARS 256
-# define opihi_float float
+# define opihi_flt double
 # define opihi_int unsigned int
 
 enum {ANYVECTOR, NEWVECTOR, OLDVECTOR};
 enum {ANYBUFFER, NEWBUFFER, OLDBUFFER};
-enum {OPIHI_FLOAT, OPIHI_INT};
+enum {OPIHI_FLT, OPIHI_INT};
 
 typedef struct {			/* representation of a variable (0-D) */
@@ -18,14 +20,17 @@
 
 typedef struct {			/* representation of a vector (1-D) */
-  char name[1024];
+  char name[OPIHI_NAME_SIZE];
   char type;
-  float *elements;
-  unsigned int *elementsInt;
+  union {
+    void      *Ptr;
+    opihi_flt *Flt;
+    opihi_int *Int;
+  } elements;
   int Nelements;
 } Vector;
 
 typedef struct {			/* representation of buffer (image) */
-  char name[1024];
-  char file[1024];
+  char name[OPIHI_NAME_SIZE];
+  char file[OPIHI_NAME_SIZE];
   Header header;
   Matrix matrix;
@@ -37,8 +42,8 @@
   char   *name;
   char    type;
-  float  *ptr;
   Buffer *buffer;
   Vector *vector;
-  float   Float;
+  opihi_flt FltValue;
+  opihi_int IntValue;
 } StackVar;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/dvoshell.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/dvoshell.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/dvoshell.h	(revision 20839)
@@ -225,4 +225,5 @@
 // dvo DB field functions
 dbField     *dbCmdlineFields        PROTO((int argc, char **argv, int table, int *last, int *nfields));
+int          dbCmdlineConditions    PROTO((int argc, char **argv, int first, int *nextField));
 dbStack     *dbRPN                  PROTO((int argc, char **argv, int *nstack));
 int          dbCheckStack           PROTO((dbStack *stack, int Nstack, int table, dbField **inFields, int *Nfields));
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/imfit.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/imfit.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/imfit.h	(revision 20839)
@@ -3,9 +3,9 @@
 int Npar;
 int Nfpar;
-float *par;
-float *fpar;
-float *sky;
+opihi_flt *par;
+opihi_flt *fpar;
+opihi_flt *sky;
 
-float (*fitfunc)(float, float, float *, int, float *);
+opihi_flt (*fitfunc)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *);
 void (*imfit_cleanup)();
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/include/pantasks.h
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/include/pantasks.h	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/include/pantasks.h	(revision 20839)
@@ -245,4 +245,8 @@
 int PrintControllerOutput ();
 
+int AddHost (char *hostname, int max_threads);
+int DeleteHost (char *hostname);
+
+int FlushControllerOutput ();
 int KillControllerJob (Job *job);
 int CheckControllerStatus ();
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/PlotVectors.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/PlotVectors.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/PlotVectors.c	(revision 20839)
@@ -1,20 +1,98 @@
 # include "display.h"
 
-int PlotVectorPair (int kapa, int Npts, float *xValues, float *yValues, Graphdata *graphmode) {
+int PlotVectorSingle (int kapa, int Npts, opihi_flt *values, char *mode) {
 
-  KapaPrepPlot (kapa, Npts, graphmode);
-  KapaPlotVector (kapa, Npts, xValues, "x");
-  KapaPlotVector (kapa, Npts, yValues, "y");
+  int i;
+  float *temp;
+  ALLOCATE (temp, float, Npts);
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = values[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, mode);
+
+  free (temp);
 
   return (TRUE);
 }
 
-int PlotVectorTriplet (int kapa, int Npts, float *xValues, float *yValues, float *zValues, Graphdata *graphmode) {
+int PlotVectorPair (int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, Graphdata *graphmode) {
 
-  KapaPrepPlot   (kapa, Npts, graphmode);
-  KapaPlotVector (kapa, Npts, xValues, "x");
-  KapaPlotVector (kapa, Npts, yValues, "y");
-  KapaPlotVector (kapa, Npts, zValues, "z");
+  int i;
+  float *temp;
+  ALLOCATE (temp, float, Npts);
+
+  KapaPrepPlot (kapa, Npts, graphmode);
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = xValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "x");
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = yValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "y");
+
+  free (temp);
 
   return (TRUE);
 }
+
+int PlotVectorTriplet (int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, opihi_flt *zValues, Graphdata *graphmode) {
+
+  int i;
+  float *temp;
+  ALLOCATE (temp, float, Npts);
+
+  KapaPrepPlot   (kapa, Npts, graphmode);
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = xValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "x");
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = yValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "y");
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = zValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "z");
+
+  free (temp);
+
+  return (TRUE);
+}
+
+int PlotVectorPairErrors (int kapa, int Npts, opihi_flt *xValues, opihi_flt *yValues, opihi_flt *dyValues, Graphdata *graphmode) {
+
+  int i;
+  float *temp;
+  ALLOCATE (temp, float, Npts);
+
+  KapaPrepPlot (kapa, Npts, graphmode);
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = xValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "x");
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = yValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "y");
+
+  for (i = 0; i < Npts; i++) {
+    temp[i] = dyValues[i];
+  }
+  KapaPlotVector (kapa, Npts, temp, "dym");
+  KapaPlotVector (kapa, Npts, temp, "dyp");
+
+  free (temp);
+
+  return (TRUE);
+}
+
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/fft.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/fft.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/fft.c	(revision 20839)
@@ -133,4 +133,136 @@
 }
 
+// fft based on code by Douglas L. Jones (see note at EOF). modified for Ohana C style
+void dfft1D (double *x, double *y, int n, int Nbit, int forward) {
+
+  int i,j,k,n1,n2;
+  double c,s,e,a,t1,t2;        
+  double factor;
+         
+  // bit-reverse
+  j = 0; 
+  n2 = n/2;
+  for (i = 1; i < n - 1; i++) {
+    n1 = n2;
+    while ( j >= n1 ) {
+      j -= n1;
+      n1 /= 2;
+    }
+    j += n1;
+               
+    if (i < j) {
+      t1 = x[i];
+      x[i] = x[j];
+      x[j] = t1;
+      t1 = y[i];
+      y[i] = y[j];
+      y[j] = t1;
+    }
+  }
+                                          
+  n1 = 0; /* FFT */
+  n2 = 1;
+                                             
+  if (forward) {
+    factor = +2.0*M_PI;
+  } else {
+    factor = -2.0*M_PI;
+  }
+
+  for (i=0; i < Nbit; i++) {
+    n1 = n2;
+    n2 = n2 + n2;
+    e = factor/n2;
+    a = 0.0;
+                                             
+    for (j=0; j < n1; j++) {
+      c = cos(a);
+      s = sin(a);
+      a = a + e;
+                                            
+      for (k=j; k < n; k=k+n2) {
+	t1 = c*x[k+n1] - s*y[k+n1];
+	t2 = s*x[k+n1] + c*y[k+n1];
+	x[k+n1] = x[k] - t1;
+	y[k+n1] = y[k] - t2;
+	x[k] = x[k] + t1;
+	y[k] = y[k] + t2;
+      }
+    }
+  }
+                                      
+  // re-normalize
+  for (i = 0; i < n; i++) {
+    x[i] /= n;
+    y[i] /= n;
+  }
+
+  return;
+}                          
+
+// This implementation uses the 1-D fft above for each of the vectors in each dimension.
+// This requires 2(Nx*Ny*...) mem copies, but the fft operations are likely to happen in
+// cache.
+int dfftND (double *x, double *y, int Ndim, int *Nsize, int forward) {
+
+  int i, nIndex, minor, major, iDim;
+  int step, Nmajor, Nminor, Nmax, Ntotal;
+  int *Nbit;
+  double *tmpX, *tmpY;
+
+  ALLOCATE (Nbit, int, Ndim);
+
+  // find the longest axis and allocate storage for that length
+  Nmax = 0;
+  Ntotal = 1;
+  for (i = 0; i < Ndim; i++) {
+    Nmax = MAX(Nmax, Nsize[i]);
+    Ntotal *= Nsize[i];
+    if (!IsBinary (Nsize[i], &Nbit[i])) {
+      free (Nbit);
+      return (FALSE);
+    }
+  }
+  ALLOCATE (tmpX, double, Nmax);
+  ALLOCATE (tmpY, double, Nmax);
+  
+  step = 1;
+  Nminor = 1;
+  Nmajor = Ntotal;
+  for (iDim = 0; iDim < Ndim; iDim++) {
+    step *= Nsize[iDim];
+    Nmajor /= Nsize[iDim];
+
+    // we perform the FFT along all other dimensions 
+    for (major = 0; major < Nmajor; major++) {
+      for (minor = 0; minor < Nminor; minor++) {
+	// nIndex = minor + i*Nminor + major*step;
+	// extract the data values to the temp vector
+	nIndex = minor + major*step;
+	for (i = 0; i < Nsize[iDim]; i++) {
+	  tmpX[i] = x[nIndex];
+	  tmpY[i] = y[nIndex];
+	  nIndex += Nminor;
+	}
+
+	dfft1D (tmpX, tmpY, Nsize[iDim], Nbit[iDim], forward);
+
+	// replace the result vectors
+	nIndex = minor + major*step;
+	for (i = 0; i < Nsize[iDim]; i++) {
+	  x[nIndex] = tmpX[i];
+	  y[nIndex] = tmpY[i];
+	  nIndex += Nminor;
+	}
+      }
+    }
+    Nminor *= Nsize[iDim];
+  }
+  free (Nbit);
+  free (tmpX);
+  free (tmpY);
+  return (TRUE);
+}
+
 // check that a number is binary (2^Nbit).  returns int(log_2(N)) in Nbit
 int IsBinary (int N, int *Nbit) {
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/graphtools.c	(revision 20839)
@@ -1,4 +1,5 @@
 # include "data.h"
 
+// XXX need to select the active vector for the range analysis
 void SetLimits (Vector *xvec, Vector *yvec, Graphdata *graphmode) {
 
@@ -7,9 +8,9 @@
 
   if (xvec != NULL) {
-    maxX = minX = xvec[0].elements[0];
+    maxX = minX = xvec[0].elements.Flt[0];
     for (i = 1; i < xvec[0].Nelements; i++) {
-      if (!finite(xvec[0].elements[i])) continue;
-      maxX = MAX (maxX, xvec[0].elements[i]);
-      minX = MIN (minX, xvec[0].elements[i]);
+      if (!finite(xvec[0].elements.Flt[i])) continue;
+      maxX = MAX (maxX, xvec[0].elements.Flt[i]);
+      minX = MIN (minX, xvec[0].elements.Flt[i]);
     }
     range = maxX - minX;
@@ -21,9 +22,9 @@
 
   if (yvec != NULL) {
-    maxY = minY = yvec[0].elements[0];
+    maxY = minY = yvec[0].elements.Flt[0];
     for (i = 1; i < yvec[0].Nelements; i++) {
-      if (!finite(yvec[0].elements[i])) continue;
-      maxY = MAX (maxY, yvec[0].elements[i]);
-      minY = MIN (minY, yvec[0].elements[i]);
+      if (!finite(yvec[0].elements.Flt[i])) continue;
+      maxY = MAX (maxY, yvec[0].elements.Flt[i]);
+      minY = MIN (minY, yvec[0].elements.Flt[i]);
     }
     range = maxY - minY;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrq2dmin.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 20839)
@@ -9,18 +9,18 @@
 # define VERY_VERBOSE 0
 
-static float **alpha, **talpha;
-static float **beta, **tbeta;
-static float *partry, *dyda;
-static float ochisq, lambda;
-
-static float *parmin = NULL;
-static float *parmax = NULL;
-
-float mrq2dcof (float *x, float *t, float *y, float *dy, int Npts, 
-	      float *par, int Npar, float **ta, float **tb, 
-	      float (funcs)(float, float, float *, int, float *)) {
+static opihi_flt **alpha, **talpha;
+static opihi_flt **beta, **tbeta;
+static opihi_flt *partry, *dyda;
+static opihi_flt ochisq, lambda;
+
+static opihi_flt *parmin = NULL;
+static opihi_flt *parmax = NULL;
+
+opihi_flt mrq2dcof (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, opihi_flt **ta, opihi_flt **tb, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *)) {
 
   int k, j, i;
-  float ydiff, wt, chisq;
+  opihi_flt ydiff, wt, chisq;
 
   for (j = 0; j < Npar; j++) {
@@ -60,10 +60,10 @@
 }
 
-float mrq2dchi (float *x, float *t, float *y, float *dy, int Npts, 
-		float *par, int Npar, 
-		float (funcs)(float, float, float *, int, float *)) {
-
-  int i;
-  float ydiff, chisq;
+opihi_flt mrq2dchi (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+		opihi_flt *par, int Npar, 
+		opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *)) {
+
+  int i;
+  opihi_flt ydiff, chisq;
 
   chisq = 0.0;
@@ -75,10 +75,10 @@
 }
 
-float mrq2dmin (float *x, float *t, float *y, float *dy, int Npts, 
-	      float *par, int Npar, 
-	      float (funcs)(float, float, float *, int, float *), int VERBOSE) {
+opihi_flt mrq2dmin (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE) {
 
   int j, k;
-  float chisq;
+  opihi_flt chisq;
 
   /* set up test matrixes for this run */
@@ -90,5 +90,5 @@
 
   /* keep this test in here? */
-  if (!fgaussjordan (talpha, tbeta, Npar, 1)) {
+  if (!dgaussjordan (talpha, tbeta, Npar, 1)) {
     lambda *= 10.0;
     return (ochisq);
@@ -131,10 +131,10 @@
 }
 
-int mrq2dlimits (float *pmin, float *pmax, int Npar) {
-
-  int i;
-
-  ALLOCATE (parmin, float, Npar);
-  ALLOCATE (parmax, float, Npar);
+int mrq2dlimits (opihi_flt *pmin, opihi_flt *pmax, int Npar) {
+
+  int i;
+
+  ALLOCATE (parmin, opihi_flt, Npar);
+  ALLOCATE (parmax, opihi_flt, Npar);
   for (i = 0; i < Npar; i++) {
     parmin[i] = pmin[i];
@@ -144,21 +144,21 @@
 }
 
-float mrq2dinit (float *x, float *t, float *y, float *dy, int Npts, 
-	      float *par, int Npar, 
-	      float (funcs)(float, float, float *, int, float *), int VERBOSE) {
-
-  int i;
-
-  ALLOCATE (dyda, float, Npar);
-  ALLOCATE (partry, float, Npar);
-  ALLOCATE (alpha, float *, Npar);
-  ALLOCATE (beta, float *, Npar);
-  ALLOCATE (talpha, float *, Npar);
-  ALLOCATE (tbeta, float *, Npar);
+opihi_flt mrq2dinit (opihi_flt *x, opihi_flt *t, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE) {
+
+  int i;
+
+  ALLOCATE (dyda, opihi_flt, Npar);
+  ALLOCATE (partry, opihi_flt, Npar);
+  ALLOCATE (alpha, opihi_flt *, Npar);
+  ALLOCATE (beta, opihi_flt *, Npar);
+  ALLOCATE (talpha, opihi_flt *, Npar);
+  ALLOCATE (tbeta, opihi_flt *, Npar);
   for (i = 0; i < Npar; i++) {
-    ALLOCATE (alpha[i], float, Npar);
-    ALLOCATE (beta[i], float, Npar);
-    ALLOCATE (talpha[i], float, Npar);
-    ALLOCATE (tbeta[i], float, Npar);
+    ALLOCATE (alpha[i], opihi_flt, Npar);
+    ALLOCATE (beta[i], opihi_flt, Npar);
+    ALLOCATE (talpha[i], opihi_flt, Npar);
+    ALLOCATE (tbeta[i], opihi_flt, Npar);
   }
 
@@ -181,7 +181,7 @@
 
 /* don't invoke this in the middle of a run, only near the end */ 
-float **mrq2dcovar (int Npar) {
-
-  fgaussjordan (alpha, beta, Npar, 1);
+opihi_flt **mrq2dcovar (int Npar) {
+
+  dgaussjordan (alpha, beta, Npar, 1);
   return (alpha);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrqmin.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrqmin.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/mrqmin.c	(revision 20839)
@@ -7,15 +7,15 @@
 */
 
-static float **alpha, **talpha;
-static float **beta, **tbeta;
-static float *partry, *dyda;
-static float ochisq, lambda;
+static opihi_flt **alpha, **talpha;
+static opihi_flt **beta, **tbeta;
+static opihi_flt *partry, *dyda;
+static opihi_flt ochisq, lambda;
 
-float mrqcof (float *x, float *y, float *dy, int Npts, 
-	      float *par, int Npar, float **ta, float **tb, 
-	      float (funcs)(float, float *, int, float *)) {
+opihi_flt mrqcof (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, opihi_flt **ta, opihi_flt **tb, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *)) {
 
   int k, j, i;
-  float ydiff, wt, chisq;
+  opihi_flt ydiff, wt, chisq;
 
   for (j = 0; j < Npar; j++) {
@@ -45,11 +45,11 @@
 }
 
-float mrqmin (float *x, float *y, float *dy, int Npts, 
-	      float *par, int Npar, 
-	      float (funcs)(float, float *, int, float *), int VERBOSE) {
+opihi_flt mrqmin (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE) {
 
   int j, k;
-  float chisq;
-  float rho, dX, dL;
+  opihi_flt chisq;
+  opihi_flt rho, dX, dL;
 
   /* set up test matrixes for this run */
@@ -60,5 +60,5 @@
   }
 
-  fgaussjordan (talpha, tbeta, Npar, 1);
+  dgaussjordan (talpha, tbeta, Npar, 1);
 
   for (j = 0; j < Npar; j++) partry[j] = par[j] - tbeta[j][0];
@@ -102,21 +102,21 @@
 }
 
-float mrqinit (float *x, float *y, float *dy, int Npts, 
-	      float *par, int Npar, 
-	      float (funcs)(float, float *, int, float *), int VERBOSE) {
+opihi_flt mrqinit (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts, 
+	      opihi_flt *par, int Npar, 
+	      opihi_flt (funcs)(opihi_flt, opihi_flt *, int, opihi_flt *), int VERBOSE) {
 
   int i;
 
-  ALLOCATE (dyda, float, Npar);
-  ALLOCATE (partry, float, Npar);
-  ALLOCATE (alpha, float *, Npar);
-  ALLOCATE (beta, float *, Npar);
-  ALLOCATE (talpha, float *, Npar);
-  ALLOCATE (tbeta, float *, Npar);
+  ALLOCATE (dyda, opihi_flt, Npar);
+  ALLOCATE (partry, opihi_flt, Npar);
+  ALLOCATE (alpha, opihi_flt *, Npar);
+  ALLOCATE (beta, opihi_flt *, Npar);
+  ALLOCATE (talpha, opihi_flt *, Npar);
+  ALLOCATE (tbeta, opihi_flt *, Npar);
   for (i = 0; i < Npar; i++) {
-    ALLOCATE (alpha[i], float, Npar);
-    ALLOCATE (beta[i], float, Npar);
-    ALLOCATE (talpha[i], float, Npar);
-    ALLOCATE (tbeta[i], float, Npar);
+    ALLOCATE (alpha[i], opihi_flt, Npar);
+    ALLOCATE (beta[i], opihi_flt, Npar);
+    ALLOCATE (talpha[i], opihi_flt, Npar);
+    ALLOCATE (tbeta[i], opihi_flt, Npar);
   }
   
@@ -136,6 +136,6 @@
 
 /* don't invoke this in the middle of a run, only near the end */ 
-float **mrqcovar (int Npar) {
-  fgaussjordan (alpha, beta, Npar, 1);
+opihi_flt **mrqcovar (int Npar) {
+  dgaussjordan (alpha, beta, Npar, 1);
   return (alpha);
 } 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/starfuncs.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/starfuncs.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/starfuncs.c	(revision 20839)
@@ -119,7 +119,7 @@
 /* use a circular aperture */
 int get_rough_star (float *data, int Nx, int Ny, int x, int y,
-		    float *xc, float *yc, 
-		    float *sx, float *sy, float *sxy,
-		    float *zs, float *zp, float *sk) {
+		    opihi_flt *xc, opihi_flt *yc, 
+		    opihi_flt *sx, opihi_flt *sy, opihi_flt *sxy,
+		    opihi_flt *zs, opihi_flt *zp, opihi_flt *sk) {
 
   double Ra2, Ri2, Ro2, rad2;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/svdcmp.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/svdcmp.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.data/svdcmp.c	(revision 20839)
@@ -12,5 +12,5 @@
 
 /* n == Nx, m == Ny */
-int svdcmp (float *a, float *w, float *v, int Nx, int Ny) {
+int svdcmp (float *a, opihi_flt *w, float *v, int Nx, int Ny) {
 
   int flag, i, its, j, jj, k, l, nm, status;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 20839)
@@ -1,3 +1,5 @@
 # include "opihi.h"
+
+// NOTE: we refer to elements.Ptr if we do not care about the actual type
 
 static Vector **vectors;
@@ -18,9 +20,6 @@
 
   for (i = 0; i < Nvectors; i++) {
-    if (vectors[i][0].elements) {
-      free (vectors[i][0].elements);
-    }
-    if (vectors[i][0].elementsInt) {
-      free (vectors[i][0].elementsInt);
+    if (vectors[i][0].elements.Int) {
+      free (vectors[i][0].elements.Int);
     }
     free (vectors[i]);
@@ -34,9 +33,8 @@
   ALLOCATE (vec, Vector, 1);
 
-  vec[0].elementsInt = NULL;
-  ALLOCATE (vec[0].elements, opihi_float, 1);
-  vec[0].type = OPIHI_FLOAT;			  /* is a float unless specified otherwise */
-
-  bzero (vec[0].name, 1024);
+  vec[0].type = OPIHI_FLT;    // is a float unless specified otherwise
+  ALLOCATE (vec[0].elements.Flt, opihi_flt, 1);
+
+  bzero (vec[0].name, OPIHI_NAME_SIZE);
   vec[0].Nelements = 0;
   return (vec);
@@ -104,6 +102,5 @@
   if (i == Nvectors) return (FALSE);
 
-  if (vectors[i][0].elements)    free (vectors[i][0].elements);
-  if (vectors[i][0].elementsInt) free (vectors[i][0].elementsInt);
+  if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr);
   free (vectors[i]);
 
@@ -125,6 +122,5 @@
   if (i == Nvectors) return (FALSE);
 
-  if (vectors[i][0].elements)    free (vectors[i][0].elements);
-  if (vectors[i][0].elementsInt) free (vectors[i][0].elementsInt);
+  if (vectors[i][0].elements.Ptr) free (vectors[i][0].elements.Ptr);
   free (vectors[i]);
 
@@ -145,17 +141,18 @@
   return (TRUE);
 }
+
 int CopyVector (Vector *out, Vector *in) {
-  free (out[0].elements);
+  if (out[0].elements.Ptr) free (out[0].elements.Ptr);
   out[0].Nelements = in[0].Nelements;
-  if (in[0].elements) {
-    assert (in[0].type == OPIHI_FLOAT);
-    ALLOCATE (out[0].elements, opihi_float, out[0].Nelements);
-    memcpy (out[0].elements, in[0].elements, out[0].Nelements*sizeof(opihi_float));
-    out[0].type = OPIHI_FLOAT;
-  } else {
-    assert (in[0].type == OPIHI_INT);
-    ALLOCATE (out[0].elementsInt, opihi_int, out[0].Nelements);
-    memcpy (out[0].elementsInt, in[0].elementsInt, out[0].Nelements*sizeof(opihi_int));
-    out[0].type = OPIHI_INT;
+  if (in[0].elements.Ptr) {
+    if (in[0].type == OPIHI_FLT) {
+      ALLOCATE (out[0].elements.Flt, opihi_flt, out[0].Nelements);
+      memcpy (out[0].elements.Flt, in[0].elements.Flt, out[0].Nelements*sizeof(opihi_flt));
+      out[0].type = OPIHI_FLT;
+    } else {
+      ALLOCATE (out[0].elements.Int, opihi_int, out[0].Nelements);
+      memcpy (out[0].elements.Int, in[0].elements.Int, out[0].Nelements*sizeof(opihi_int));
+      out[0].type = OPIHI_INT;
+    }
   }
   return (TRUE);
@@ -170,12 +167,12 @@
   return (TRUE);
 }
+
 int MoveVector (Vector *out, Vector *in) {
   int i, j;
 
-  free (out[0].elements);
-  out[0].Nelements   = in[0].Nelements;
-  out[0].elements    = in[0].elements;
-  out[0].elementsInt = in[0].elementsInt;
-  out[0].type        = in[0].type;
+  if (out[0].elements.Ptr) free (out[0].elements.Ptr);
+  out[0].Nelements    = in[0].Nelements;
+  out[0].elements.Ptr = in[0].elements.Ptr;
+  out[0].type         = in[0].type;
 
   /* delete vector entry from vector list, if it exists */
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/check_stack.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/check_stack.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/check_stack.c	(revision 20839)
@@ -12,7 +12,7 @@
 
       /** if this is a number, put it on the list of scalers and move on **/
-      stack[i].Float = strtod (stack[i].name, &c);
+      // XXX need to handle IntValue vs FltValue
+      stack[i].FltValue = strtod (stack[i].name, &c);
       if (c == stack[i].name + strlen (stack[i].name)) {
-	stack[i].ptr   = &(stack[i].Float);
 	stack[i].type  = 'S';
 	continue;
@@ -22,5 +22,4 @@
       if (IsBuffer (stack[i].name)) {
 	stack[i].buffer = SelectBuffer (stack[i].name, OLDBUFFER, TRUE);
-	stack[i].ptr    = (float *) stack[i].buffer[0].matrix.buffer;
 	stack[i].type   = 'M';
 	if (Nx == -1) {
@@ -44,5 +43,4 @@
       if (IsVector (stack[i].name)) {
 	stack[i].vector = SelectVector (stack[i].name, OLDVECTOR, FALSE);
-	stack[i].ptr    = (float *) stack[i].vector[0].elements;
 	stack[i].type   = 'V';
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/dvomath.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/dvomath.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/dvomath.c	(revision 20839)
@@ -79,5 +79,5 @@
 	  sprintf (outname, "%s", stack[0].name);
       } else {
-	  sprintf (outname, "%.12g", stack[0].Float);
+	  sprintf (outname, "%.12g", stack[0].FltValue);
       }
       break;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/evaluate_stack.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 20839)
@@ -140,13 +140,10 @@
 /* copy data to new stack variable */
 void copy_stack (StackVar *stack1, StackVar *stack2) {
-  stack1[0].name   = stack2[0].name  ;
-  stack1[0].type   = stack2[0].type  ;
-  stack1[0].ptr    = stack2[0].ptr   ;
-  stack1[0].buffer = stack2[0].buffer;
-  stack1[0].vector = stack2[0].vector;
-  stack1[0].Float  = stack2[0].Float ;
-  if (!strncasecmp (&stack1[0].type, "S", 1)) {
-    stack1[0].ptr    = &stack1[0].Float;
-  }
+  stack1[0].name     = stack2[0].name  ;
+  stack1[0].type     = stack2[0].type  ;
+  stack1[0].buffer   = stack2[0].buffer;
+  stack1[0].vector   = stack2[0].vector;
+  stack1[0].FltValue = stack2[0].FltValue;
+  stack1[0].IntValue = stack2[0].IntValue;
 }
 
@@ -173,5 +170,5 @@
     if (IsVectorPtr (stack[i].vector) && (stack[i].type == 'v')) {
       if (VERBOSE) gprint (GP_ERR, "free %s (vect) (%lx)\n", stack[i].name, (long) stack[i].vector);
-      free (stack[i].vector[0].elements);
+      free (stack[i].vector[0].elements.Ptr);
       free (stack[i].vector);
       stack[i].vector = NULL;
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/expand_vectors.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/expand_vectors.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/expand_vectors.c	(revision 20839)
@@ -126,5 +126,5 @@
 	}
 	if (I < 0) I += vec[0].Nelements;
-	f1 = vec[0].elements[I];
+	f1 = vec[0].elements.Flt[I];
       }
     }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/parse.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/parse.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/parse.c	(revision 20839)
@@ -190,5 +190,5 @@
       }
       if (Nx < 0) Nx += vec[0].Nelements;
-      vec[0].elements[Nx] = atof (val);
+      vec[0].elements.Flt[Nx] = atof (val);
     }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/stack_math.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/stack_math.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/lib.shell/stack_math.c	(revision 20839)
@@ -9,72 +9,61 @@
 
   int i, Nx;
-  float *out, *M1, *M2;
   char line[512]; // this is only used to report an error 
   
+  // the vectors have to match in length
+  if (V1[0].vector[0].Nelements != V2[0].vector[0].Nelements) {
+    return (FALSE);
+  }
+
   Nx = V1[0].vector[0].Nelements;
-  if (Nx != V2[0].vector[0].Nelements) {
-    return (FALSE);
-  }
-
-  if (V1[0].type == 'v') {  /** use V1 as temp buffer **/
-    OUT[0].vector = V1[0].vector;
-    V1[0].type = 'V'; /* prevent it from being freed below */
-  } else {
-    if (V2[0].type == 'v') { /** use V2 as temp buffer, but header of V1 **/
-      OUT[0].vector = V2[0].vector;
-      V2[0].type = 'V'; /* prevent it from being freed below */
-    } else {  /* no spare temp buffer */
-      OUT[0].vector = InitVector ();
-      CopyVector (OUT[0].vector, V1[0].vector);
-    }
-  }
-  OUT[0].type = 'v'; /*** <<--- says this is a temporary matrix ***/
-
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].vector[0].elements;
-
-// XXX this is not quite there:
-// 1) do I drop the .ptr element of StackVar?
-// 2) things below are using type from a StackVar to get the vector type -- wrong place
-// 3) the temp would need lots of work -- is it worth it?
-// 4) some operators force the output to be float -- we cannot use a single bit of code to 
-//    define the output type based on which is a float and which is not.  getting ugly.
-// ??? how much more work to bring the MV, etc functions into shape ???
-
+
+  // XXX we temporarily drop the concept of using one of the temporary input vectors for 
+  // the output vector (thus saving an ALLOC): we have to juggle the size of the input vectors 
+  // as well as their temporary state
+
+  // create the output vector guaranteed to be temporary until the very end
+  OUT[0].vector = InitVector ();
+  OUT[0].type = 'v';
+
+  // set up the possible operations : int OP int -> int, all else yield float
+  // OP is the operation performed on *M1 and *M2
 # define VV_FUNC(OP) \
-  if ((M1->type == OPIHI_FLOAT) && (M2->type == OPIHI_FLOAT)) { \
-    // output must be float, can use either as a temp \
-    opihi_float *M1 = V1[0].vector[0].elements; \
-    opihi_float *M2 = V2[0].vector[0].elements; \
+  if ((V1->vector->type == OPIHI_FLT) && (V2->vector->type == OPIHI_FLT)) { \
+    CopyVector (OUT[0].vector, V1[0].vector); \
+    opihi_flt *M1  =  V1[0].vector[0].elements.Flt; \
+    opihi_flt *M2  =  V2[0].vector[0].elements.Flt; \
+    opihi_flt *out = OUT[0].vector[0].elements.Flt; \
     for (i = 0; i < Nx; i++, out++, M1++, M2++) { \
-  	*out = *M1 OP *M2; \
+  	*out = OP; \
     } \
     break; \
   } \
-  if ((M1->type != OPIHI_FLOAT) && (M2->type == OPIHI_FLOAT)) { \
-    // output must be float, can use M2 as a temp \
-    opihi_float *M1 = V1[0].vector[0].elementsInt; \
-    opihi_float *M2 = V2[0].vector[0].elements; \
+  if ((V1->vector->type == OPIHI_FLT) && (V2->vector->type != OPIHI_FLT)) { \
+    CopyVector (OUT[0].vector, V1[0].vector); \
+    opihi_flt *M1  =  V1[0].vector[0].elements.Flt; \
+    opihi_int *M2  =  V2[0].vector[0].elements.Int; \
+    opihi_flt *out = OUT[0].vector[0].elements.Flt; \
     for (i = 0; i < Nx; i++, out++, M1++, M2++) { \
-  	*out = *M1 OP *M2; \
+  	*out = OP; \
     } \
     break; \
   } \
-  if ((M1->type == OPIHI_FLOAT) && (M2->type != OPIHI_FLOAT)) { \
-    // output must be float, can use M1 as a temp \
-    opihi_float *M1 = V1[0].vector[0].elements; \
-    opihi_float *M2 = V2[0].vector[0].elementsInt; \
+  if ((V1->vector->type != OPIHI_FLT) && (V2->vector->type == OPIHI_FLT)) { \
+    CopyVector (OUT[0].vector, V2[0].vector); \
+    opihi_int *M1  =  V1[0].vector[0].elements.Int; \
+    opihi_flt *M2  =  V2[0].vector[0].elements.Flt; \
+    opihi_flt *out = OUT[0].vector[0].elements.Flt; \
     for (i = 0; i < Nx; i++, out++, M1++, M2++) { \
-  	*out = *M1 OP *M2; \
+  	*out = OP; \
     } \
     break; \
   } \
-  if ((M1->type != OPIHI_FLOAT) && (M2->type != OPIHI_FLOAT)) { \
-    // output may be int, can use either as temp \
-    opihi_float *M1 = V1[0].vector[0].elementsInt; \
-    opihi_float *M2 = V2[0].vector[0].elementsInt; \
+  if ((V1->vector->type != OPIHI_FLT) && (V2->vector->type != OPIHI_FLT)) { \
+    CopyVector (OUT[0].vector, V1[0].vector); \
+    opihi_int *M1  =  V1[0].vector[0].elements.Int; \
+    opihi_int *M2  =  V2[0].vector[0].elements.Int; \
+    opihi_int *out = OUT[0].vector[0].elements.Int; \
     for (i = 0; i < Nx; i++, out++, M1++, M2++) { \
-  	*out = *M1 OP *M2; \
+  	*out = OP; \
     } \
     break; \
@@ -82,115 +71,23 @@
 
   switch (op[0]) {
-  case '+': 
-    VV_FUNC
-
-    if ((M1->type == OPIHI_FLOAT) && (M2->type == OPIHI_FLOAT)) {
-      // output must be float, can use either as a temp
-      M1 = V1[0].vector[0].elements;
-      M2 = V2[0].vector[0].elements;
-      for (i = 0; i < Nx; i++, out++, M1++, M2++) {
-	*out = *M1 + *M2;
-      }
-      break;
-    }
-    if ((M1->type != OPIHI_FLOAT) && (M2->type == OPIHI_FLOAT)) {
-      // output must be float, can use M2 as a temp
-      M1 = V1[0].vector[0].elementsInt;
-      M2 = V2[0].vector[0].elements;
-      for (i = 0; i < Nx; i++, out++, M1++, M2++) {
-	*out = *M1 + *M2;
-      }
-      break;
-    }
-    if ((M1->type == OPIHI_FLOAT) && (M2->type != OPIHI_FLOAT)) {
-      // output must be float, can use M1 as a temp
-      M1 = V1[0].vector[0].elements;
-      M2 = V2[0].vector[0].elementsInt;
-      for (i = 0; i < Nx; i++, out++, M1++, M2++) {
-	*out = *M1 + *M2;
-      }
-      break;
-    }
-    if ((M1->type != OPIHI_FLOAT) && (M2->type != OPIHI_FLOAT)) {
-      // output may be int, can use either as temp
-      M1 = V1[0].vector[0].elementsInt;
-      M2 = V2[0].vector[0].elementsInt;
-      for (i = 0; i < Nx; i++, out++, M1++, M2++) {
-	*out = *M1 + *M2;
-      }
-      break;
-    }
-  case '-': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++)
-      *out = *M1 - *M2;
-    break; 
-  case '*': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++)
-      *out = *M1 * *M2;
-    break; 
-  case '/': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++)
-      *out = *M1 / *M2;
-    break; 
-  case '%': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++)
-      *out = (int) *M1 % (int) *M2;
-    break; 
-  case 0x5e: 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = pow (*M1, *M2);
-    break; 
-  case '@': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = DEG_RAD*atan2 (*M1, *M2);
-    break; 
-  case 'D': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = MIN (*M1, *M2);
-    break; 
-  case 'U': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = MAX (*M1, *M2);
-    break; 
-  case '<': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 < *M2) ? 1 : 0;
-    break; 
-  case '>': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 > *M2) ? 1 : 0;
-    break; 
-  case '&': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = ((int)*M1 & (int)*M2);
-    break; 
-  case '|': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = ((int)*M1 | (int)*M2);
-    break; 
-  case 'E': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 == *M2) ? 1 : 0;
-    break; 
-  case 'N': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 != *M2) ? 1 : 0;
-    break; 
-  case 'L': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 <= *M2) ? 1 : 0;
-    break; 
-  case 'G': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 >= *M2) ? 1 : 0;
-    break; 
-  case 'A': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 && *M2) ? 1 : 0;
-    break; 
-  case 'O': 
-    for (i = 0; i < Nx; i++, out++, M1++, M2++) 
-      *out = (*M1 || *M2) ? 1 : 0;
-    break; 
+    case '+': VV_FUNC(*M1 + *M2);
+    case '-': VV_FUNC(*M1 - *M2);
+    case '*': VV_FUNC(*M1 * *M2);
+    case '/': VV_FUNC(*M1 / *M2);
+    case '%': VV_FUNC((int)*M1 % (int)*M2);
+    case '^': VV_FUNC(pow (*M1, *M2));
+    case '@': VV_FUNC(DEG_RAD*atan2 (*M1, *M2));
+    case 'D': VV_FUNC(MIN (*M1, *M2));
+    case 'U': VV_FUNC(MAX (*M1, *M2));
+    case '<': VV_FUNC((*M1 < *M2) ? 1 : 0);
+    case '>': VV_FUNC((*M1 > *M2) ? 1 : 0);
+    case '&': VV_FUNC(((int)*M1 & (int)*M2));
+    case '|': VV_FUNC(((int)*M1 | (int)*M2));
+    case 'E': VV_FUNC((*M1 == *M2) ? 1 : 0);
+    case 'N': VV_FUNC((*M1 != *M2) ? 1 : 0);
+    case 'L': VV_FUNC((*M1 <= *M2) ? 1 : 0);
+    case 'G': VV_FUNC((*M1 >= *M2) ? 1 : 0);
+    case 'A': VV_FUNC((*M1 && *M2) ? 1 : 0);
+    case 'O': VV_FUNC((*M1 || *M2) ? 1 : 0);
   default:
     sprintf (line, "error: op %c not defined!", op[0]);
@@ -198,13 +95,14 @@
     return (FALSE);
   }
+# undef VV_FUNC
 
   /** free up any temporary buffers: **/
 
   if (V1[0].type == 'v') {
-    free (V1[0].vector[0].elements);
+    free (V1[0].vector[0].elements.Ptr);
     free (V1[0].vector);
   }
   if (V2[0].type == 'v') {
-    free (V2[0].vector[0].elements);
+    free (V2[0].vector[0].elements.Ptr);
     free (V2[0].vector);
   }
@@ -220,5 +118,4 @@
 
   int i, Nx;
-  float *out, *M1, *M2;
   char line[512]; // this is only used to report an error 
   
@@ -234,94 +131,43 @@
   OUT[0].type = 'v';   /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].vector[0].elements;
+  opihi_flt  M1  = V1[0].FltValue;
+  opihi_flt *M2  = V2[0].vector[0].elements.Flt;
+  opihi_flt *out = OUT[0].vector[0].elements.Flt;
+
+# define SV_FUNC(OP) \
+    for (i = 0; i < Nx; i++, out++, M2++) \
+      *out = OP; \
+    break; 
 
   switch (op[0]) { 
-  case '+': 
-    for (i = 0; i < Nx; i++, out++, M2++)
-      *out = *M1 + *M2;
-    break; 
-  case '-': 
-    for (i = 0; i < Nx; i++, out++, M2++)
-      *out = *M1 - *M2;
-    break; 
-  case '*': 
-    for (i = 0; i < Nx; i++, out++, M2++)
-      *out = *M1 * *M2;
-    break; 
-  case '/': 
-    for (i = 0; i < Nx; i++, out++, M2++)
-      *out = *M1 / *M2;
-    break; 
-  case '%': 
-    for (i = 0; i < Nx; i++, out++, M2++)
-      *out = (int) *M1 % (int) *M2;
-    break; 
-  case 0x5e: 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = pow (*M1, *M2);
-    break; 
-  case '@': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = DEG_RAD*atan2 (*M1, *M2);
-    break; 
-  case 'D': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = MIN (*M1, *M2);
-    break; 
-  case 'U': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = MAX (*M1, *M2);
-    break; 
-  case '<': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 < *M2) ? 1 : 0;
-    break; 
-  case '>': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 > *M2) ? 1 : 0;
-    break; 
-  case '&': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = ((int)*M1 & (int)*M2);
-    break; 
-  case '|': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = ((int)*M1 | (int)*M2);
-    break; 
-  case 'E': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 == *M2) ? 1 : 0;
-    break; 
-  case 'N': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 != *M2) ? 1 : 0;
-    break; 
-  case 'L': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 <= *M2) ? 1 : 0;
-    break; 
-  case 'G': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 >= *M2) ? 1 : 0;
-    break; 
-  case 'A': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 && *M2) ? 1 : 0;
-    break; 
-  case 'O': 
-    for (i = 0; i < Nx; i++, out++, M2++) 
-      *out = (*M1 || *M2) ? 1 : 0;
-    break; 
-  default:
-    sprintf (line, "error: op %c not defined!", op[0]);
-    push_error (line);
-    return (FALSE);
-  }
+    case '+': SV_FUNC(M1 + *M2);
+    case '-': SV_FUNC(M1 - *M2);
+    case '*': SV_FUNC(M1 * *M2);
+    case '/': SV_FUNC(M1 / *M2);
+    case '%': SV_FUNC((int) M1 % (int) *M2);
+    case '^': SV_FUNC(pow (M1, *M2));
+    case '@': SV_FUNC(DEG_RAD*atan2 (M1, *M2));
+    case 'D': SV_FUNC(MIN (M1, *M2));
+    case 'U': SV_FUNC(MAX (M1, *M2));
+    case '<': SV_FUNC((M1 < *M2) ? 1 : 0);
+    case '>': SV_FUNC((M1 > *M2) ? 1 : 0);
+    case '&': SV_FUNC(((int)M1 & (int)*M2));
+    case '|': SV_FUNC(((int)M1 | (int)*M2));
+    case 'E': SV_FUNC((M1 == *M2) ? 1 : 0);
+    case 'N': SV_FUNC((M1 != *M2) ? 1 : 0);
+    case 'L': SV_FUNC((M1 <= *M2) ? 1 : 0);
+    case 'G': SV_FUNC((M1 >= *M2) ? 1 : 0);
+    case 'A': SV_FUNC((M1 && *M2) ? 1 : 0);
+    case 'O': SV_FUNC((M1 || *M2) ? 1 : 0);
+    default:
+      sprintf (line, "error: op %c not defined!", op[0]);
+      push_error (line);
+      return (FALSE);
+  }
+# undef SV_FUNC
 
   /** free up any temporary buffers: **/
   if (V2[0].type == 'v') {
-    free (V2[0].vector[0].elements);
+    free (V2[0].vector[0].elements.Ptr);
     free (V2[0].vector);
   }
@@ -338,5 +184,4 @@
 
   int i, Nx;
-  float *out, *M1, *M2;
   char line[512]; // this is only used to report an error 
   
@@ -352,95 +197,44 @@
   OUT[0].type = 'v';   /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].vector[0].elements;
+  opihi_flt *M1  = V1[0].vector[0].elements.Flt;
+  opihi_flt  M2  = V2[0].FltValue;
+  opihi_flt *out = OUT[0].vector[0].elements.Flt;
+
+# define VS_FUNC(OP) \
+    for (i = 0; i < Nx; i++, out++, M1++) \
+      *out = OP; \
+    break; 
 
   switch (op[0]) { 
-  case '+': 
-    for (i = 0; i < Nx; i++, out++, M1++)
-      *out = *M1 + *M2;
-    break; 
-  case '-': 
-    for (i = 0; i < Nx; i++, out++, M1++)
-      *out = *M1 - *M2;
-    break; 
-  case '*': 
-    for (i = 0; i < Nx; i++, out++, M1++)
-      *out = *M1 * *M2;
-    break; 
-  case '/': 
-    for (i = 0; i < Nx; i++, out++, M1++)
-      *out = *M1 / *M2;
-    break; 
-  case '%': 
-    for (i = 0; i < Nx; i++, out++, M1++)
-      *out = (int) *M1 % (int) *M2;
-    break; 
-  case 0x5e: 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = pow (*M1, *M2);
-    break; 
-  case '@': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = DEG_RAD*atan2 (*M1, *M2);
-    break; 
-  case 'D': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = MIN (*M1, *M2);
-    break; 
-  case 'U': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = MAX (*M1, *M2);
-    break; 
-  case '<': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 < *M2) ? 1 : 0;
-    break; 
-  case '>': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 > *M2) ? 1 : 0;
-    break; 
-  case '&': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = ((int)*M1 & (int)*M2);
-    break; 
-  case '|': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = ((int)*M1 | (int)*M2);
-    break; 
-  case 'E': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 == *M2) ? 1 : 0;
-    break; 
-  case 'N': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 != *M2) ? 1 : 0;
-    break; 
-  case 'L': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 <= *M2) ? 1 : 0;
-    break; 
-  case 'G': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 >= *M2) ? 1 : 0;
-    break; 
-  case 'A': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 && *M2) ? 1 : 0;
-    break; 
-  case 'O': 
-    for (i = 0; i < Nx; i++, out++, M1++) 
-      *out = (*M1 || *M2) ? 1 : 0;
-    break; 
-  default:
-    sprintf (line, "error: op %c not defined!", op[0]);
-    push_error (line);
-    return (FALSE);
-  }
+    case '+': VS_FUNC(*M1 + M2);
+    case '-': VS_FUNC(*M1 - M2);
+    case '*': VS_FUNC(*M1 * M2);
+    case '/': VS_FUNC(*M1 / M2);
+    case '%': VS_FUNC((int) *M1 % (int) M2);
+    case '^': VS_FUNC(pow (*M1, M2));
+    case '@': VS_FUNC(DEG_RAD*atan2 (*M1, M2));
+    case 'D': VS_FUNC(MIN (*M1, M2));
+    case 'U': VS_FUNC(MAX (*M1, M2));
+    case '<': VS_FUNC((*M1 < M2) ? 1 : 0);
+    case '>': VS_FUNC((*M1 > M2) ? 1 : 0);
+    case '&': VS_FUNC(((int)*M1 & (int)M2));
+    case '|': VS_FUNC(((int)*M1 | (int)M2));
+    case 'E': VS_FUNC((*M1 == M2) ? 1 : 0);
+    case 'N': VS_FUNC((*M1 != M2) ? 1 : 0);
+    case 'L': VS_FUNC((*M1 <= M2) ? 1 : 0);
+    case 'G': VS_FUNC((*M1 >= M2) ? 1 : 0);
+    case 'A': VS_FUNC((*M1 && M2) ? 1 : 0);
+    case 'O': VS_FUNC((*M1 || M2) ? 1 : 0);
+    default:
+      sprintf (line, "error: op %c not defined!", op[0]);
+      push_error (line);
+      return (FALSE);
+  }
+# undef VS_FUNC
 
   /** free up any temporary buffers: **/
 
   if (V1[0].type == 'v') {
-    free (V1[0].vector[0].elements);
+    free (V1[0].vector[0].elements.Ptr);
     free (V1[0].vector);
   }
@@ -454,8 +248,8 @@
 }
 
+// the vector is applied to each column
 int MV_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) {
 
   int i, j, Nx, Ny;
-  float *out, *M1, *M2;
   char line[512]; // this is only used to report an error 
  
@@ -478,127 +272,40 @@
   OUT[0].type = 'm'; /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  float     *M1  = (float *) V1[0].buffer[0].matrix.buffer;
+  opihi_flt *M2  = V2[0].vector[0].elements.Flt;
+  float     *out = (float *)OUT[0].buffer[0].matrix.buffer;
+
+# define MV_FUNC(OP) \
+    for (i = 0; i < Ny; i++, M2++) { \
+      for (j = 0; j < Nx; j++, out++, M1++) { \
+        *out = OP; \
+      } \
+    } \
+    break; 
 
   switch (op[0]) { 
-  case '+': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++)
-        *out = *M1 + *M2;
-    }
-    break; 
-  case '-': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++)
-        *out = *M1 - *M2;
-    }
-    break; 
-  case '*': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++)
-        *out = *M1 * *M2;
-    }
-    break; 
-  case '/': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++)
-        *out = *M1 / *M2;
-    }
-    break; 
-  case '%': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++)
-        *out = (int) *M1 % (int) *M2;
-    }
-    break; 
-  case 0x5e: 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = pow (*M1, *M2);
-    }
-    break; 
-  case '@': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = DEG_RAD*atan2 (*M1, *M2);
-    }
-    break; 
-  case 'D': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = MIN (*M1, *M2);
-    }
-    break; 
-  case 'U': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = MAX (*M1, *M2);
-    }
-    break; 
-  case '<': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 < *M2) ? 1 : 0;
-    }
-    break; 
-  case '>': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 > *M2) ? 1 : 0;
-    }
-    break; 
-  case '&': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = ((int)*M1 & (int)*M2);
-    }
-    break; 
-  case '|': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = ((int)*M1 | (int)*M2);
-    }
-    break; 
-  case 'E': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 == *M2) ? 1 : 0;
-    }
-    break; 
-  case 'N': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 != *M2) ? 1 : 0;
-    }
-    break; 
-  case 'L': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 <= *M2) ? 1 : 0;
-    }
-    break; 
-  case 'G': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 >= *M2) ? 1 : 0;
-    }
-    break; 
-  case 'A': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 && *M2) ? 1 : 0;
-    }
-    break; 
-  case 'O': 
-    for (i = 0; i < Ny; i++, M2++) {
-      for (j = 0; j < Nx; j++, out++, M1++) 
-        *out = (*M1 || *M2) ? 1 : 0;
-    }
-    break; 
-  default:
-    sprintf (line, "error: op %c not defined!", op[0]);
-    push_error (line);
-    return (FALSE);
+    case '+': MV_FUNC(*M1 + *M2);
+    case '-': MV_FUNC(*M1 - *M2);
+    case '*': MV_FUNC(*M1 * *M2);
+    case '/': MV_FUNC(*M1 / *M2);
+    case '%': MV_FUNC((int) *M1 % (int) *M2);
+    case '^': MV_FUNC(pow (*M1, *M2));
+    case '@': MV_FUNC(DEG_RAD*atan2 (*M1, *M2));
+    case 'D': MV_FUNC(MIN (*M1, *M2));
+    case 'U': MV_FUNC(MAX (*M1, *M2));
+    case '<': MV_FUNC((*M1 < *M2) ? 1 : 0);
+    case '>': MV_FUNC((*M1 > *M2) ? 1 : 0);
+    case '&': MV_FUNC(((int)*M1 & (int)*M2));
+    case '|': MV_FUNC(((int)*M1 | (int)*M2));
+    case 'E': MV_FUNC((*M1 == *M2) ? 1 : 0);
+    case 'N': MV_FUNC((*M1 != *M2) ? 1 : 0);
+    case 'L': MV_FUNC((*M1 <= *M2) ? 1 : 0);
+    case 'G': MV_FUNC((*M1 >= *M2) ? 1 : 0);
+    case 'A': MV_FUNC((*M1 && *M2) ? 1 : 0);
+    case 'O': MV_FUNC((*M1 || *M2) ? 1 : 0);
+    default:
+      sprintf (line, "error: op %c not defined!", op[0]);
+      push_error (line);
+      return (FALSE);
   }
 
@@ -611,5 +318,5 @@
   }
   if (V2[0].type == 'v') {
-    free (V2[0].vector[0].elements);
+    free (V2[0].vector[0].elements.Ptr);
     free (V2[0].vector);
   }
@@ -620,12 +327,10 @@
   /* at the end, V1 and V2 are deleted only if they were temporary */
   return (TRUE);
-
-}
-
-
+}
+
+// the vector is applied to each row
 int VM_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) {
 
   int i, j, Nx, Ny;
-  float *out, *M1, *M2;
   char line[512]; // this is only used to report an error 
   
@@ -646,146 +351,41 @@
   OUT[0].type = 'm'; /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  opihi_flt *M1  = V1[0].vector[0].elements.Flt;
+  float     *M2  = (float *) V2[0].buffer[0].matrix.buffer;
+  float     *out = (float *)OUT[0].buffer[0].matrix.buffer;
+
+# define VM_FUNC(OP) \
+    for (i = 0; i < Ny; i++) { \
+      M1  = V1[0].vector[0].elements.Flt; \
+      for (j = 0; j < Nx; j++, out++, M1++, M2++) { \
+        *out = OP; \
+      } \
+    } \
+    break; 
 
   switch (op[0]) { 
-  case '+': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++)
-        *out = *M1 + *M2;
-    }
-    break; 
-  case '-': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++)
-        *out = *M1 - *M2;
-    }
-    break; 
-  case '*': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++)
-        *out = *M1 * *M2;
-    }
-    break; 
-  case '/': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++)
-        *out = *M1 / *M2;
-    }
-    break; 
-  case '%': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++)
-        *out = (int) *M1 % (int) *M2;
-    }
-    break; 
-  case 0x5e: 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = pow (*M1, *M2);
-    }
-    break; 
-  case '@': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = DEG_RAD*atan2 (*M1, *M2);
-    }
-    break; 
-  case 'D': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = MIN (*M1, *M2);
-    }
-    break; 
-  case 'U': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = MAX (*M1, *M2);
-    }
-    break; 
-  case '<': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 < *M2) ? 1 : 0;
-    }
-    break; 
-  case '>': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 > *M2) ? 1 : 0;
-    }
-    break; 
-  case '&': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = ((int)*M1 & (int)*M2);
-    }
-    break; 
-  case '|': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = ((int)*M1 | (int)*M2);
-    }
-    break; 
-  case 'E': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 == *M2) ? 1 : 0;
-    }
-    break; 
-  case 'N': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 != *M2) ? 1 : 0;
-    }
-    break; 
-  case 'L': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 <= *M2) ? 1 : 0;
-    }
-    break; 
-  case 'G': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 >= *M2) ? 1 : 0;
-    }
-    break; 
-  case 'A': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 && *M2) ? 1 : 0;
-    }
-    break; 
-  case 'O': 
-    for (i = 0; i < Ny; i++) {
-      M1 = V1[0].ptr;
-      for (j = 0; j < Nx; j++, out++, M1++, M2++) 
-        *out = (*M1 || *M2) ? 1 : 0;
-    }
-    break; 
-  default:
-    sprintf (line, "error: op %c not defined!", op[0]);
-    push_error (line);
-    return (FALSE);
+    case '+': VM_FUNC(*M1 + *M2);
+    case '-': VM_FUNC(*M1 - *M2);
+    case '*': VM_FUNC(*M1 * *M2);
+    case '/': VM_FUNC(*M1 / *M2);
+    case '%': VM_FUNC((int) *M1 % (int) *M2);
+    case '^': VM_FUNC(pow (*M1, *M2));
+    case '@': VM_FUNC(DEG_RAD*atan2 (*M1, *M2));
+    case 'D': VM_FUNC(MIN (*M1, *M2));
+    case 'U': VM_FUNC(MAX (*M1, *M2));
+    case '<': VM_FUNC((*M1 < *M2) ? 1 : 0);
+    case '>': VM_FUNC((*M1 > *M2) ? 1 : 0);
+    case '&': VM_FUNC(((int)*M1 & (int)*M2));
+    case '|': VM_FUNC(((int)*M1 | (int)*M2));
+    case 'E': VM_FUNC((*M1 == *M2) ? 1 : 0);
+    case 'N': VM_FUNC((*M1 != *M2) ? 1 : 0);
+    case 'L': VM_FUNC((*M1 <= *M2) ? 1 : 0);
+    case 'G': VM_FUNC((*M1 >= *M2) ? 1 : 0);
+    case 'A': VM_FUNC((*M1 && *M2) ? 1 : 0);
+    case 'O': VM_FUNC((*M1 || *M2) ? 1 : 0);
+    default:
+      sprintf (line, "error: op %c not defined!", op[0]);
+      push_error (line);
+      return (FALSE);
   }
 
@@ -793,5 +393,5 @@
 
   if (V1[0].type == 'v') {
-    free (V1[0].vector[0].elements);
+    free (V1[0].vector[0].elements.Ptr);
     free (V1[0].vector);
   }
@@ -833,7 +433,7 @@
   OUT[0].type = 'm'; /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  M1  = (float *)V1[0].buffer[0].matrix.buffer;
+  M2  = (float *)V2[0].buffer[0].matrix.buffer;
+  out = (float *)OUT[0].buffer[0].matrix.buffer;
 
   switch (op[0]) { 
@@ -945,5 +545,6 @@
 
   int i, Nx, Ny;
-  float *out, *M1, *M2;
+  float *out, *M1;
+  opihi_flt M2;
   char line[512]; // this is only used to report an error 
   
@@ -961,84 +562,84 @@
   OUT[0].type = 'm';      /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  M1  = (float *)V1[0].buffer[0].matrix.buffer;
+  M2  = V2[0].FltValue;
+  out = (float *)OUT[0].buffer[0].matrix.buffer;
 
   switch (op[0]) { 
   case '+': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++)
-      *out = *M1 + *M2;
+      *out = *M1 + M2;
     break; 
   case '-': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++)
-      *out = *M1 - *M2;
+      *out = *M1 - M2;
     break; 
   case '*': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++)
-      *out = *M1 * *M2;
+      *out = *M1 * M2;
     break; 
   case '/': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++)
-      *out = *M1 / *M2;
+      *out = *M1 / M2;
     break; 
   case '%': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++)
-      *out = (int) *M1 % (int) *M2;
+      *out = (int) *M1 % (int) M2;
     break; 
   case 0x5e: 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = pow (*M1, *M2);
+      *out = pow (*M1, M2);
     break; 
   case '@': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = DEG_RAD*atan2 (*M1, *M2);
+      *out = DEG_RAD*atan2 (*M1, M2);
     break; 
   case 'D': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = MIN (*M1, *M2);
+      *out = MIN (*M1, M2);
     break; 
   case 'U': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = MAX (*M1, *M2);
+      *out = MAX (*M1, M2);
     break; 
   case '<': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 < *M2) ? 1 : 0;
+      *out = (*M1 < M2) ? 1 : 0;
     break; 
   case '>': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 > *M2) ? 1 : 0;
+      *out = (*M1 > M2) ? 1 : 0;
     break; 
   case '&': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = ((int)*M1 & (int)*M2);
+      *out = ((int)*M1 & (int)M2);
     break; 
   case '|': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = ((int)*M1 | (int)*M2);
+      *out = ((int)*M1 | (int)M2);
     break; 
   case 'E': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 == *M2) ? 1 : 0;
+      *out = (*M1 == M2) ? 1 : 0;
     break; 
   case 'N': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 != *M2) ? 1 : 0;
+      *out = (*M1 != M2) ? 1 : 0;
     break; 
   case 'L': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 <= *M2) ? 1 : 0;
+      *out = (*M1 <= M2) ? 1 : 0;
     break; 
   case 'G': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 >= *M2) ? 1 : 0;
+      *out = (*M1 >= M2) ? 1 : 0;
     break; 
   case 'A': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 && *M2) ? 1 : 0;
+      *out = (*M1 && M2) ? 1 : 0;
     break; 
   case 'O': 
     for (i = 0; i < Nx*Ny; i++, out++, M1++) 
-      *out = (*M1 || *M2) ? 1 : 0;
+      *out = (*M1 || M2) ? 1 : 0;
     break; 
   default:
@@ -1064,5 +665,6 @@
 
   int i, Nx, Ny;
-  float *out, *M1, *M2;
+  float *out, *M2;
+  opihi_flt M1;
   char line[512]; // this is only used to report an error 
   
@@ -1079,84 +681,84 @@
   OUT[0].type = 'm'; /*** <<--- says this is a temporary matrix ***/
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  M1  = V1[0].FltValue;
+  M2  = (float *)OUT[0].buffer[0].matrix.buffer;
+  out = (float *)OUT[0].buffer[0].matrix.buffer;
 
   switch (op[0]) { 
   case '+': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = *M1 + *M2;
+      *out = M1 + *M2;
     break; 
   case '-': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = *M1 - *M2;
+      *out = M1 - *M2;
     break; 
   case '*': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = *M1 * *M2;
+      *out = M1 * *M2;
     break; 
   case '/': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = *M1 / *M2;
+      *out = M1 / *M2;
     break; 
   case '%': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = (int) *M1 % (int) *M2;
+      *out = (int) M1 % (int) *M2;
     break; 
   case 0x5e: 
     for (i = 0; i < Nx*Ny; i++, out++, M2++)
-      *out = pow (*M1, *M2);
+      *out = pow (M1, *M2);
     break; 
   case '@': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = DEG_RAD*atan2 (*M1, *M2);
+      *out = DEG_RAD*atan2 (M1, *M2);
     break; 
   case 'D': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = MIN (*M1, *M2);
+      *out = MIN (M1, *M2);
     break; 
   case 'U': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = MAX (*M1, *M2);
+      *out = MAX (M1, *M2);
     break; 
   case '<': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 < *M2) ? 1 : 0;
+      *out = (M1 < *M2) ? 1 : 0;
     break; 
   case '>': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 > *M2) ? 1 : 0;
+      *out = (M1 > *M2) ? 1 : 0;
     break; 
   case '&': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = ((int)*M1 & (int)*M2);
+      *out = ((int)M1 & (int)*M2);
     break; 
   case '|': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = ((int)*M1 | (int)*M2);
+      *out = ((int)M1 | (int)*M2);
     break; 
   case 'E': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 == *M2) ? 1 : 0;
+      *out = (M1 == *M2) ? 1 : 0;
     break; 
   case 'N': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 != *M2) ? 1 : 0;
+      *out = (M1 != *M2) ? 1 : 0;
     break; 
   case 'L': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 <= *M2) ? 1 : 0;
+      *out = (M1 <= *M2) ? 1 : 0;
     break; 
   case 'G': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 >= *M2) ? 1 : 0;
+      *out = (M1 >= *M2) ? 1 : 0;
     break; 
   case 'A': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 && *M2) ? 1 : 0;
+      *out = (M1 && *M2) ? 1 : 0;
     break; 
   case 'O': 
     for (i = 0; i < Nx*Ny; i++, out++, M2++) 
-      *out = (*M1 || *M2) ? 1 : 0;
+      *out = (M1 || *M2) ? 1 : 0;
     break; 
   default:
@@ -1181,70 +783,68 @@
 int SS_binary (StackVar *OUT, StackVar *V1, StackVar *V2, char *op) {
 
-  float *M1, *M2, *out;
+  opihi_flt M1, M2;
   char line[512]; // this is only used to report an error 
 
-  M1  = V1[0].ptr;
-  M2  = V2[0].ptr;
-  OUT[0].ptr = V1[0].ptr;
-  out = OUT[0].ptr;
-
+  M1 = V1[0].FltValue;
+  M2 = V2[0].FltValue;
+  OUT[0].type = 'S';
 
   switch (op[0]) { 
   case '+': 
-    *out = *M1 + *M2;
+    OUT[0].FltValue = M1 + M2;
     break;    
   case '-': 
-    *out = *M1 - *M2;
+    OUT[0].FltValue = M1 - M2;
     break;    
   case '*': 
-    *out = *M1 * *M2;
+    OUT[0].FltValue = M1 * M2;
     break;    
   case '/': 
-    *out = *M1 / *M2;
+    OUT[0].FltValue = M1 / M2;
     break; 
   case '%': 
-    *out = (int) *M1 % (int) *M2;
+    OUT[0].FltValue = (int) M1 % (int) M2;
     break; 
   case 0x5e: 
-    *out = pow (*M1, *M2);
+    OUT[0].FltValue = pow (M1, M2);
     break; 
   case '@': 
-    *out = DEG_RAD*atan2 (*M1, *M2);
+    OUT[0].FltValue = DEG_RAD*atan2 (M1, M2);
     break; 
   case 'D': 
-    *out = MIN (*M1, *M2);
+    OUT[0].FltValue = MIN (M1, M2);
     break; 
   case 'U': 
-    *out = MAX (*M1, *M2);
+    OUT[0].FltValue = MAX (M1, M2);
     break; 
   case '<': 
-    *out = (*M1 < *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 < M2) ? 1 : 0;
     break; 
   case '>': 
-    *out = (*M1 > *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 > M2) ? 1 : 0;
     break; 
   case '&': 
-    *out = ((int)*M1 & (int)*M2);
+    OUT[0].FltValue = ((int)M1 & (int)M2);
     break; 
   case '|': 
-    *out = ((int)*M1 | (int)*M2);
+    OUT[0].FltValue = ((int)M1 | (int)M2);
     break; 
   case 'E': 
-    *out = (*M1 == *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 == M2) ? 1 : 0;
     break; 
   case 'N': 
-    *out = (*M1 != *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 != M2) ? 1 : 0;
     break; 
   case 'L': 
-    *out = (*M1 <= *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 <= M2) ? 1 : 0;
     break; 
   case 'G': 
-    *out = (*M1 >= *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 >= M2) ? 1 : 0;
     break; 
   case 'A': 
-    *out = (*M1 && *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 && M2) ? 1 : 0;
     break; 
   case 'O': 
-    *out = (*M1 || *M2) ? 1 : 0;
+    OUT[0].FltValue = (M1 || M2) ? 1 : 0;
     break; 
   default:
@@ -1253,6 +853,4 @@
     return (FALSE);
   }
-  OUT[0].Float = *(OUT[0].ptr);
-  OUT[0].type = 'S';
 
   clear_stack (V1);
@@ -1304,7 +902,6 @@
 
 escape:
-  OUT[0].Float = value;
+  OUT[0].FltValue = value;
   OUT[0].type = 'S';
-  OUT[0].ptr = &OUT[0].Float;
 
   clear_stack (V1);
@@ -1317,45 +914,42 @@
 int S_unary (StackVar *OUT, StackVar *V1, char *op) {
 
-  float *out, *M1;
+  opihi_flt M1;
   
-  out = OUT[0].ptr = V1[0].ptr;
-  M1  = V1[0].ptr;
+  M1  = V1[0].FltValue;
+  OUT[0].type = 'S';
 
   if (!strcmp (op, "="))     {    }
-  if (!strcmp (op, "abs"))   {    *out = fabs(*M1);           }
-  if (!strcmp (op, "int"))   {    *out = (float)(int)(*M1);   }
-  if (!strcmp (op, "exp"))   {    *out = exp (*M1);           }
-  if (!strcmp (op, "ten"))   {    *out = pow (10.0,*M1);      }
-  if (!strcmp (op, "log"))   {    *out = log10 (*M1);         }
-  if (!strcmp (op, "ln"))    {    *out = log (*M1);           }
-  if (!strcmp (op, "sqrt"))  {    *out = sqrt (*M1);          }
-  if (!strcmp (op, "erf"))   {    *out = erf (*M1);           }
-
-  if (!strcmp (op, "sinh"))  {    *out = sinh (*M1);          }
-  if (!strcmp (op, "cosh"))  {    *out = cosh (*M1);          }
-  if (!strcmp (op, "asinh")) {    *out = asinh (*M1);         }
-  if (!strcmp (op, "acosh")) {    *out = acosh (*M1);         }
-  if (!strcmp (op, "lgamma")) {   *out = lgamma (*M1);        }
-
-  if (!strcmp (op, "sin"))   {    *out = sin (*M1);           }
-  if (!strcmp (op, "cos"))   {    *out = cos (*M1);           }
-  if (!strcmp (op, "tan"))   {    *out = tan (*M1);           }
-  if (!strcmp (op, "dsin"))  {    *out = sin (*M1*RAD_DEG);   }
-  if (!strcmp (op, "dcos"))  {    *out = cos (*M1*RAD_DEG);   }
-  if (!strcmp (op, "dtan"))  {    *out = tan (*M1*RAD_DEG);   }
-  if (!strcmp (op, "asin"))  {    *out = asin (*M1);          }
-  if (!strcmp (op, "acos"))  {    *out = acos (*M1);          }
-  if (!strcmp (op, "atan"))  {    *out = atan (*M1);          }
-  if (!strcmp (op, "dasin")) {    *out = asin (*M1)*DEG_RAD;  }
-  if (!strcmp (op, "dacos")) {    *out = acos (*M1)*DEG_RAD;  }
-  if (!strcmp (op, "datan")) {    *out = atan (*M1)*DEG_RAD;  }
-  if (!strcmp (op, "rnd"))   {    *out = drand48();           }
-  if (!strcmp (op, "not"))   {    *out = !(*M1);              }
-  if (!strcmp (op, "--"))    {    *out = - (*M1);             }
-  if (!strcmp (op, "isinf")) {    *out = !finite(*M1);        }
-  if (!strcmp (op, "isnan")) {    *out = isnan(*M1);          } 
-
-  OUT[0].Float = *out;
-  OUT[0].type = 'S';
+  if (!strcmp (op, "abs"))   {    OUT[0].FltValue = fabs(M1);           }
+  if (!strcmp (op, "int"))   {    OUT[0].FltValue = (float)(int)(M1);   }
+  if (!strcmp (op, "exp"))   {    OUT[0].FltValue = exp (M1);           }
+  if (!strcmp (op, "ten"))   {    OUT[0].FltValue = pow (10.0,M1);      }
+  if (!strcmp (op, "log"))   {    OUT[0].FltValue = log10 (M1);         }
+  if (!strcmp (op, "ln"))    {    OUT[0].FltValue = log (M1);           }
+  if (!strcmp (op, "sqrt"))  {    OUT[0].FltValue = sqrt (M1);          }
+  if (!strcmp (op, "erf"))   {    OUT[0].FltValue = erf (M1);           }
+
+  if (!strcmp (op, "sinh"))  {    OUT[0].FltValue = sinh (M1);          }
+  if (!strcmp (op, "cosh"))  {    OUT[0].FltValue = cosh (M1);          }
+  if (!strcmp (op, "asinh")) {    OUT[0].FltValue = asinh (M1);         }
+  if (!strcmp (op, "acosh")) {    OUT[0].FltValue = acosh (M1);         }
+  if (!strcmp (op, "lgamma")) {   OUT[0].FltValue = lgamma (M1);        }
+
+  if (!strcmp (op, "sin"))   {    OUT[0].FltValue = sin (M1);           }
+  if (!strcmp (op, "cos"))   {    OUT[0].FltValue = cos (M1);           }
+  if (!strcmp (op, "tan"))   {    OUT[0].FltValue = tan (M1);           }
+  if (!strcmp (op, "dsin"))  {    OUT[0].FltValue = sin (M1*RAD_DEG);   }
+  if (!strcmp (op, "dcos"))  {    OUT[0].FltValue = cos (M1*RAD_DEG);   }
+  if (!strcmp (op, "dtan"))  {    OUT[0].FltValue = tan (M1*RAD_DEG);   }
+  if (!strcmp (op, "asin"))  {    OUT[0].FltValue = asin (M1);          }
+  if (!strcmp (op, "acos"))  {    OUT[0].FltValue = acos (M1);          }
+  if (!strcmp (op, "atan"))  {    OUT[0].FltValue = atan (M1);          }
+  if (!strcmp (op, "dasin")) {    OUT[0].FltValue = asin (M1)*DEG_RAD;  }
+  if (!strcmp (op, "dacos")) {    OUT[0].FltValue = acos (M1)*DEG_RAD;  }
+  if (!strcmp (op, "datan")) {    OUT[0].FltValue = atan (M1)*DEG_RAD;  }
+  if (!strcmp (op, "rnd"))   {    OUT[0].FltValue = drand48();           }
+  if (!strcmp (op, "not"))   {    OUT[0].FltValue = !(M1);              }
+  if (!strcmp (op, "--"))    {    OUT[0].FltValue = - (M1);             }
+  if (!strcmp (op, "isinf")) {    OUT[0].FltValue = !finite(M1);        }
+  if (!strcmp (op, "isnan")) {    OUT[0].FltValue = isnan(M1);          } 
 
   clear_stack (V1);
@@ -1367,5 +961,4 @@
 
   int i, Nx;
-  float *out, *M1;
   
   Nx = V1[0].vector[0].Nelements;
@@ -1379,6 +972,6 @@
   }
   OUT[0].type = 'v'; /*** <<--- says this is a temporary matrix ***/
-  M1  = V1[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].vector[0].elements;
+  opihi_flt *M1  = V1[0].vector[0].elements.Flt;
+  opihi_flt *out = OUT[0].vector[0].elements.Flt;
 
   if (!strcmp (op, "="))     { } /* already set equal */
@@ -1423,5 +1016,5 @@
 
   if (V1[0].type == 'v') {
-    free (V1[0].vector[0].elements);
+    free (V1[0].vector[0].elements.Ptr);
     free (V1[0].vector);
     V1[0].vector = NULL;
@@ -1449,6 +1042,6 @@
   }
   OUT[0].type = 'm';      /*** <<--- says this is a temporary matrix ***/
-  M1  = V1[0].ptr;
-  out = OUT[0].ptr = (float *)OUT[0].buffer[0].matrix.buffer;
+  M1  = (float *) V1[0].buffer[0].matrix.buffer;
+  out = (float *)OUT[0].buffer[0].matrix.buffer;
 
   if (!strcmp (op, "="))     { }
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/findpeaks.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/findpeaks.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/findpeaks.c	(revision 20839)
@@ -76,13 +76,13 @@
   }
 
-  REALLOCATE (vecx[0].elements, float, MAX (Npeak, 1));
-  REALLOCATE (vecy[0].elements, float, MAX (Npeak, 1));
-  REALLOCATE (vecz[0].elements, float, MAX (Npeak, 1));
+  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npeak, 1));
+  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npeak, 1));
+  REALLOCATE (vecz[0].elements.Flt, opihi_flt, MAX (Npeak, 1));
   /* eliminate non-local peaks */
   for (N = n = 0; n < Npeak; n++) {
     if (!keep[n]) continue;
-    vecx[0].elements[N] = xp[n];
-    vecy[0].elements[N] = yp[n];
-    vecz[0].elements[N] = zp[n];
+    vecx[0].elements.Flt[N] = xp[n];
+    vecy[0].elements.Flt[N] = yp[n];
+    vecz[0].elements.Flt[N] = zp[n];
     N ++;
   }
@@ -92,7 +92,7 @@
   free (keep);
 
-  REALLOCATE (vecx[0].elements, float, MAX (N, 1));
-  REALLOCATE (vecy[0].elements, float, MAX (N, 1));
-  REALLOCATE (vecz[0].elements, float, MAX (N, 1));
+  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (N, 1));
+  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (N, 1));
+  REALLOCATE (vecz[0].elements.Flt, opihi_flt, MAX (N, 1));
   vecx[0].Nelements = vecy[0].Nelements = vecz[0].Nelements = N;
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/fitcontour.c	(revision 20839)
@@ -32,6 +32,6 @@
   */
   for (i = 0; i < vecx[0].Nelements; i++) {
-    x = vecx[0].elements[i] - xo;
-    y = vecy[0].elements[i] - yo;
+    x = vecx[0].elements.Flt[i] - xo;
+    y = vecy[0].elements.Flt[i] - yo;
     r = hypot (x, y);
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/rawstars.c	(revision 20839)
@@ -55,12 +55,12 @@
   Np = xp[0].Nelements;
 
-  REALLOCATE (xc[0].elements, float, Np);
-  REALLOCATE (yc[0].elements, float, Np);
-  REALLOCATE (sx[0].elements, float, Np);
-  REALLOCATE (sy[0].elements, float, Np);
-  REALLOCATE (sxy[0].elements, float, Np);
-  REALLOCATE (zs[0].elements, float, Np);
-  REALLOCATE (zc[0].elements, float, Np);
-  REALLOCATE (sk[0].elements, float, Np);
+  REALLOCATE (xc[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (yc[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (sx[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (sy[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (sxy[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (zs[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (zc[0].elements.Flt, opihi_flt, Np);
+  REALLOCATE (sk[0].elements.Flt, opihi_flt, Np);
   xc[0].Nelements = yc[0].Nelements = sx[0].Nelements = Np;
   sy[0].Nelements = zs[0].Nelements = zc[0].Nelements = Np;
@@ -69,6 +69,6 @@
   v = (float *) buff[0].matrix.buffer;
   for (i = 0; i < Np; i++) {
-    x = xp[0].elements[i];
-    y = yp[0].elements[i];
+    x = xp[0].elements.Flt[i];
+    y = yp[0].elements.Flt[i];
     if (x < 0) continue;
     if (x >= Nx) continue;
@@ -77,12 +77,12 @@
 
     get_rough_star (v, Nx, Ny, x, y, 
-		    &xc[0].elements[i], 
-		    &yc[0].elements[i], 
-		    &sx[0].elements[i], 
-		    &sy[0].elements[i], 
-		    &sxy[0].elements[i], 
-		    &zs[0].elements[i], 
-		    &zc[0].elements[i],
-		    &sk[0].elements[i]);
+		    &xc[0].elements.Flt[i], 
+		    &yc[0].elements.Flt[i], 
+		    &sx[0].elements.Flt[i], 
+		    &sy[0].elements.Flt[i], 
+		    &sxy[0].elements.Flt[i], 
+		    &zs[0].elements.Flt[i], 
+		    &zc[0].elements.Flt[i],
+		    &sk[0].elements.Flt[i]);
   }
 
Index: /branches/eam_branch_20081124/Ohana/src/opihi/mana/starcontour.c
===================================================================
--- /branches/eam_branch_20081124/Ohana/src/opihi/mana/starcontour.c	(revision 20838)
+++ /branches/eam_branch_20081124/Ohana/src/opihi/mana/starcontour.c	(revision 20839)
@@ -22,6 +22,6 @@
   N = 0;
   Npts = 100;
-  REALLOCATE (vecx[0].elements, float, MAX (Npts, 1));
-  REALLOCATE (vecy[0].elements, float, MAX (Npts, 1));
+  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npts, 1));
+  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npts, 1));
 
   Nx = buf[0].matrix.Naxis[0];
@@ -41,11 +41,11 @@
 	min = TRUE;
 	xmin = x + (zo - zt)/(v[x + 1 + y*Nx] - zt);
-	vecx[0].elements[N] = xmin;
-	vecy[0].elements[N] = y;
+	vecx[0].elements.Flt[N] = xmin;
+	vecy[0].elements.Flt[N] = y;
 	N ++;
 	if (N >= Npts) {
 	  Npts += 100;
-	  REALLOCATE (vecx[0].elements, float, MAX (Npts, 1));
-	  REALLOCATE (vecy[0].elements, float, MAX (Npts, 1));
+	  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npts, 1));
+	  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npts, 1));
 	}
       }
@@ -59,11 +59,11 @@
 	max = TRUE;
 	xmax = x - (zo - zt)/(v[x - 1 + y*Nx] - zt);
-	vecx[0].elements[N] = xmax;
-	vecy[0].elements[N] = y;
+	vecx[0].elements.Flt[N] = xmax;
+	vecy[0].elements.Flt[N] = y;
 	N ++;
 	if (N >= Npts) {
 	  Npts += 100;
-	  REALLOCATE (vecx[0].elements, float, MAX (Npts, 1));
-	  REALLOCATE (vecy[0].elements, float, MAX (Npts, 1));
+	  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npts, 1));
+	  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npts, 1));
 	}
       }
@@ -86,11 +86,11 @@
 	min = TRUE;
 	xmin = x + (zo - zt)/(v[x + 1 + y*Nx] - zt);
-	vecx[0].elements[N] = xmin;
-	vecy[0].elements[N] = y;
+	vecx[0].elements.Flt[N] = xmin;
+	vecy[0].elements.Flt[N] = y;
 	N ++;
 	if (N >= Npts) {
 	  Npts += 100;
-	  REALLOCATE (vecx[0].elements, float, MAX (Npts, 1));
-	  REALLOCATE (vecy[0].elements, float, MAX (Npts, 1));
+	  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npts, 1));
+	  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npts, 1));
 	}
       }
@@ -104,11 +104,11 @@
 	max = TRUE;
 	xmax = x - (zo - zt)/(v[x - 1 + y*Nx] - zt);
-	vecx[0].elements[N] = xmax;
-	vecy[0].elements[N] = y;
+	vecx[0].elements.Flt[N] = xmax;
+	vecy[0].elements.Flt[N] = y;
 	N ++;
 	if (N >= Npts) {
 	  Npts += 100;
-	  REALLOCATE (vecx[0].elements, float, MAX (Npts, 1));
-	  REALLOCATE (vecy[0].elements, float, MAX (Npts, 1));
+	  REALLOCATE (vecx[0].elements.Flt, opihi_flt, MAX (Npts, 1));
+	  REALLOCATE (vecy[0].elements.Flt, opihi_flt, MAX (Npts, 1));
 	}
       }
