Index: trunk/Ohana/src/opihi/cmd.astro/biassub.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/biassub.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/biassub.c	(revision 20936)
@@ -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);
 
@@ -90,10 +91,9 @@
 
   if (!NoVector) {
-    xvec[0].Nelements = yvec[0].Nelements = nlong;
-    REALLOCATE (xvec[0].elements, float, nlong);
-    REALLOCATE (yvec[0].elements, float, nlong);
+    ResetVector (xvec, OPIHI_FLT, nlong);
+    ResetVector (yvec, 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: trunk/Ohana/src/opihi/cmd.astro/cgrid.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 20936)
@@ -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); \
   }
 
@@ -95,8 +95,8 @@
   
   /* prepare vectors to hold data */
+  N = 0;
   NELEMENTS = 200;
-  ALLOCATE (Xvec.elements, float, NELEMENTS);
-  ALLOCATE (Yvec.elements, float, NELEMENTS);
-  N = 0;
+  SetVector (&Xvec, OPIHI_FLT, NELEMENTS);
+  SetVector (&Yvec, OPIHI_FLT, NELEMENTS);
   
   /***  do consecutive RA lines, first increasing **/
@@ -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, &Xvec, &Yvec, &graphmode);
+
+  free (Xvec.elements.Ptr);
+  free (Yvec.elements.Ptr);
   return (TRUE);
 
Index: trunk/Ohana/src/opihi/cmd.astro/coords.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/coords.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/coords.c	(revision 20936)
@@ -56,4 +56,6 @@
       return (FALSE);
     }
+    REQUIRE_VECTOR_FLT (xvec, FALSE); 
+    REQUIRE_VECTOR_FLT (yvec, FALSE); 
     form = VECTOR;
   }      
