Index: /trunk/Ohana/src/addstar/include/addstar.h
===================================================================
--- /trunk/Ohana/src/addstar/include/addstar.h	(revision 16982)
+++ /trunk/Ohana/src/addstar/include/addstar.h	(revision 16983)
@@ -105,8 +105,9 @@
 double 	Latitude;       // carried into image structure from config
 double 	Longitude;      // carried into image structure from config
-Coords *MOSAIC;         // carries the mosaic into gstars
 double  FAKE_RA;        // boresite coords for fake images
 double  FAKE_DEC;       // boresite coords for fake images
 double  FAKE_THETA;     // boresite angle for fake images
+
+// carries the mosaic into gstars
 
 /* these globals are used separately by both client and server (KEEP) */
Index: /trunk/Ohana/src/addstar/src/ReadImageHeader.c
===================================================================
--- /trunk/Ohana/src/addstar/src/ReadImageHeader.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/ReadImageHeader.c	(revision 16983)
@@ -33,5 +33,5 @@
   /* only load astrometry, NAXIS1,2, and time if this is a MOSAIC_PHU (ctype is ....-DIS) */
   if (!strcmp (&image[0].coords.ctype[4], "-DIS")) {
-    MOSAIC = &image[0].coords;
+    RegisterMosaic (&image[0].coords);
     return (TRUE);
   }
