Index: trunk/Ohana/src/libdvo/include/libdvo_astro.h
===================================================================
--- trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 39225)
+++ trunk/Ohana/src/libdvo/include/libdvo_astro.h	(revision 39245)
@@ -138,4 +138,5 @@
 } Image;
 
+CoordTransform *AllocTransform (double phi, double Xo, double xo);
 CoordTransform *InitTransform (CoordTransformSystem input, CoordTransformSystem output);
 int ApplyTransform (double *x, double *y, double X, double Y, CoordTransform *transform);
Index: trunk/Ohana/src/libdvo/src/coord_systems.c
===================================================================
--- trunk/Ohana/src/libdvo/src/coord_systems.c	(revision 39225)
+++ trunk/Ohana/src/libdvo/src/coord_systems.c	(revision 39245)
@@ -1,4 +1,28 @@
 # include "dvo.h"
     
+CoordTransform *AllocTransform (double phi, double Xo, double xo) {
+
+  CoordTransform *transform;
+  ALLOCATE (transform, CoordTransform, 1);
+  transform->isIdentity = FALSE;
+  
+  transform->phi = phi*RAD_DEG;
+  transform->Xo  = Xo*RAD_DEG;
+  transform->xo  = xo;
+
+  // pre-calculated constants:
+  transform->sin_phi_cos_Xo = sin(transform->phi)*cos(transform->Xo);
+  transform->sin_phi_sin_Xo = sin(transform->phi)*sin(transform->Xo);
+  transform->cos_phi        = cos(transform->phi);
+  
+  transform->cos_phi_cos_Xo = cos(transform->phi)*cos(transform->Xo);
+  transform->cos_phi_sin_Xo = cos(transform->phi)*sin(transform->Xo);
+  transform->sin_phi        = sin(transform->phi);
+  transform->cos_Xo 	    = cos(transform->Xo);
+  transform->sin_Xo 	    = sin(transform->Xo);
+
+  return transform;
+}
+
 CoordTransform *InitTransform (CoordTransformSystem input, CoordTransformSystem output) {
 