@@ -89,5 +91,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 +97,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: trunk/Ohana/src/opihi/cmd.astro/cplot.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 20936)
@@ -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;
@@ -23,4 +23,7 @@
   if ((yvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
 
+  REQUIRE_VECTOR_FLT (xvec, FALSE); 
+  REQUIRE_VECTOR_FLT (yvec, FALSE); 
+
   if (xvec[0].Nelements != yvec[0].Nelements) {
     gprint (GP_ERR, "vectors are not the same length\n");
@@ -28,18 +31,15 @@
   }
 
-  ALLOCATE (Xvec.elements, float, xvec[0].Nelements);
-  ALLOCATE (Yvec.elements, float, xvec[0].Nelements);
-    
-  Xvec.Nelements = xvec[0].Nelements;
-  Yvec.Nelements = xvec[0].Nelements;
+  SetVector (&Xvec, OPIHI_FLT, xvec[0].Nelements);
+  SetVector (&Yvec, OPIHI_FLT, 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;
   for (i = 0; i < Xvec.Nelements; i++, r++, d++) {
-      *r = ohana_normalize_angle (*r);
+    *r = ohana_normalize_angle (*r);
     while (*r < Rmin) *r += 360.0;
     while (*r > Rmax) *r -= 360.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, &Xvec, &Yvec, &graphmode);
   
-  free (Xvec.elements);
-  free (Yvec.elements);
+  free (Xvec.elements.Ptr);
+  free (Yvec.elements.Ptr);
     
   return (TRUE);
Index: trunk/Ohana/src/opihi/cmd.astro/csystem.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/csystem.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/csystem.c	(revision 20936)
@@ -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,12 @@
   }
   
-  xptr = xvec[0].elements;
-  yptr = yvec[0].elements;
+  CastVector (xvec, OPIHI_FLT);
+  CastVector (yvec, OPIHI_FLT);
+
+  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: trunk/Ohana/src/opihi/cmd.astro/czplot.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/czplot.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/czplot.c	(revision 20936)
@@ -3,7 +3,7 @@
 int czplot (int argc, char **argv) {
   
-  int i, kapa, Npts;
+  int i, kapa;
   double min, range, Rmin, Rmax;
-  float *in, *out, *r, *d, *x, *y;
+  opihi_flt *out, *r, *d, *x, *y;
   Vector Xvec, Yvec, Zvec, *xvec, *yvec, *zvec;
   Graphdata graphmode;
@@ -26,4 +26,8 @@
   if ((zvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
 
+  REQUIRE_VECTOR_FLT (xvec, FALSE); 
+  REQUIRE_VECTOR_FLT (yvec, FALSE); 
+  REQUIRE_VECTOR_FLT (zvec, FALSE); 
+
   if (xvec[0].Nelements != yvec[0].Nelements) {
     gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
@@ -34,21 +38,28 @@
     return (FALSE);
   }
-  Xvec.Nelements = xvec[0].Nelements;
-  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);
+  SetVector (&Xvec, OPIHI_FLT, xvec[0].Nelements);
+  SetVector (&Yvec, OPIHI_FLT, xvec[0].Nelements);
+  SetVector (&Zvec, OPIHI_FLT, xvec[0].Nelements);
   
-  r   = xvec[0].elements;
-  d   = yvec[0].elements;
-  in  = zvec[0].elements;
-  x   = Xvec.elements;
-  y   = Yvec.elements;
-  out = Zvec.elements;
-  for (i = 0; i < Zvec.Nelements; i++, in++, out++, r++, d++, x++, y++) {
-    *out = MIN (1.0, MAX (0.01, (*in - min) / range));
+  r   = xvec[0].elements.Flt;
+  d   = yvec[0].elements.Flt;
+  x   = Xvec.elements.Flt;
+  y   = Yvec.elements.Flt;
+  for (i = 0; i < Zvec.Nelements; i++, r++, d++, x++, y++) {
     *r = ohana_normalize_angle (*r);
-    fRD_to_XY (x, y, *r, *d, &graphmode.coords);
+    RD_to_XY (x, y, *r, *d, &graphmode.coords);
+  }
+
+  out = Zvec.elements.Flt;
+  if (zvec->type == OPIHI_FLT) {
+    opihi_flt *in  = zvec[0].elements.Flt;
+    for (i = 0; i < Zvec.Nelements; i++, in++, out++) {
+      *out = MIN (1.0, MAX (0.01, (*in - min) / range));
+    }
+  } else {
+    opihi_int *in  = zvec[0].elements.Int;
+    for (i = 0; i < Zvec.Nelements; i++, in++, out++) {
+      *out = MIN (1.0, MAX (0.01, (*in - min) / range));
+    }
   }
 
@@ -56,10 +67,9 @@
   graphmode.size = -1; /* point size determined by Zvec */
   graphmode.etype = 0;
-  Npts = Xvec.Nelements;
-  PlotVectorTriplet (kapa, Npts, Xvec.elements, Yvec.elements, Zvec.elements, &graphmode);
+  PlotVectorTriplet (kapa, &Xvec, &Yvec, &Zvec, &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: trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-fgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-qfgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-qrgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-rgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-serbulge.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-serbulge.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-serbulge.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-sersic.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-sersic.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-sersic.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-tgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-vgauss.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/imfit.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 20936)
@@ -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: trunk/Ohana/src/opihi/cmd.astro/multifit.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/multifit.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/multifit.c	(revision 20936)
@@ -46,18 +46,25 @@
     sprintf (name, "c%d", i);
     if ((Nc[i]  = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape;
+    ResetVector (Nc[i], OPIHI_FLT, 1); 
     sprintf (name, "Mb%d", i);
     if ((NMb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (NMb[i], FALSE); 
     sprintf (name, "mb%d", i);
     if ((Nmb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nmb[i], FALSE); 
     sprintf (name, "wb%d", i);
     if ((Nwb[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nwb[i], FALSE); 
   }
   for (i = 0; i < Norder - 1; i++) {
     sprintf (name, "ml%d", i);
     if ((Nml[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nml[i], FALSE); 
     sprintf (name, "mh%d", i);
     if ((Nmh[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nmh[i], FALSE); 
     sprintf (name, "wo%d", i);
     if ((Nwo[i] = SelectVector (name, OLDVECTOR, TRUE)) == NULL) goto escape;
+    REQUIRE_VECTOR_FLT (Nwo[i], FALSE); 
   }
 
@@ -72,5 +79,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 +90,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 +101,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 +130,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 +153,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: trunk/Ohana/src/opihi/cmd.astro/precess.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/precess.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/precess.c	(revision 20936)
@@ -90,7 +90,14 @@
   }
   
-  for (i = 0; i < xvec[0].Nelements; i++) {
-    A = xvec[0].elements[i];
-    D = yvec[0].elements[i];
+  // cast xvec or yvec to FLT if it is type INT
+  CastVector (xvec, OPIHI_FLT);
+  CastVector (yvec, OPIHI_FLT);
+
+  opihi_flt *Av = xvec[0].elements.Flt;
+  opihi_flt *Dv = yvec[0].elements.Flt;
+
+  for (i = 0; i < xvec[0].Nelements; i++, Av, Dv) {
+    A = *Av;
+    D = *Dv;
     SD =  cos(RAD_DEG*A + zeta)*sin(theta)*cos(RAD_DEG*D) + cos(theta)*sin(RAD_DEG*D);
     CD = sqrt (1 - SD*SD);
@@ -101,9 +108,8 @@
     RA  = DEG_RAD*atan2(SA, CA) + z;
 
-    if (RA < 0)
-      RA += 360;
+    if (RA < 0) RA += 360;
     
-    xvec[0].elements[i] = RA;
-    yvec[0].elements[i] = DEC; 
+    *Av = RA;
+    *Dv = DEC; 
   }
 
Index: trunk/Ohana/src/opihi/cmd.astro/profile.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/profile.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/profile.c	(revision 20936)
@@ -28,8 +28,8 @@
   if ((yvec = SelectVector (argv[3], ANYVECTOR, TRUE)) == NULL) return (FALSE);
 
-  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);
+  ResetVector (xvec, OPIHI_FLT, (int)SQ(2*N+1));
+  ResetVector (yvec, OPIHI_FLT, (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: trunk/Ohana/src/opihi/cmd.astro/spec.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/spec.c	(revision 19823)
+++ trunk/Ohana/src/opihi/cmd.astro/spec.c	(revision 20936)
@@ -55,8 +55,6 @@
 
   N = y2 - y1;
-  REALLOCATE (xvec[0].elements, float, N);
-  REALLOCATE (yvec[0].elements, float, N);
-  xvec[0].Nelements = N;
-  yvec[0].Nelements = N;
+  ResetVector (xvec, OPIHI_FLT, N);
+  ResetVector (yvec, OPIHI_FLT, N);
   
   ALLOCATE (buffer, float, Nlong);
@@ -103,6 +101,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));
   }    