@@ -47,9 +47,8 @@
   }
   if (!strcmp (&image[0].coords.ctype[4], "-WRP")) {
-    if (MOSAIC == NULL) {
+    if (!isRegisteredMosaic()) {
       fprintf (stderr, "no mosaic for WRP image (use -mosaic)\n");
       return (FALSE);
     }
-    RegisterMosaic (MOSAIC);
   } else {
     /* force image to lie in 0-360 range */
Index: /trunk/Ohana/src/addstar/src/addstar.c
===================================================================
--- /trunk/Ohana/src/addstar/src/addstar.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/addstar.c	(revision 16983)
@@ -61,5 +61,4 @@
     case M_FAKEIMAGE:
       images = fakeimage (argv[1], &Nimages, options.photcode);
-      RegisterMosaic (MOSAIC);
       ALLOCATE (skylist, SkyList, 1);
       skylist[0].Nregions = 0;
Index: /trunk/Ohana/src/addstar/src/addstarc.c
===================================================================
--- /trunk/Ohana/src/addstar/src/addstarc.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/addstarc.c	(revision 16983)
@@ -8,4 +8,5 @@
   Stars *stars;
   Image *images;
+  Coords MOSAIC;
 
   /* load config and options */
@@ -31,5 +32,6 @@
       Send_Image (BindSocket, images, Nimages, FALSE);
       if (options.mosaic) {
-	Send_Coords (BindSocket, MOSAIC, 1, FALSE);
+	GetRegisteredMosaic (&MOSAIC);
+	Send_Coords (BindSocket, &MOSAIC, 1, FALSE);
       }
       Send_Stars (BindSocket, stars, Nstars, FALSE);
Index: /trunk/Ohana/src/addstar/src/args.c
===================================================================
--- /trunk/Ohana/src/addstar/src/args.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/args.c	(revision 16983)
@@ -112,9 +112,8 @@
   }
   /* provide a mosaic for distortion */
-  MOSAIC = NULL;
   options.mosaic = FALSE;
   if ((N = get_argument (argc, argv, "-mosaic"))) {
     Header header;
-    ALLOCATE (MOSAIC, Coords, 1);
+    Coords MOSAIC;
 
     remove_argument (N, &argc, argv);
@@ -123,12 +122,13 @@
       exit (1);
     }
-    if (!GetCoords (MOSAIC, &header)) {
+    if (!GetCoords (&MOSAIC, &header)) {
       fprintf (stderr, "ERROR: no astrometric solution in header\n");
       exit (1);
     }
-    if (strcmp(&MOSAIC[0].ctype[4], "-DIS")) {
+    if (strcmp(&MOSAIC.ctype[4], "-DIS")) {
       fprintf (stderr, "ERROR: not a mosaic distortion header\n");
       exit (1);
     }
+    RegisterMosaic (&MOSAIC);
     remove_argument (N, &argc, argv);
     gfits_free_header (&header);
Index: /trunk/Ohana/src/addstar/src/args_client.c
===================================================================
--- /trunk/Ohana/src/addstar/src/args_client.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/args_client.c	(revision 16983)
@@ -62,9 +62,8 @@
   }
   /* provide a mosaic for distortion */
-  MOSAIC = NULL;
   options.mosaic = FALSE;
   if ((N = get_argument (argc, argv, "-mosaic"))) {
     Header header;
-    ALLOCATE (MOSAIC, Coords, 1);
+    Coords MOSAIC;
 
     remove_argument (N, &argc, argv);
@@ -73,12 +72,13 @@
       exit (1);
     }
-    if (!GetCoords (MOSAIC, &header)) {
+    if (!GetCoords (&MOSAIC, &header)) {
       fprintf (stderr, "ERROR: no astrometric solution in header\n");
       exit (1);
     }
-    if (strcmp(&MOSAIC[0].ctype[4], "-DIS")) {
+    if (strcmp(&MOSAIC.ctype[4], "-DIS")) {
       fprintf (stderr, "ERROR: not a mosaic distortion header\n");
       exit (1);
     }
+    RegisterMosaic (&MOSAIC);
     remove_argument (N, &argc, argv);
     gfits_free_header (&header);
Index: /trunk/Ohana/src/addstar/src/fakeimage.c
===================================================================
--- /trunk/Ohana/src/addstar/src/fakeimage.c	(revision 16982)
+++ /trunk/Ohana/src/addstar/src/fakeimage.c	(revision 16983)
@@ -12,4 +12,5 @@
   Image *image;
   e_time MosaicTime;
+  Coords MOSAIC;
 
   /* this is a somewhat bogus method to set a time for the exposure */
@@ -33,31 +34,32 @@
 
   /* create a mosaic distortion structure */
-  ALLOCATE (MOSAIC, Coords, 1);
-  strcpy (MOSAIC[0].ctype, "RA---DIS");
-  MOSAIC[0].crval1 = FAKE_RA;
-  MOSAIC[0].crval2 = FAKE_DEC;
+  strcpy (MOSAIC.ctype, "RA---DIS");
+  MOSAIC.crval1 = FAKE_RA;
+  MOSAIC.crval2 = FAKE_DEC;
   
-  MOSAIC[0].crpix1 = MOSAIC[0].crpix2 = 0.0;
+  MOSAIC.crpix1 = MOSAIC.crpix2 = 0.0;
   
   /* mosaic 'pixels' are millimeters */
   ScanConfig (config, "PLATE_SCALE",   "%lf", 0, &pltscale);
-  MOSAIC[0].cdelt1 = MOSAIC[0].cdelt2 = pltscale / 3600.0;
+  MOSAIC.cdelt1 = MOSAIC.cdelt2 = pltscale / 3600.0;
 
-  MOSAIC[0].pc1_1 =  cos(FAKE_THETA*RAD_DEG);
-  MOSAIC[0].pc1_2 = -sin(FAKE_THETA*RAD_DEG);
-  MOSAIC[0].pc2_1 =  sin(FAKE_THETA*RAD_DEG);
-  MOSAIC[0].pc2_2 =  cos(FAKE_THETA*RAD_DEG);
+  MOSAIC.pc1_1 =  cos(FAKE_THETA*RAD_DEG);
+  MOSAIC.pc1_2 = -sin(FAKE_THETA*RAD_DEG);
+  MOSAIC.pc2_1 =  sin(FAKE_THETA*RAD_DEG);
+  MOSAIC.pc2_2 =  cos(FAKE_THETA*RAD_DEG);
 
-  MOSAIC[0].Npolyterms = 3;
+  MOSAIC.Npolyterms = 3;
   for (i = 0; i < 7; i++) {
-    MOSAIC[0].polyterms[i][0] = 0;
-    MOSAIC[0].polyterms[i][1] = 0;
+    MOSAIC.polyterms[i][0] = 0;
+    MOSAIC.polyterms[i][1] = 0;
   }
   ScanConfig (config, "DPLATE_X",   "%lf", 0, &pltscale);
-  MOSAIC[0].polyterms[3][0] = pltscale;  // L : X^3 Y^0
-  MOSAIC[0].polyterms[5][0] = pltscale;  // L : X^1 Y^2
+  MOSAIC.polyterms[3][0] = pltscale;  // L : X^3 Y^0
+  MOSAIC.polyterms[5][0] = pltscale;  // L : X^1 Y^2
   ScanConfig (config, "DPLATE_Y",   "%lf", 0, &pltscale);
-  MOSAIC[0].polyterms[4][1] = pltscale;  // M : X^0 Y^0
-  MOSAIC[0].polyterms[6][1] = pltscale;  // M : X^2 Y^0
+  MOSAIC.polyterms[4][1] = pltscale;  // M : X^0 Y^0
+  MOSAIC.polyterms[6][1] = pltscale;  // M : X^2 Y^0
+
+  RegisterMosaic (&MOSAIC);
 
   /* some basic data about the chisp */
@@ -160,6 +162,6 @@
   strcpy (image[0].name, rootname);
 
-  image[0].coords = MOSAIC[0];
-  strcpy (image[0].coords.ctype, MOSAIC[0].ctype);
+  image[0].coords = MOSAIC;
+  strcpy (image[0].coords.ctype, MOSAIC.ctype);
 
   image[0].sidtime  = 0.0;
