Index: trunk/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- trunk/Ohana/src/libfits/include/gfitsio.h	(revision 15487)
+++ trunk/Ohana/src/libfits/include/gfitsio.h	(revision 15647)
@@ -152,5 +152,5 @@
 void   	gfits_set_matrix_value         PROTO((Matrix *matrix, int x, int y, double value)); 
 int     gfits_write_matrix             PROTO((char *filename, Matrix *matrix)); 
-int     gfits_uncompress_image 	       PROTO((Header *header, Matrix *matrix, FTable *ftable, int primary));
+int     gfits_uncompress_image 	       PROTO((Header *header, Matrix *matrix, FTable *ftable));
 int     gfits_uncompress_data  	       PROTO((char *zdata, int Nzdata, char *cmptype, char **optname, char **optvalue, int Nopt, char *outdata, int *Nout, int out_pixsize));
 int     gfits_distribute_data  	       PROTO((Matrix *matrix, int bitpix, char *data, int Ndata, int *otile, int *ztile, float zscale, float zzero));
Index: trunk/Ohana/src/libfits/matrix/F_compress_M.c
===================================================================
--- trunk/Ohana/src/libfits/matrix/F_compress_M.c	(revision 15487)
+++ trunk/Ohana/src/libfits/matrix/F_compress_M.c	(revision 15647)
@@ -28,5 +28,5 @@
   return (FALSE); }
 
-int gfits_uncompress_image (Header *header, Matrix *matrix, FTable *ftable, int primary) {
+int gfits_uncompress_image (Header *header, Matrix *matrix, FTable *ftable) {
 
   int i, j, status, zimage, zcol, Nzrows, Nout, Nzdata, max_tile_size, bytes_per_pixel;
@@ -103,9 +103,17 @@
   // XXX is Noptions set to the correct value?
   // XXX get ZMASKCMP 
-  // XXX can primary be defined on basis of the header?
-
-  if (primary) {
-    // XXX SIMPLE & XTENSION need to be set on the first line
-    if (!gfits_scan (header, "ZSIMPLE", "%t", 1, &header->simple)) ESCAPE;
+
+  int zsimple, have_zsimple;
+  int have_ztension;
+
+  have_zsimple  = gfits_scan (header, "ZSIMPLE", "%t", 1, &zsimple);
+  have_ztension = gfits_scan (header, "ZTENSION", "%s", 1, exttype);
+
+  if (!have_zsimple && !have_ztension) ESCAPE;
+  if ( have_zsimple &&  have_ztension) ESCAPE;
+
+  // have_zsimple : image comes from a PHU
+  if (have_zsimple) {
+    header->simple = zsimple;
     gfits_delete (header, "ZSIMPLE", 1);
     gfits_extended_to_primary (header, header->simple, "Image data");
@@ -114,8 +122,7 @@
     MOD_KEYWORD ("ZBLOCKED", "BLOCKED",  "%t", &header->extend, header->extend);
   } else {
-    // XXX XTENSION needs to be set on the first line
-    if (!gfits_scan (header, "ZTENSION", "%s", 1, exttype)) ESCAPE;
     gfits_delete (header, "ZTENSION", 1);
     gfits_modify_extended (header, exttype, "Image extension");
+    // XXX validate that exttype == 'IMAGE'?
 
     MOD_KEYWORD ("ZPCOUNT",  "PCOUNT",   "%d", &header->pcount, header->pcount);
