? mapscript/csharp/Makefile
? mapscript/java/Makefile
Index: mapcontext.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapcontext.c,v
retrieving revision 1.79
diff -U3 -r1.79 mapcontext.c
--- mapcontext.c	21 Jan 2007 17:45:54 -0000	1.79
+++ mapcontext.c	22 Feb 2007 08:09:41 -0000
@@ -1145,12 +1145,12 @@
   layerObj *layer;
 
   /* Init new layer */
-  layer = &(map->layers[map->numlayers]);
+  layer = &(GET_LAYER(map, map->numlayers));
   initLayer(layer, map);
   layer->map = (mapObj *)map;
   layer->type = MS_LAYER_RASTER;
   /* save the index */
-  map->layers[map->numlayers].index = map->numlayers;
+  GET_LAYER(map, map->numlayers)->index = map->numlayers;
   map->layerorder[map->numlayers] = map->numlayers;
   map->numlayers++;
   
@@ -1919,48 +1919,48 @@
   /* Loop on all layer   */
   for(i=0; i<map->numlayers; i++)
   {
-      if(map->layers[i].status != MS_DELETE && map->layers[i].connectiontype == MS_WMS)
+      if(GET_LAYER(map, i)->status != MS_DELETE && GET_LAYER(map, i)->connectiontype == MS_WMS)
       {
-          if(map->layers[i].status == MS_OFF)
+          if(GET_LAYER(map, i)->status == MS_OFF)
               nValue = 1;
           else
               nValue = 0;
           msIO_fprintf(stream, "    <Layer queryable=\"%d\" hidden=\"%d\">\n", 
-                  msIsLayerQueryable(&(map->layers[i])), nValue);
+                  msIsLayerQueryable(&(GET_LAYER(map, i))), nValue);
 
           /*  */
           /* Server definition */
           /*  */
           if(nVersion <= OWS_1_0_0 )
-              msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+              msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                        NULL, "wms_server_version", OWS_WARN,
                              "      <Server service=\"WMS\" version=\"%s\" ",
                                        "1.0.0");
           else
-              msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+              msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                        NULL, "wms_server_version", OWS_WARN,
                           "      <Server service=\"OGC:WMS\" version=\"%s\" ",
                                        "1.0.0");
-          if(map->layers[i].name)
-              msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+          if(GET_LAYER(map, i)->name)
+              msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                        NULL, "wms_title", OWS_NOERR, 
-                                       "title=\"%s\">\n", map->layers[i].name);
+                                       "title=\"%s\">\n", GET_LAYER(map, i)->name);
           else
           {
-              msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+              msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                        NULL, "wms_title", OWS_NOERR, 
                                        "title=\"%s\">\n", "");
           }
 
           /* Get base url of the online resource to be the default value */
-          if(map->layers[i].connection)
-              pszValue = strdup( map->layers[i].connection );
+          if(GET_LAYER(map, i)->connection)
+              pszValue = strdup( GET_LAYER(map, i)->connection );
           else
               pszValue = strdup( "" );
           pszChar = strchr(pszValue, '?');
           if( pszChar )
               pszValue[pszChar - pszValue] = '\0';
-          if(msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+          if(msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                       NULL, "wms_onlineresource", OWS_WARN, 
          "        <OnlineResource xlink:type=\"simple\" xlink:href=\"%s\"/>\n",
                                       pszValue) == OWS_WARN)
@@ -1973,15 +1973,15 @@
           /*  */
           /* Layer information */
           /*  */
-          msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+          msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                              NULL, "wms_name", OWS_WARN, 
                              "      <Name>%s</Name>\n", 
-                             map->layers[i].name);
-          msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+                             GET_LAYER(map, i)->name);
+          msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                              NULL, "wms_title", OWS_WARN, 
                              "      <Title>%s</Title>\n", 
-                             map->layers[i].name);
-          msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+                             GET_LAYER(map, i)->name);
+          msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                              NULL, "wms_abstract", OWS_NOERR, 
                              "      <Abstract>%s</Abstract>\n", 
                              NULL);
@@ -1989,7 +1989,7 @@
           /* DataURL */
           if(nVersion <= OWS_0_1_4)
           {
-              msOWSPrintEncodeMetadata(stream, &(map->layers[i].metadata), 
+              msOWSPrintEncodeMetadata(stream, &(GET_LAYER(map, i)->metadata), 
                                  NULL, "wms_dataurl", OWS_NOERR, 
                                  "      <DataURL>%s</DataURL>\n", 
                                  NULL);
@@ -2002,7 +2002,7 @@
               /* Note: in version 0.1.7 the width and height are not included  */
               /* in the Context file, but they are included in the metadata for */
               /* for consistency with the URLType. */
-              msOWSPrintURLType(stream, &(map->layers[i].metadata), "MO", 
+              msOWSPrintURLType(stream, &(GET_LAYER(map, i)->metadata), "MO", 
                                 "dataurl", OWS_NOERR, NULL, "DataURL", NULL, 
                                 " width=\"%s\"", " height=\"%s\"",
                                 " format=\"%s\"", 
@@ -2016,7 +2016,7 @@
           /* The MetadataURL have a width, height, format and an URL */
           /* The metadata will be structured like this:  */
           /* "width height format url" */
-          msOWSPrintURLType(stream, &(map->layers[i].metadata), "MO", 
+          msOWSPrintURLType(stream, &(GET_LAYER(map, i)->metadata), "MO", 
                             "metadataurl", OWS_NOERR, NULL, "MetadataURL",NULL,
                             " width=\"%s\"", " height=\"%s\""," format=\"%s\"",
                             "        <OnlineResource xlink:type=\"simple\""
@@ -2025,18 +2025,18 @@
                             MS_TRUE, NULL, NULL, NULL, NULL, NULL, "      ");
 
           /* MinScale && MaxScale */
-          if(nVersion >= OWS_1_1_0 && map->layers[i].minscale > 0)
+          if(nVersion >= OWS_1_1_0 && GET_LAYER(map, i)->minscale > 0)
               msIO_fprintf(stream, 
                "      <sld:MinScaleDenominator>%g</sld:MinScaleDenominator>\n",
-                           map->layers[i].minscale);
-          if(nVersion >= OWS_1_1_0 && map->layers[i].maxscale > 0)
+                           GET_LAYER(map, i)->minscale);
+          if(nVersion >= OWS_1_1_0 && GET_LAYER(map, i)->maxscale > 0)
               msIO_fprintf(stream, 
                "      <sld:MaxScaleDenominator>%g</sld:MaxScaleDenominator>\n",
-                           map->layers[i].maxscale);
+                           GET_LAYER(map, i)->maxscale);
 
           /* Layer SRS */
-          pszValue = (char*)msOWSGetEPSGProj(&(map->layers[i].projection), 
-                                             &(map->layers[i].metadata),
+          pszValue = (char*)msOWSGetEPSGProj(&(GET_LAYER(map, i)->projection), 
+                                             &(GET_LAYER(map, i)->metadata),
                                              "MO", MS_FALSE);
           if(pszValue && (strcasecmp(pszValue, "(null)") != 0))
           {
@@ -2046,12 +2046,12 @@
           }
 
           /* Format */
-          if(msLookupHashTable(&(map->layers[i].metadata),"wms_formatlist")==NULL && 
-             msLookupHashTable(&(map->layers[i].metadata),"wms_format")==NULL)
+          if(msLookupHashTable(&(GET_LAYER(map, i)->metadata),"wms_formatlist")==NULL && 
+             msLookupHashTable(&(GET_LAYER(map, i)->metadata),"wms_format")==NULL)
           {
               pszURL = NULL;
-              if(map->layers[i].connection)
-                  pszURL = strdup( map->layers[i].connection );
+              if(GET_LAYER(map, i)->connection)
+                  pszURL = strdup( GET_LAYER(map, i)->connection );
               else
                   pszURL = strdup( "" );
               pszValue = pszURL;
@@ -2079,12 +2079,12 @@
               char **papszFormats;
               int numFormats, nForm;
 
-              pszValue = msLookupHashTable(&(map->layers[i].metadata), 
+              pszValue = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                            "wms_formatlist");
               if(!pszValue)
-                  pszValue = msLookupHashTable(&(map->layers[i].metadata), 
+                  pszValue = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                                "wms_format");
-              pszCurrent = msLookupHashTable(&(map->layers[i].metadata), 
+              pszCurrent = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                              "wms_format");
 
               papszFormats = split(pszValue, ',', &numFormats);
@@ -2111,14 +2111,14 @@
           }
           /* Style */
           /* First check the stylelist */
-          pszValue = msLookupHashTable(&(map->layers[i].metadata), 
+          pszValue = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                        "wms_stylelist");
           if(pszValue == NULL || strlen(trimLeft(pszValue)) < 1)
           {
               /* Check if the style is in the connection URL */
               pszURL = "";
-              if(map->layers[i].connection)
-                  pszURL = strdup( map->layers[i].connection );
+              if(GET_LAYER(map, i)->connection)
+                  pszURL = strdup( GET_LAYER(map, i)->connection );
               else
                   pszURL = strdup( "" );
               pszValue = pszURL;
@@ -2132,8 +2132,8 @@
                       pszValue[pszChar - pszValue] = '\0';
 
                   /* Check the SLD string from the URL */
-                  if(map->layers[i].connection)
-                      pszSLD2 = strdup(map->layers[i].connection);
+                  if(GET_LAYER(map, i)->connection)
+                      pszSLD2 = strdup(GET_LAYER(map, i)->connection);
                   else
                       pszSLD2 = strdup( "" );
                   if(pszSLD2)
@@ -2215,9 +2215,9 @@
           {
               /* If the style information is not in the connection URL, */
               /* read the metadata. */
-              pszValue = msLookupHashTable(&(map->layers[i].metadata), 
+              pszValue = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                            "wms_stylelist");
-              pszCurrent = msLookupHashTable(&(map->layers[i].metadata), 
+              pszCurrent = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                              "wms_style");
               msIO_fprintf( stream, "      <StyleList>\n");
               /* Loop in each style in the style list */
@@ -2238,12 +2238,12 @@
                   /* Write SLDURL if it is in the metadata */
                   pszStyleItem = (char*)malloc(strlen(pszStyle)+10+10);
                   sprintf(pszStyleItem, "wms_style_%s_sld", pszStyle);
-                  if(msLookupHashTable(&(map->layers[i].metadata),
+                  if(msLookupHashTable(&(GET_LAYER(map, i)->metadata),
                                        pszStyleItem) != NULL)
                   {
                       msIO_fprintf(stream, "          <SLD>\n");
                       msOWSPrintEncodeMetadata(stream, 
-                                               &(map->layers[i].metadata),
+                                               &(GET_LAYER(map, i)->metadata),
                                                NULL, pszStyleItem, 
                                                OWS_NOERR, 
      "            <OnlineResource xlink:type=\"simple\" xlink:href=\"%s\"/>\n",
@@ -2255,11 +2255,11 @@
                   {
                       /* If the URL is not there, check for SLDBody */
                       sprintf(pszStyleItem, "wms_style_%s_sld_body", pszStyle);
-                      if(msLookupHashTable(&(map->layers[i].metadata),
+                      if(msLookupHashTable(&(GET_LAYER(map, i)->metadata),
                                            pszStyleItem) != NULL)
                       {
                           msIO_fprintf(stream, "          <SLD>\n");
-                          msOWSPrintMetadata(stream,&(map->layers[i].metadata),
+                          msOWSPrintMetadata(stream,&(GET_LAYER(map, i)->metadata),
                                              NULL, pszStyleItem, OWS_NOERR, 
                                              "            %s\n", NULL);
                           msIO_fprintf(stream, "          </SLD>\n");
@@ -2279,7 +2279,7 @@
                           sprintf(pszStyleItem, "wms_style_%s_title",pszStyle);
                           /* Title */
                           msOWSPrintEncodeMetadata(stream, 
-                                                   &(map->layers[i].metadata), 
+                                                   &(GET_LAYER(map, i)->metadata), 
                                                    NULL, pszStyleItem, 
                                                    OWS_NOERR, 
                                         "          <Title>%s</Title>\n",
@@ -2290,7 +2290,7 @@
                           pszStyleItem = (char*)malloc(strlen(pszStyle)+10+20);
                           sprintf(pszStyleItem, "style_%s_legendurl",
                                   pszStyle);
-                          msOWSPrintURLType(stream, &(map->layers[i].metadata),
+                          msOWSPrintURLType(stream, &(GET_LAYER(map, i)->metadata),
                                             "M", pszStyleItem, OWS_NOERR, NULL,
                                             "LegendURL", NULL, " width=\"%s\"",
                                             " height=\"%s\""," format=\"%s\"",
@@ -2317,9 +2317,9 @@
           /* Dimension element */;
           pszCurrent = NULL;
 
-          pszValue = msLookupHashTable(&(map->layers[i].metadata), 
+          pszValue = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                        "wms_dimensionlist");
-          pszCurrent = msLookupHashTable(&(map->layers[i].metadata), 
+          pszCurrent = msLookupHashTable(&(GET_LAYER(map, i)->metadata), 
                                          "wms_dimension");
           while(pszValue != NULL)
           {
@@ -2338,7 +2338,7 @@
               }
 
               /* From the dimension list, extract the required dimension */
-              msOWSGetDimensionInfo(&(map->layers[i]), pszDimension, 
+              msOWSGetDimensionInfo(&(GET_LAYER(map, i)), pszDimension, 
                                     &pszDimUserValue, &pszDimUnits, 
                                     &pszDimDefault, &pszDimNearValue, 
                                     &pszDimUnitSymbol, &pszDimMultiValue);
Index: mapcopy.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapcopy.c,v
retrieving revision 1.46
diff -U3 -r1.46 mapcopy.c
--- mapcopy.c	26 May 2006 21:46:27 -0000	1.46
+++ mapcopy.c	22 Feb 2007 08:09:42 -0000
@@ -878,9 +878,9 @@
     MS_COPYSTELEM(numlayers);
 
     for (i = 0; i < dst->numlayers; i++) {
-        initLayer(&(dst->layers[i]), dst);
+        initLayer((GET_LAYER(dst, i)), dst);
 
-        return_value = msCopyLayer(&(dst->layers[i]), &(src->layers[i]));
+        return_value = msCopyLayer((GET_LAYER(dst, i)), (GET_LAYER(src, i)));
         if (return_value != MS_SUCCESS) {
             msSetError(MS_MEMERR, "Failed to copy layer.", "msCopyMap()");
             return MS_FAILURE;
Index: mapdraw.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapdraw.c,v
retrieving revision 1.109
diff -U3 -r1.109 mapdraw.c
--- mapdraw.c	17 Jan 2007 04:21:18 -0000	1.109
+++ mapdraw.c	22 Feb 2007 08:09:46 -0000
@@ -217,7 +217,7 @@
   int i;
 
   for(i=0; i<map->numlayers; i++)
-    msClearLayerPenValues(&(map->layers[i]));
+    msClearLayerPenValues((GET_LAYER(map, i)));
 
   msClearLegendPenValues(&(map->legend));
   msClearScalebarPenValues(&(map->scalebar));
@@ -360,12 +360,12 @@
 
     /* compute layer scale factors now */
     for(i=0;i<map->numlayers; i++) {
-      if(map->layers[i].sizeunits != MS_PIXELS)
-        map->layers[i].scalefactor = (msInchesPerUnit(map->layers[i].sizeunits,0)/msInchesPerUnit(map->units,0)) / geo_cellsize;
-      else if(map->layers[i].symbolscale > 0 && map->scale > 0)
-        map->layers[i].scalefactor = map->layers[i].symbolscale/map->scale;
+      if(GET_LAYER(map, i)->sizeunits != MS_PIXELS)
+        GET_LAYER(map, i)->scalefactor = (msInchesPerUnit(GET_LAYER(map, i)->sizeunits,0)/msInchesPerUnit(map->units,0)) / geo_cellsize;
+      else if(GET_LAYER(map, i)->symbolscale > 0 && map->scale > 0)
+        GET_LAYER(map, i)->scalefactor = GET_LAYER(map, i)->symbolscale/map->scale;
       else
-        map->layers[i].scalefactor = 1;
+        GET_LAYER(map, i)->scalefactor = 1;
     }
 
     return image;
@@ -421,10 +421,10 @@
     for(i=0; i<map->numlayers; i++) 
     {
         if (map->layerorder[i] == -1 || 
-            !msLayerIsVisible(map, &(map->layers[map->layerorder[i]])))
+            !msLayerIsVisible(map, &(GET_LAYER(map, map->layerorder[i]))))
             continue;
 
-        lp = &(map->layers[ map->layerorder[i]]);
+        lp = &(GET_LAYER(map,  map->layerorder[i]));
 
 #ifdef USE_WMS_LYR
         if (lp->connectiontype == MS_WMS)
@@ -473,7 +473,7 @@
     for(i=0; i<map->numlayers; i++) {
 
         if (map->layerorder[i] != -1) {
-            lp = &(map->layers[ map->layerorder[i]]);
+            lp = (GET_LAYER(map,  map->layerorder[i]));
 
             if(lp->postlabelcache) /* wait to draw */
                 continue;
@@ -602,7 +602,7 @@
 
   for(i=0; i<map->numlayers; i++) { /* for each layer, check for postlabelcache layers */
 
-    lp = &(map->layers[map->layerorder[i]]);
+    lp = (GET_LAYER(map, map->layerorder[i]));
 
     if(!lp->postlabelcache)
       continue;
@@ -734,16 +734,16 @@
 
   /* compute layer scale factors now */
   for(i=0;i<map->numlayers; i++) {
-    if(map->layers[i].sizeunits != MS_PIXELS)
-      map->layers[i].scalefactor = (msInchesPerUnit(map->layers[i].sizeunits,0)/msInchesPerUnit(map->units,0)) / map->cellsize; 
-    else if(map->layers[i].symbolscale > 0 && map->scale > 0)
-      map->layers[i].scalefactor = map->layers[i].symbolscale/map->scale;
+    if(GET_LAYER(map, i)->sizeunits != MS_PIXELS)
+      GET_LAYER(map, i)->scalefactor = (msInchesPerUnit(GET_LAYER(map, i)->sizeunits,0)/msInchesPerUnit(map->units,0)) / map->cellsize; 
+    else if(GET_LAYER(map, i)->symbolscale > 0 && map->scale > 0)
+      GET_LAYER(map, i)->scalefactor = GET_LAYER(map, i)->symbolscale/map->scale;
     else
-      map->layers[i].scalefactor = 1;
+      GET_LAYER(map, i)->scalefactor = 1;
   }
 
   for(i=0; i<map->numlayers; i++) {
-    lp = &(map->layers[ map->layerorder[i]]);
+    lp = (GET_LAYER(map,  map->layerorder[i]));
 
     if(lp->postlabelcache) /* wait to draw */
       continue;
@@ -762,7 +762,7 @@
     return(NULL);
 
   for(i=0; i<map->numlayers; i++) { /* for each layer, check for postlabelcache layers */
-    lp = &(map->layers[ map->layerorder[i]]);
+    lp = (GET_LAYER(map,  map->layerorder[i]));
 
     if(!lp->postlabelcache)
       continue;
Index: mapfile.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapfile.c,v
retrieving revision 1.337
diff -U3 -r1.337 mapfile.c
--- mapfile.c	29 Dec 2006 05:26:35 -0000	1.337
+++ mapfile.c	22 Feb 2007 08:09:54 -0000
@@ -471,9 +471,9 @@
   if(!name) return(-1);
 
   for(i=0;i<map->numlayers; i++) {
-    if(!map->layers[i].name) /* skip it */
+    if(!GET_LAYER(map, i)->name) /* skip it */
       continue;
-    if(strcmp(name, map->layers[i].name) == 0)
+    if(strcmp(name, GET_LAYER(map, i)->name) == 0)
       return(i);
   }
   return(-1);
@@ -2440,6 +2440,10 @@
 */
 int initLayer(layerObj *layer, mapObj *map)
 {
+  if (layer==NULL) {
+    msSetError(MS_MEMERR, "Layer is null", "initLayer()");
+    return(-1);
+  }
   layer->debug = MS_OFF;
 
   layer->numclasses = 0;
@@ -2552,6 +2556,7 @@
 
 void freeLayer(layerObj *layer) {
   int i;
+  if (!layer) return;
 
   msFree(layer->name);
   msFree(layer->group);
@@ -4336,11 +4341,15 @@
 */
 int initMap(mapObj *map)
 {
+  int i=0;
   map->numlayers = 0;
-  if((map->layers = (layerObj *)malloc(sizeof(layerObj)*MS_MAXLAYERS)) == NULL) {
+  if((map->layers = (layerObj **)malloc(sizeof(layerObj*)*MS_MAXLAYERS)) == NULL) {
     msSetError(MS_MEMERR, NULL, "initMap()");
     return(-1);
   }
+  for (i=0;i<MS_MAXLAYERS;i++) {
+	map->layers[i]=NULL;
+  }
 
   map->debug = MS_OFF;
   map->status = MS_ON;
@@ -4553,8 +4562,8 @@
 
   for(i=0; i<map->numlayers; i++)
   {
-      writeLayer(&(map->layers[map->layerorder[i]]), stream);
-      /* writeLayer(&(map->layers[i]), stream); */
+      writeLayer((GET_LAYER(map, map->layerorder[i])), stream);
+      /* writeLayer(&(GET_LAYER(map, i)), stream); */
   }
 
   fprintf(stream, "END\n");
@@ -4660,11 +4669,11 @@
 
       /* step through layers and classes to resolve symbol names */
       for(i=0; i<map->numlayers; i++) {
-        for(j=0; j<map->layers[i].numclasses; j++){
-	  for(k=0; k<map->layers[i].class[j].numstyles; k++) {
-            if(map->layers[i].class[j].styles[k].symbolname) {
-              if((map->layers[i].class[j].styles[k].symbol =  msGetSymbolIndex(&(map->symbolset), map->layers[i].class[j].styles[k].symbolname, MS_TRUE)) == -1) {
-                msSetError(MS_MISCERR, "Undefined overlay symbol \"%s\" in class %d, style %d of layer %s.", "msLoadMap()", map->layers[i].class[j].styles[k].symbolname, j, k, map->layers[i].name);
+        for(j=0; j<GET_LAYER(map, i)->numclasses; j++){
+	  for(k=0; k<GET_LAYER(map, i)->class[j].numstyles; k++) {
+            if(GET_LAYER(map, i)->class[j].styles[k].symbolname) {
+              if((GET_LAYER(map, i)->class[j].styles[k].symbol =  msGetSymbolIndex(&(map->symbolset), GET_LAYER(map, i)->class[j].styles[k].symbolname, MS_TRUE)) == -1) {
+                msSetError(MS_MISCERR, "Undefined overlay symbol \"%s\" in class %d, style %d of layer %s.", "msLoadMap()", GET_LAYER(map, i)->class[j].styles[k].symbolname, j, k, GET_LAYER(map, i)->name);
                 return(NULL);
               }
             }
@@ -4730,8 +4739,15 @@
 	    msSetError(MS_IDENTERR, "Maximum number of layers reached.", "msLoadMap()");
 	    return(NULL);
       }
-      if(loadLayer(&(map->layers[map->numlayers]), map) == -1) return(NULL);
-      map->layers[map->numlayers].index = map->numlayers; /* save the index */
+      //printf("New layer=%d %p\n",map->numlayers,map->layers[map->numlayers]);
+      map->layers[map->numlayers]=(layerObj*)malloc(sizeof(layerObj));
+      //printf("After new layer=%d %p\n",map->numlayers,map->layers[map->numlayers]);
+      if (GET_LAYER(map, map->numlayers) == NULL) {
+           msSetError(MS_MEMERR, "Malloc of a new layer failed.", "msLoadMap()");
+	   return(NULL);
+      }
+      if(loadLayer((GET_LAYER(map, map->numlayers)), map) == -1) return(NULL);
+      GET_LAYER(map, map->numlayers)->index = map->numlayers; /* save the index */
       /* Update the layer order list with the layer's index. */
       map->layerorder[map->numlayers] = map->numlayers;
       map->numlayers++;
@@ -4917,7 +4933,7 @@
     case(LAYER):      
       if(getInteger(&i) == -1) break;
       if(i>=map->numlayers || i<0) break;
-      loadLayerString(map, &(map->layers[i]), value);
+      loadLayerString(map, (GET_LAYER(map, i)), value);
       break;
     case(LEGEND):
       loadLegendString(map, &(map->legend), value);
@@ -4962,7 +4978,7 @@
     case(MS_STRING):
       i = msGetLayerIndex(map, msyytext);
       if(i>=map->numlayers || i<0) break;
-      loadLayerString(map, &(map->layers[i]), value);
+      loadLayerString(map, (GET_LAYER(map, i)), value);
       break;
     case(TRANSPARENT):
       msyystate = 2; msyystring = value;
@@ -5114,7 +5130,7 @@
   layerObj *lp;
 
   for (i=0;i<map->numlayers;i++) {
-    lp = &(map->layers[i]);
+    lp = (GET_LAYER(map, i));
 
     /* If the vtable is null, then the layer is never accessed or used -> skip it
      */
Index: mapgd.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapgd.c,v
retrieving revision 1.140
diff -U3 -r1.140 mapgd.c
--- mapgd.c	13 Feb 2007 16:46:17 -0000	1.140
+++ mapgd.c	22 Feb 2007 08:09:59 -0000
@@ -184,7 +184,7 @@
   if(gdImageTrueColor(image->img.gd)) return;
 
   for(i=0; i<map->numlayers; i++) {
-    lp = &(map->layers[i]);
+    lp = (GET_LAYER(map, i));
     if(lp->status == MS_ON || lp->status == MS_DEFAULT) {
       for(j=0; j<lp->numclasses; j++) {
         cp = &(lp->class[j]);
@@ -3249,7 +3249,7 @@
 
     cachePtr = &(map->labelcache.labels[l]); /* point to right spot in the label cache */
 
-    layerPtr = &(map->layers[cachePtr->layerindex]); /* set a couple of other pointers, avoids nasty references */
+    layerPtr = (GET_LAYER(map, cachePtr->layerindex)); /* set a couple of other pointers, avoids nasty references */
     labelPtr = &(cachePtr->label);
 
     if(!cachePtr->text || strlen(cachePtr->text) == 0)
Index: mapgml.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapgml.c,v
retrieving revision 1.96
diff -U3 -r1.96 mapgml.c
--- mapgml.c	22 Aug 2006 23:14:13 -0000	1.96
+++ mapgml.c	22 Feb 2007 08:10:02 -0000
@@ -1424,7 +1424,7 @@
 
   /* step through the layers looking for query results */
   for(i=0; i<map->numlayers; i++) {
-    lp = &(map->layers[map->layerorder[i]]);
+    lp = (GET_LAYER(map, map->layerorder[i]));
 
     if(lp->dump == MS_TRUE && lp->resultcache && lp->resultcache->numresults > 0) { /* found results */
 
@@ -1575,7 +1575,7 @@
   /* step through the layers looking for query results */
   for(i=0; i<map->numlayers; i++) {
 
-    lp = &(map->layers[map->layerorder[i]]);
+    lp = &(GET_LAYER(map, map->layerorder[i]));
 
     if(lp->dump == MS_TRUE && lp->resultcache && lp->resultcache->numresults > 0)  { /* found results */
       char *layerName;      
Index: map.h
===================================================================
RCS file: /data2/cvsroot/mapserver/map.h,v
retrieving revision 1.472
diff -U3 -r1.472 map.h
--- map.h	22 Jan 2007 14:47:24 -0000	1.472
+++ map.h	22 Feb 2007 08:10:05 -0000
@@ -403,6 +403,8 @@
 
 #define MS_ENCRYPTION_KEY_SIZE  16   /* Key size: 128 bits = 16 bytes */
 
+#define GET_LAYER(map, pos) map->layers[pos]
+
 #endif
 
 /* General enumerated types - needed by scripts */
@@ -1133,7 +1135,7 @@
   int maxsize;
 
 #ifndef SWIG
-  layerObj *layers;
+  layerObj **layers;
 #endif /* SWIG */
 
 #ifdef SWIG
Index: mapimagemap.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapimagemap.c,v
retrieving revision 1.29
diff -U3 -r1.29 mapimagemap.c
--- mapimagemap.c	29 Aug 2006 19:34:59 -0000	1.29
+++ mapimagemap.c	22 Feb 2007 08:10:09 -0000
@@ -1877,7 +1877,7 @@
 
     cachePtr = &(map->labelcache.labels[l]); /* point to right spot in the label cache */
 
-    layerPtr = &(map->layers[cachePtr->layerindex]); /* set a couple of other pointers, avoids nasty references */
+    layerPtr = (GET_LAYER(map, cachePtr->layerindex)); /* set a couple of other pointers, avoids nasty references */
     labelPtr = &(cachePtr->label);
 
     if(!cachePtr->text || strlen(cachePtr->text) == 0)
Index: maplabel.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maplabel.c,v
retrieving revision 1.86
diff -U3 -r1.86 maplabel.c
--- maplabel.c	6 Sep 2006 05:26:18 -0000	1.86
+++ maplabel.c	22 Feb 2007 08:10:12 -0000
@@ -105,8 +105,8 @@
   }
 
   cachePtr = &(map->labelcache.labels[map->labelcache.numlabels]); /* set up a few pointers for clarity */
-  layerPtr = &(map->layers[layerindex]);
-  classPtr = &(map->layers[layerindex].class[classindex]);
+  layerPtr = (GET_LAYER(map, layerindex));
+  classPtr = &(GET_LAYER(map, layerindex)->class[classindex]);
 
   if( label == NULL )
       label = &(classPtr->label);
Index: maplegend.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maplegend.c,v
retrieving revision 1.62
diff -U3 -r1.62 maplegend.c
--- maplegend.c	4 Aug 2006 04:36:12 -0000	1.62
+++ maplegend.c	22 Feb 2007 08:10:14 -0000
@@ -289,7 +289,7 @@
   ** allocate heights array
   */
   for(i=0; i<map->numlayers; i++) {
-    lp = &(map->layers[map->layerorder[i]]);
+    lp = (GET_LAYER(map, map->layerorder[i]));
 
     if((lp->status == MS_OFF) || (lp->type == MS_LAYER_QUERY)) /* skip it */
       continue;
@@ -310,7 +310,7 @@
   */
   n=0;
   for(i=0; i<map->numlayers; i++) { /* Need to find the longest legend label string */
-    lp = &(map->layers[map->layerorder[i]]);
+    lp = (GET_LAYER(map, map->layerorder[i]));
 
     if((lp->status == MS_OFF) || (lp->type == MS_LAYER_QUERY)) /* skip it */
       continue;
@@ -375,7 +375,7 @@
     
   /* for(i=0; i<map->numlayers; i++) { */
   for(i=map->numlayers-1; i>=0; i--) {
-    lp = &(map->layers[map->layerorder[i]]); /* for brevity */
+    lp = (GET_LAYER(map, map->layerorder[i])); /* for brevity */
 
     if((lp->numclasses == 0) || (lp->status == MS_OFF) || (lp->type == MS_LAYER_QUERY))
       continue; /* skip this layer */
@@ -490,33 +490,33 @@
     l = map->numlayers;
     map->numlayers++;
 
-    if(initLayer(&(map->layers[l]), map) == -1) return(-1);
-    map->layers[l].name = strdup("__embed__legend");
-    map->layers[l].type = MS_LAYER_ANNOTATION;
+    if(initLayer((GET_LAYER(map, l)), map) == -1) return(-1);
+    GET_LAYER(map, l)->name = strdup("__embed__legend");
+    GET_LAYER(map, l)->type = MS_LAYER_ANNOTATION;
 
-    if(initClass(&(map->layers[l].class[0])) == -1) return(-1);
-    map->layers[l].numclasses = 1; /* so we make sure to free it */
+    if(initClass(&(GET_LAYER(map, l)->class[0])) == -1) return(-1);
+    GET_LAYER(map, l)->numclasses = 1; /* so we make sure to free it */
         
     /* update the layer order list with the layer's index. */
     map->layerorder[l] = l;
   }
 
-  map->layers[l].status = MS_ON;
+  GET_LAYER(map, l)->status = MS_ON;
 
-  map->layers[l].class[0].numstyles = 1;
-  map->layers[l].class[0].styles[0].symbol = s;
-  map->layers[l].class[0].styles[0].color.pen = -1;
-  map->layers[l].class[0].label.force = MS_TRUE;
-  map->layers[l].class[0].label.size = MS_MEDIUM; /* must set a size to have a valid label definition */
+  GET_LAYER(map, l)->class[0].numstyles = 1;
+  GET_LAYER(map, l)->class[0].styles[0].symbol = s;
+  GET_LAYER(map, l)->class[0].styles[0].color.pen = -1;
+  GET_LAYER(map, l)->class[0].label.force = MS_TRUE;
+  GET_LAYER(map, l)->class[0].label.size = MS_MEDIUM; /* must set a size to have a valid label definition */
 
   if(map->legend.postlabelcache) /* add it directly to the image */
-    msDrawMarkerSymbolGD(&map->symbolset, img, &point, &(map->layers[l].class[0].styles[0]), 1.0);
+    msDrawMarkerSymbolGD(&map->symbolset, img, &point, &(GET_LAYER(map, l)->class[0].styles[0]), 1.0);
   else
     msAddLabel(map, l, 0, -1, -1, &point, NULL, " ", 1.0, NULL);
 
   /* Mark layer as deleted so that it doesn't interfere with html legends or */
   /* with saving maps */
-  map->layers[l].status = MS_DELETE;
+  GET_LAYER(map, l)->status = MS_DELETE;
 
   return(0);
 }
Index: mapmygis.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapmygis.c,v
retrieving revision 1.21
diff -U3 -r1.21 mapmygis.c
--- mapmygis.c	26 May 2006 21:46:27 -0000	1.21
+++ mapmygis.c	22 Feb 2007 08:10:21 -0000
@@ -341,7 +341,7 @@
 
   /* TODO: there is an issue with layer order since it's possible that layers to be rendered out of order */
   for (i=0;i<layer->index;i++) { 	/* check all layers previous to this one */
-    lp = &(layer->map->layers[i]);
+    lp = &(GET_LAYER(layer->map, i));
 
     if (lp == layer) continue;
 
Index: mapobject.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapobject.c,v
retrieving revision 1.29
diff -U3 -r1.29 mapobject.c
--- mapobject.c	22 Nov 2006 19:53:12 -0000	1.29
+++ mapobject.c	22 Feb 2007 08:10:22 -0000
@@ -203,8 +203,13 @@
   freeReferenceMap(&(map->reference));
   freeLegend(&(map->legend));  
 
-  for(i=0; i<map->numlayers; i++)
-    freeLayer(&(map->layers[i]));
+  //for(i=0; i<map->numlayers; i++)
+  for(i=0; i<MS_MAXLAYERS; i++) {
+    if (GET_LAYER(map, i)!=NULL) {
+    	freeLayer((GET_LAYER(map, i)));
+    	free(GET_LAYER(map, i));
+    }
+  }
   msFree(map->layers);
 
   if (map->layerorder)
@@ -475,7 +480,7 @@
     map->projection.gt.geotransform[5] *= -1;
 
     for(i=0; i<map->numlayers; i++)
-        map->layers[i].project = MS_TRUE;
+        GET_LAYER(map, i)->project = MS_TRUE;
 
     return InvGeoTransform( map->projection.gt.geotransform, 
                             map->projection.gt.invgeotransform );
@@ -524,10 +529,10 @@
         return -1;
     }
     else if (nIndex < 0) { /* Insert at the end by default */
-        initLayer(&(map->layers[map->numlayers]), map);
-        msCopyLayer(&(map->layers[map->numlayers]), layer);
+        initLayer((GET_LAYER(map, map->numlayers)), map);
+        msCopyLayer((GET_LAYER(map, map->numlayers)), layer);
         map->layerorder[map->numlayers] = map->numlayers;
-        map->layers[map->numlayers].index = map->numlayers;
+        GET_LAYER(map, map->numlayers)->index = map->numlayers;
         map->numlayers++;
         return map->numlayers-1;
     }
@@ -536,17 +541,17 @@
         /* Copy layers existing at the specified nIndex or greater */
         /* to an index one higher */
         for (i=map->numlayers; i>nIndex; i--) {
-            if (i<map->numlayers) freeLayer(&(map->layers[i]));
-            initLayer(&(map->layers[i]), map);
-            msCopyLayer(&(map->layers[i]), &(map->layers[i-1]));
-            map->layers[i].index = i;
+            if (i<map->numlayers) freeLayer((GET_LAYER(map, i)));
+            initLayer((GET_LAYER(map, i)), map);
+            msCopyLayer((GET_LAYER(map, i)), (GET_LAYER(map, i-1)));
+            GET_LAYER(map, i)->index = i;
         }
 
         /* copy new layer to specified index */
-        freeLayer(&(map->layers[nIndex]));
-        initLayer(&(map->layers[nIndex]), map);
-        msCopyLayer(&(map->layers[nIndex]), layer);
-        map->layers[nIndex].index = nIndex;
+        freeLayer((GET_LAYER(map, nIndex)));
+        initLayer((GET_LAYER(map, nIndex)), map);
+        msCopyLayer((GET_LAYER(map, nIndex)), layer);
+        GET_LAYER(map, nIndex)->index = nIndex;
 
         /* adjust layers drawing order */
         for (i=map->numlayers; i>nIndex; i--) {
@@ -592,17 +597,17 @@
             return NULL;
         }
         initLayer(layer, NULL);
-        msCopyLayer(layer, &(map->layers[nIndex]));
+        msCopyLayer(layer, (GET_LAYER(map, nIndex)));
         
         /* Iteratively copy the higher index layers down one index */
         for (i=nIndex; i<map->numlayers-1; i++) {
-            freeLayer(&(map->layers[i]));
-            initLayer(&(map->layers[i]), map);
-            msCopyLayer(&map->layers[i], &map->layers[i+1]);
-            map->layers[i].index = i;
+            freeLayer((GET_LAYER(map, i)));
+            initLayer((GET_LAYER(map, i)), map);
+            msCopyLayer(GET_LAYER(map, i), GET_LAYER(map, i+1));
+            GET_LAYER(map, i)->index = i;
         }
         /* Free the extra layer at the end */
-        freeLayer(&(map->layers[map->numlayers-1]));
+        freeLayer((GET_LAYER(map, map->numlayers-1)));
         
         /* Adjust drawing order */
         order_index = 0;
Index: mapogcfilter.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapogcfilter.c,v
retrieving revision 1.68
diff -U3 -r1.68 mapogcfilter.c
--- mapogcfilter.c	4 Jan 2007 14:27:05 -0000	1.68
+++ mapogcfilter.c	22 Feb 2007 08:10:27 -0000
@@ -363,7 +363,7 @@
         && !bPointQuery && !bShapeQuery && (bOnlySpatialFilter == MS_FALSE))
       return NULL;
 
-    lp = &(map->layers[iLayerIndex]);
+    lp = &(GET_LAYER(map, iLayerIndex));
 
     if (szExpression)
     {
@@ -647,7 +647,7 @@
         iLayerIndex > map->numlayers-1)
       return;
 
-    psLayer = &(map->layers[iLayerIndex]);
+    psLayer = &(GET_LAYER(map, iLayerIndex));
     if (psLayer->resultcache)
     {
         if (psLayer->resultcache->results)
@@ -749,7 +749,7 @@
     if (!map || iLayerIndex < 0 || iLayerIndex > map->numlayers-1)
       return NULL;
 
-     psLayer = &(map->layers[iLayerIndex]);
+     psLayer = &(GET_LAYER(map, iLayerIndex));
      if (psLayer->template == NULL)
        psLayer->template = strdup("ttt.html");
 
@@ -986,7 +986,7 @@
 
     char *pszBuffer = NULL;
 
-    lp = &(map->layers[iLayerIndex]);
+    lp = &(GET_LAYER(map, iLayerIndex));
 
     /* if there is a bbox use it */
     szEPSG = FLTGetBBOX(psNode, &sQueryRect);
@@ -1184,7 +1184,7 @@
     int nResults = 0;
     layerObj *psLayer = NULL;
 
-    psLayer = &(map->layers[iLayerIndex]);
+    psLayer = &(GET_LAYER(map, iLayerIndex));
     panResults = FLTGetQueryResults(psNode, map, iLayerIndex,
                                     &nResults, bOnlySpatialFilter);
     if (panResults) 
Index: mapogcsld.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapogcsld.c,v
retrieving revision 1.79
diff -U3 -r1.79 mapogcsld.c
--- mapogcsld.c	13 Feb 2007 04:18:16 -0000	1.79
+++ mapogcsld.c	22 Feb 2007 08:10:34 -0000
@@ -417,7 +417,7 @@
             }
 
             /* compare layer name to wms_name as well */
-            pszTmp = msOWSLookupMetadata(&(map->layers[i].metadata), "MO", "name");
+            pszTmp = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "MO", "name");
 
             for (j=0; j<nLayers; j++)
             {
@@ -427,10 +427,10 @@
 /*              - layer's labelitem                                     */
 /* -------------------------------------------------------------------- */
                 if ((pszStyleLayerName == NULL && 
-                     ((strcasecmp(map->layers[i].name, pasLayers[j].name) == 0 ||
+                     ((strcasecmp(GET_LAYER(map, i)->name, pasLayers[j].name) == 0 ||
                       (pszTmp && strcasecmp(pszTmp, pasLayers[j].name) == 0))||
-                     (map->layers[i].group && 
-                       strcasecmp(map->layers[i].group, pasLayers[j].name) == 0))) ||
+                     (GET_LAYER(map, i)->group && 
+                       strcasecmp(GET_LAYER(map, i)->group, pasLayers[j].name) == 0))) ||
                     (bUseSpecificLayer && pszStyleLayerName && 
                      strcasecmp(pasLayers[j].name, pszStyleLayerName) == 0))
                 {
@@ -440,44 +440,44 @@
 /*      first rule is the most important (mapserver uses the painter    */
 /*      model)                                                          */
 /* -------------------------------------------------------------------- */
-                    map->layers[i].type = pasLayers[j].type;
-                    map->layers[i].numclasses = 0;
+                    GET_LAYER(map, i)->type = pasLayers[j].type;
+                    GET_LAYER(map, i)->numclasses = 0;
                     iClass = 0;
                     for (k=0; k < pasLayers[j].numclasses; k++)
                     {
-                        initClass(&map->layers[i].class[iClass]);
-                        msCopyClass(&map->layers[i].class[iClass], 
+                        initClass(&GET_LAYER(map, i)->class[iClass]);
+                        msCopyClass(&GET_LAYER(map, i)->class[iClass], 
                                     &pasLayers[j].class[k], NULL);
-                        map->layers[i].class[iClass].layer = &map->layers[i];
-                        map->layers[i].class[iClass].type = map->layers[i].type;
-                        map->layers[i].numclasses++;
+                        GET_LAYER(map, i)->class[iClass].layer = &GET_LAYER(map, i);
+                        GET_LAYER(map, i)->class[iClass].type = GET_LAYER(map, i)->type;
+                        GET_LAYER(map, i)->numclasses++;
                         iClass++;
                     }
 
                     if (pasLayers[j].labelitem)
                     {
-                        if (map->layers[i].labelitem)
-                          free(map->layers[i].labelitem);
+                        if (GET_LAYER(map, i)->labelitem)
+                          free(GET_LAYER(map, i)->labelitem);
 
-                        map->layers[i].labelitem = strdup(pasLayers[j].labelitem);
+                        GET_LAYER(map, i)->labelitem = strdup(pasLayers[j].labelitem);
                     }
 
                     if (pasLayers[j].classitem)
                     {
-                        if (map->layers[i].classitem)
-                          free(map->layers[i].classitem);
+                        if (GET_LAYER(map, i)->classitem)
+                          free(GET_LAYER(map, i)->classitem);
 
-                        map->layers[i].classitem = strdup(pasLayers[j].classitem);
+                        GET_LAYER(map, i)->classitem = strdup(pasLayers[j].classitem);
                     }
                     
                     /* transparency for sld raster (opacity parameter) */
-                    if (map->layers[i].type == MS_LAYER_RASTER && 
+                    if (GET_LAYER(map, i)->type == MS_LAYER_RASTER && 
                         pasLayers[j].transparency != -1)
-                      map->layers[i].transparency = pasLayers[j].transparency;
+                      GET_LAYER(map, i)->transparency = pasLayers[j].transparency;
 
                     /* mark as auto-generate SLD */
-                    if (map->layers[i].connectiontype == MS_WMS)
-                      msInsertHashTable(&(map->layers[i].metadata), 
+                    if (GET_LAYER(map, i)->connectiontype == MS_WMS)
+                      msInsertHashTable(&(GET_LAYER(map, i)->metadata), 
                                         "wms_sld_body", "auto" );
 /* ==================================================================== */
 /*      if the SLD contained a spatial feature, the layerinfo           */
@@ -486,15 +486,15 @@
 /*      rendering the final image.                                      */
 /* ==================================================================== */
                     if (pasLayers[j].layerinfo && 
-                        (map->layers[i].type ==  MS_LAYER_POINT || 
-                         map->layers[i].type == MS_LAYER_LINE ||
-                         map->layers[i].type == MS_LAYER_POLYGON ||
-                         map->layers[i].type == MS_LAYER_ANNOTATION ||
-                         map->layers[i].type == MS_LAYER_TILEINDEX))
+                        (GET_LAYER(map, i)->type ==  MS_LAYER_POINT || 
+                         GET_LAYER(map, i)->type == MS_LAYER_LINE ||
+                         GET_LAYER(map, i)->type == MS_LAYER_POLYGON ||
+                         GET_LAYER(map, i)->type == MS_LAYER_ANNOTATION ||
+                         GET_LAYER(map, i)->type == MS_LAYER_TILEINDEX))
                     {  
                         FilterEncodingNode *psNode = NULL;
 
-                        msInsertHashTable(&(map->layers[i].metadata), 
+                        msInsertHashTable(&(GET_LAYER(map, i)->metadata), 
                                           "tmp_wms_sld_query", "true" );
                         psNode = (FilterEncodingNode *)pasLayers[j].layerinfo;
 
@@ -502,31 +502,31 @@
 /*      set the template on the classes so that the query works         */
 /*      using classes. If there are no classes, set it at the layer level.*/
 /* -------------------------------------------------------------------- */
-                        if (map->layers[i].numclasses > 0)
+                        if (GET_LAYER(map, i)->numclasses > 0)
                         {
-                            for (k=0; k<map->layers[i].numclasses; k++)
+                            for (k=0; k<GET_LAYER(map, i)->numclasses; k++)
                             {
-                                if (!map->layers[i].class[k].template)
-                                  map->layers[i].class[k].template = strdup("ttt.html");
+                                if (!GET_LAYER(map, i)->class[k].template)
+                                  GET_LAYER(map, i)->class[k].template = strdup("ttt.html");
                             }
                         }
-                        else if (!map->layers[i].template)
+                        else if (!GET_LAYER(map, i)->template)
                         {
                             bFreeTemplate = 1;
-                            map->layers[i].template = strdup("ttt.html");
+                            GET_LAYER(map, i)->template = strdup("ttt.html");
                         }
 
-                        nLayerStatus =  map->layers[i].status;
-                        map->layers[i].status = MS_ON;
+                        nLayerStatus =  GET_LAYER(map, i)->status;
+                        GET_LAYER(map, i)->status = MS_ON;
                         FLTApplySpatialFilterToLayer(psNode, map,  
-                                                     map->layers[i].index);
-                        map->layers[i].status = nLayerStatus;
+                                                     GET_LAYER(map, i)->index);
+                        GET_LAYER(map, i)->status = nLayerStatus;
                         FLTFreeFilterEncodingNode(psNode);
 
                         if ( bFreeTemplate)
                         {
-                            free(map->layers[i].template);
-                            map->layers[i].template = NULL;
+                            free(GET_LAYER(map, i)->template);
+                            GET_LAYER(map, i)->template = NULL;
                         }
                     }
                     break;
@@ -3052,7 +3052,7 @@
         {
             for (i=0; i<map->numlayers; i++)
             {
-                pszTmp = msSLDGenerateSLDLayer(&map->layers[i]);
+                pszTmp = msSLDGenerateSLDLayer(&GET_LAYER(map, i));
                 if (pszTmp)
                 {
                     pszSLD= strcatalloc(pszSLD, pszTmp);
@@ -3062,7 +3062,7 @@
         }
         else
         {
-             pszTmp = msSLDGenerateSLDLayer(&map->layers[iLayer]);
+             pszTmp = msSLDGenerateSLDLayer(&GET_LAYER(map, iLayer));
              if (pszTmp)
              {
                  pszSLD = strcatalloc(pszSLD, pszTmp);
Index: mapogcsos.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapogcsos.c,v
retrieving revision 1.18
diff -U3 -r1.18 mapogcsos.c
--- mapogcsos.c	13 Feb 2007 04:39:07 -0000	1.18
+++ mapogcsos.c	22 Feb 2007 08:10:37 -0000
@@ -200,23 +200,23 @@
         for (i=0; i<map->numlayers; i++)
         {
             pszTmp = 
-              msOWSLookupMetadata(&(map->layers[i].metadata), "S", "offering_id");
+              msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", "offering_id");
             if (pszTmp && (strcasecmp(pszTmp, pszOffering) == 0))
             {
                 if (pszProperty)
                 {
                     pszTmp = 
-                      msOWSLookupMetadata(&(map->layers[i].metadata), "S", 
+                      msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", 
                                           "observedProperty_id");
                     if (pszTmp && (strcasecmp(pszTmp, pszProperty) == 0))
                     {
-                        lp = &(map->layers[i]);
+                        lp = &(GET_LAYER(map, i));
                         break;
                     }
                 }
                 else
                 {
-                    lp = &(map->layers[i]);
+                    lp = &(GET_LAYER(map, i));
                     break;
                 }
             }
@@ -1044,7 +1044,7 @@
          
          for (i=0; i<map->numlayers; i++)
          {
-             lp = &(map->layers[i]);
+             lp = &(GET_LAYER(map, i));
              value = msOWSLookupMetadata(&(lp->metadata), "S", "offering_id");
              if (value)
              {
@@ -1082,7 +1082,7 @@
                      if (panOfferingLayers[j] == i) /*first layer of the offering */
                        break;
                  }
-                 lp = &(map->layers[j]); /*first layer*/
+                 lp = &(GET_LAYER(map, j)); /*first layer*/
                  value = msOWSLookupMetadata(&(lp->metadata), "S", "offering_name");
                  if (value)
                  {
@@ -1152,7 +1152,7 @@
                  {
                      if (panOfferingLayers[j] == i)
                      {
-                         value = msOWSLookupMetadata(&(map->layers[j].metadata), "S", 
+                         value = msOWSLookupMetadata(&(GET_LAYER(map, j)->metadata), "S", 
                                              "procedure");
                          if (value)
                          {      
@@ -1187,7 +1187,7 @@
                      if (panOfferingLayers[j] == i)
                      {
                          if ((value = 
-                             msOWSLookupMetadata(&(map->layers[j].metadata), "S", 
+                             msOWSLookupMetadata(&(GET_LAYER(map, j)->metadata), "S", 
                                                  "observedProperty_id")))
                          {
                              for (k=0; k<nProperties; k++)
@@ -1200,7 +1200,7 @@
                                  papszProperties[nProperties] = strdup(value);
                                  nProperties++;
                                  msSOSAddPropertyNode(psOfferingNode, 
-                                                         &(map->layers[j]));
+                                                         &(GET_LAYER(map, j)));
                              }
                          }
                      }
@@ -1399,7 +1399,7 @@
     /*validate if offering exists*/
     for (i=0; i<map->numlayers; i++)
     {
-        pszTmp = msOWSLookupMetadata(&(map->layers[i].metadata), "S", "offering_id");
+        pszTmp = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", "offering_id");
         if (pszTmp && (strcasecmp(pszTmp, pszOffering) == 0))
           break;
     }
@@ -1422,11 +1422,11 @@
     
     for (i=0; i<map->numlayers; i++)
     {
-        pszTmp = msOWSLookupMetadata(&(map->layers[i].metadata), "S", "offering_id");
-        pszTmp2 = msOWSLookupMetadata(&(map->layers[i].metadata), "S", 
+        pszTmp = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", "offering_id");
+        pszTmp2 = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", 
                                       "observedproperty_id");
 
-        map->layers[i].status = MS_OFF;
+        GET_LAYER(map, i)->status = MS_OFF;
         
         if (pszTmp && pszTmp2)
         {
@@ -1438,10 +1438,10 @@
                     {
                         if(strcasecmp(pszTmp2, tokens[j]) == 0)
                         {
-                            map->layers[i].status = MS_ON;
+                            GET_LAYER(map, i)->status = MS_ON;
                             /* Force setting a template to enable query. */
-                            if (!map->layers[i].template)
-                              map->layers[i].template = strdup("ttt.html");
+                            if (!GET_LAYER(map, i)->template)
+                              GET_LAYER(map, i)->template = strdup("ttt.html");
                             bLayerFound = 1;
                             break;
                         }
@@ -1473,13 +1473,13 @@
         {
             for (i=0; i<map->numlayers; i++)
             {
-                if(map->layers[i].status == MS_ON)
+                if(GET_LAYER(map, i)->status == MS_ON)
                 {
-                    pszValue =  msOWSLookupMetadata(&(map->layers[i].metadata), "S",
+                    pszValue =  msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S",
                                                         "procedure");
                     if (!pszValue)
                     {
-                        map->layers[i].status = MS_OFF;
+                        GET_LAYER(map, i)->status = MS_OFF;
                     }
                     else
                     {
@@ -1489,7 +1489,7 @@
                               break;
                         }
                         if (j == n) /*not found*/
-                          map->layers[i].status = MS_OFF;
+                          GET_LAYER(map, i)->status = MS_OFF;
                     }
                 }
             }
@@ -1547,20 +1547,20 @@
         }
         for (i=0; i<map->numlayers; i++)
         {
-            if (map->layers[i].status == MS_ON)
+            if (GET_LAYER(map, i)->status == MS_ON)
             {
                 /* the sos_offering_timeextent should be used for time validation*/
                 /*TODO : too documented  ?*/
                 lpfirst = 
                   msSOSGetFirstLayerForOffering(map, 
-                                                msOWSLookupMetadata(&(map->layers[i].metadata), "S", 
+                                                msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", 
                                                                     "offering_id"),
                                                 NULL);
                 if (lpfirst)
                   pszTimeExtent = 
                     msOWSLookupMetadata(&lpfirst->metadata, "S", "offering_timeextent");
 
-                pszTimeField =  msOWSLookupMetadata(&(map->layers[i].metadata), "SO",
+                pszTimeField =  msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "SO",
                                                     "timeitem");
 
             if (pszTimeField)
@@ -1569,11 +1569,11 @@
                   if (pszTimeExtent)
                   {
                       if (msValidateTimeValue(pszTimeString, pszTimeExtent) == MS_TRUE)
-                        msLayerSetTimeFilter(&(map->layers[i]), pszTimeString, 
+                        msLayerSetTimeFilter(&(GET_LAYER(map, i)), pszTimeString, 
                                              pszTimeField);
                   }
                   else
-                    msLayerSetTimeFilter(&(map->layers[i]), pszTimeString, 
+                    msLayerSetTimeFilter(&(GET_LAYER(map, i)), pszTimeString, 
                                          pszTimeField);
                 }
             }
@@ -1597,7 +1597,7 @@
         /* apply the filter to all layers thar are on*/
         for (i=0; i<map->numlayers; i++)
         {
-            if (map->layers[i].status == MS_ON)
+            if (GET_LAYER(map, i)->status == MS_ON)
               FLTApplyFilterToLayer(psFilterNode, map, i, MS_FALSE);
         }
     }
@@ -1732,10 +1732,10 @@
     /*get the first layers of the offering*/
     for (i=0; i<map->numlayers; i++)
     {
-        pszTmp = msOWSLookupMetadata(&(map->layers[i].metadata), "S", "offering_id");
+        pszTmp = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "S", "offering_id");
         if (pszTmp && (strcasecmp(pszTmp, pszOffering) == 0))
         {
-            lp = &(map->layers[i]);
+            lp = &(GET_LAYER(map, i));
             break;
         }
     }
@@ -1798,16 +1798,16 @@
     /* output result members */
     for (i=0; i<map->numlayers; i++)
     {
-        if (map->layers[i].resultcache && map->layers[i].resultcache->numresults > 0)
+        if (GET_LAYER(map, i)->resultcache && GET_LAYER(map, i)->resultcache->numresults > 0)
         {       
-            if(msLayerOpen(&(map->layers[i])) == MS_SUCCESS)
+            if(msLayerOpen(&(GET_LAYER(map, i))) == MS_SUCCESS)
             {
-                msLayerGetItems(&(map->layers[i]));
-                for(j=0; j<map->layers[i].resultcache->numresults; j++) 
+                msLayerGetItems(&(GET_LAYER(map, i)));
+                for(j=0; j<GET_LAYER(map, i)->resultcache->numresults; j++) 
                 {
-                    msSOSAddMemberNode(psRootNode, map, &(map->layers[i]), j);
+                    msSOSAddMemberNode(psRootNode, map, &(GET_LAYER(map, i)), j);
                 }
-                msLayerClose(&(map->layers[i]));
+                msLayerClose(&(GET_LAYER(map, i)));
             }
         }
     }
@@ -1887,7 +1887,7 @@
     
     for (i=0; i<map->numlayers; i++)
     {
-        lp = &map->layers[i];
+        lp = &GET_LAYER(map, i);
         pszId = msOWSLookupMetadata(&(lp->metadata), "S", "procedure");
         if (pszId && strcasecmp(pszId, pszSensorId) == 0)
         {
Index: mapows.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapows.c,v
retrieving revision 1.73
diff -U3 -r1.73 mapows.c
--- mapows.c	13 Feb 2007 23:18:57 -0000	1.73
+++ mapows.c	22 Feb 2007 08:10:44 -0000
@@ -382,22 +382,22 @@
       int count=1;
       for(j=i+1; j<map->numlayers; j++)
       {
-          if (map->layers[i].name == NULL || map->layers[j].name == NULL)
+          if (GET_LAYER(map, i)->name == NULL || GET_LAYER(map, j)->name == NULL)
           {
               msSetError(MS_MISCERR, 
                          "At least one layer is missing a name in map file.", 
                          "msOWSMakeAllLayersUnique()");
               return MS_FAILURE;
           }
-          if (strcasecmp(map->layers[i].name, map->layers[j].name) == 0 &&
-              msRenameLayer(&(map->layers[j]), ++count) != MS_SUCCESS)
+          if (strcasecmp(GET_LAYER(map, i)->name, GET_LAYER(map, j)->name) == 0 &&
+              msRenameLayer((GET_LAYER(map, j)), ++count) != MS_SUCCESS)
           {
               return MS_FAILURE;
           }
       }
 
       /* Don't forget to rename the first layer if duplicates were found */
-      if (count > 1 && msRenameLayer(&(map->layers[i]), 1) != MS_SUCCESS)
+      if (count > 1 && msRenameLayer((GET_LAYER(map, i)), 1) != MS_SUCCESS)
       {
           return MS_FAILURE;
       }
@@ -895,9 +895,9 @@
 
     for (i=0; i<map->numlayers; i++)
     {
-       if (map->layers[i].group && (strcmp(map->layers[i].group, pszGroupName) == 0) && &(map->layers[i].metadata))
+       if (GET_LAYER(map, i)->group && (strcmp(GET_LAYER(map, i)->group, pszGroupName) == 0) && &(GET_LAYER(map, i)->metadata))
        {
-         if((value = msOWSLookupMetadata(&(map->layers[i].metadata), namespaces, name)))
+         if((value = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), namespaces, name)))
          { 
             encoded = msEncodeHTMLEntities(value);
             msIO_fprintf(stream, format, encoded);
@@ -1596,7 +1596,7 @@
         {
             layerObj *lp;
 
-            lp = &(map->layers[pasReqInfo[iReq].nLayerId]);
+            lp = GET_LAYER(map, pasReqInfo[iReq].nLayerId);
 
             if (lp->connectiontype == MS_WFS)
                 msWFSUpdateRequestInfo(lp, &(pasReqInfo[iReq]));
Index: mappdf.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mappdf.c,v
retrieving revision 1.39
diff -U3 -r1.39 mappdf.c
--- mappdf.c	16 Jan 2006 20:37:15 -0000	1.39
+++ mappdf.c	22 Feb 2007 08:10:48 -0000
@@ -552,7 +552,7 @@
         cachePtr = &(map->labelcache.labels[l]);
 
         /* set a couple of other pointers, avoids nasty references */
-        layerPtr = &(map->layers[cachePtr->layerindex]);
+        layerPtr = &(GET_LAYER(map, cachePtr->layerindex));
         /* classPtr = &(cachePtr->class); */
         labelPtr = &(cachePtr->label);
 
Index: mapquery.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapquery.c,v
retrieving revision 1.91
diff -U3 -r1.91 mapquery.c
--- mapquery.c	2 Feb 2006 01:00:11 -0000	1.91
+++ mapquery.c	22 Feb 2007 08:10:57 -0000
@@ -126,17 +126,17 @@
 
   /* count the number of layers with results */
   for(i=0; i<map->numlayers; i++)
-    if(map->layers[i].resultcache) n++;
+    if(GET_LAYER(map, i)->resultcache) n++;
   fwrite(&n, sizeof(int), 1, stream);
 
   /* now write the result set for each layer */
   for(i=0; i<map->numlayers; i++) {
-    if(map->layers[i].resultcache) {
+    if(GET_LAYER(map, i)->resultcache) {
       fwrite(&i, sizeof(int), 1, stream); /* layer index */
-      fwrite(&(map->layers[i].resultcache->numresults), sizeof(int), 1, stream); /* number of results */
-      fwrite(&(map->layers[i].resultcache->bounds), sizeof(rectObj), 1, stream); /* bounding box */
-      for(j=0; j<map->layers[i].resultcache->numresults; j++)
-	fwrite(&(map->layers[i].resultcache->results[j]), sizeof(resultCacheMemberObj), 1, stream); /* each result */
+      fwrite(&(GET_LAYER(map, i)->resultcache->numresults), sizeof(int), 1, stream); /* number of results */
+      fwrite(&(GET_LAYER(map, i)->resultcache->bounds), sizeof(rectObj), 1, stream); /* bounding box */
+      for(j=0; j<GET_LAYER(map, i)->resultcache->numresults; j++)
+	fwrite(&(GET_LAYER(map, i)->resultcache->results[j]), sizeof(resultCacheMemberObj), 1, stream); /* each result */
     }
   }
 
@@ -171,17 +171,17 @@
     }
     
     /* inialize the results for this layer */
-    map->layers[j].resultcache = (resultCacheObj *)malloc(sizeof(resultCacheObj)); /* allocate and initialize the result cache */
+    GET_LAYER(map, j)->resultcache = (resultCacheObj *)malloc(sizeof(resultCacheObj)); /* allocate and initialize the result cache */
 
-    fread(&(map->layers[j].resultcache->numresults), sizeof(int), 1, stream); /* number of results    */
-    map->layers[j].resultcache->cachesize = map->layers[j].resultcache->numresults;
+    fread(&(GET_LAYER(map, j)->resultcache->numresults), sizeof(int), 1, stream); /* number of results    */
+    GET_LAYER(map, j)->resultcache->cachesize = GET_LAYER(map, j)->resultcache->numresults;
 
-    fread(&(map->layers[j].resultcache->bounds), sizeof(rectObj), 1, stream); /* bounding box */
+    fread(&(GET_LAYER(map, j)->resultcache->bounds), sizeof(rectObj), 1, stream); /* bounding box */
 
-    map->layers[j].resultcache->results = (resultCacheMemberObj *) malloc(sizeof(resultCacheMemberObj)*map->layers[j].resultcache->numresults);
+    GET_LAYER(map, j)->resultcache->results = (resultCacheMemberObj *) malloc(sizeof(resultCacheMemberObj)*GET_LAYER(map, j)->resultcache->numresults);
 
-    for(k=0; k<map->layers[j].resultcache->numresults; k++)
-      fread(&(map->layers[j].resultcache->results[k]), sizeof(resultCacheMemberObj), 1, stream); /* each result */
+    for(k=0; k<GET_LAYER(map, j)->resultcache->numresults; k++)
+      fread(&(GET_LAYER(map, j)->resultcache->results[k]), sizeof(resultCacheMemberObj), 1, stream); /* each result */
   }
 
   fclose(stream);
@@ -202,7 +202,7 @@
     return(MS_FAILURE);
   }
 
-  lp = &(map->layers[qlayer]);
+  lp = (GET_LAYER(map, qlayer));
 
   if(!msIsLayerQueryable(lp)) {
     msSetError(MS_QUERYERR, "Requested layer has no templates defined.", "msQueryByIndex()"); 
@@ -297,7 +297,7 @@
     return(MS_FAILURE);
   }
 
-  lp = &(map->layers[qlayer]);
+  lp = (GET_LAYER(map, qlayer));
 
   /* free any previous search results, do now in case one of the following tests fails */
   if(lp->resultcache) {
@@ -452,7 +452,7 @@
     start = stop = qlayer;
 
   for(l=start; l>=stop; l--) {
-    lp = &(map->layers[l]);
+    lp = (GET_LAYER(map, l));
 
     /* free any previous search results, do it now in case one of the next few tests fail */
     if(lp->resultcache) {
@@ -566,7 +566,7 @@
  
   /* was anything found? */
   for(l=start; l>=stop; l--) {    
-    if(map->layers[l].resultcache && map->layers[l].resultcache->numresults > 0)
+    if(GET_LAYER(map, l)->resultcache && GET_LAYER(map, l)->resultcache->numresults > 0)
       return(MS_SUCCESS);
   }
  
@@ -606,7 +606,7 @@
     msSetError(MS_QUERYERR, "Invalid selection layer index.", "msQueryByFeatures()");
     return(MS_FAILURE);
   }
-  slp = &(map->layers[slayer]);
+  slp = (GET_LAYER(map, slayer));
   if(!slp->resultcache) {
     msSetError(MS_QUERYERR, "Selection layer has not been queried.", "msQueryByFeatures()");
     return(MS_FAILURE);
@@ -623,7 +623,7 @@
   for(l=start; l>=stop; l--) {
     if(l == slayer) continue; /* skip the selection layer */
     
-    lp = &(map->layers[l]);
+    lp = (GET_LAYER(map, l));
 
     /* free any previous search results, do it now in case one of the next few tests fail */
     if(lp->resultcache) {
@@ -806,7 +806,7 @@
   for(l=start; l>=stop; l--) {  
     if(l == slayer) continue; /* skip the selection layer */
 
-    if(map->layers[l].resultcache && map->layers[l].resultcache->numresults > 0)
+    if(GET_LAYER(map, l)->resultcache && GET_LAYER(map, l)->resultcache->numresults > 0)
       return(MS_SUCCESS);
   }
 
@@ -836,7 +836,7 @@
     start = stop = qlayer;
 
   for(l=start; l>=stop; l--) {
-    lp = &(map->layers[l]);    
+    lp = (GET_LAYER(map, l));    
 
     /* free any previous search results, do it now in case one of the next few tests fail */
     if(lp->resultcache) {
@@ -963,7 +963,7 @@
 
   /* was anything found? */
   for(l=start; l>=stop; l--) {    
-    if(map->layers[l].resultcache && map->layers[l].resultcache->numresults > 0)
+    if(GET_LAYER(map, l)->resultcache && GET_LAYER(map, l)->resultcache->numresults > 0)
       return(MS_SUCCESS);
   }
  
@@ -996,7 +996,7 @@
   msComputeBounds(selectshape); /* make sure an accurate extent exists */
  
   for(l=start; l>=stop; l--) { /* each layer */
-    lp = &(map->layers[l]);
+    lp = (GET_LAYER(map, l));
 
     /* free any previous search results, do it now in case one of the next few tests fail */
     if(lp->resultcache) {
@@ -1142,7 +1142,7 @@
 
   /* was anything found? */
   for(l=start; l>=stop; l--) {    
-    if(map->layers[l].resultcache && map->layers[l].resultcache->numresults > 0)
+    if(GET_LAYER(map, l)->resultcache && GET_LAYER(map, l)->resultcache->numresults > 0)
       return(MS_SUCCESS);
   }
  
@@ -1163,7 +1163,7 @@
   
   for(i=0; i<map->numlayers; i++) {
     layerObj *lp;
-    lp = &(map->layers[i]);
+    lp = (GET_LAYER(map, i));
 
     if(!lp->resultcache) continue;
     if(lp->resultcache->numresults <= 0) continue;
@@ -1199,7 +1199,7 @@
     start = stop = qlayer;
 
   for(l=start; l>=stop; l--) {
-    lp = &(map->layers[l]);
+    lp = (GET_LAYER(map, l));
         
     if(lp->resultcache) {
       if(lp->resultcache->results) 
Index: mapraster.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapraster.c,v
retrieving revision 1.137
diff -U3 -r1.137 mapraster.c
--- mapraster.c	24 Sep 2006 02:42:12 -0000	1.137
+++ mapraster.c	22 Feb 2007 08:10:59 -0000
@@ -1396,7 +1396,7 @@
       }
 
     } else
-      tlp = &(layer->map->layers[tilelayerindex]);
+      tlp = (GET_LAYER(layer->map, tilelayerindex));
       
     status = msLayerOpen(tlp);
     if(status != MS_SUCCESS)
Index: maprasterquery.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maprasterquery.c,v
retrieving revision 1.23
diff -U3 -r1.23 maprasterquery.c
--- maprasterquery.c	23 Jun 2006 20:39:19 -0000	1.23
+++ maprasterquery.c	22 Feb 2007 08:11:01 -0000
@@ -1397,7 +1397,7 @@
 /*      Otherwise we invoke the tileindex layers SetTimeFilter          */
 /*      method.                                                         */
 /* -------------------------------------------------------------------- */
-    return msLayerSetTimeFilter( layer->map->layers + tilelayerindex,
+    return msLayerSetTimeFilter( layer->map->layers[tilelayerindex],
                                  timestring, timefield );
 }
 
Index: mapscale.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapscale.c,v
retrieving revision 1.52
diff -U3 -r1.52 mapscale.c
--- mapscale.c	26 Aug 2006 22:04:13 -0000	1.52
+++ mapscale.c	22 Feb 2007 08:11:04 -0000
@@ -452,38 +452,43 @@
     l = map->numlayers;
     map->numlayers++;
 
-    if(initLayer(&(map->layers[l]), map) == -1) return(-1);
-    map->layers[l].name = strdup("__embed__scalebar");
-    map->layers[l].type = MS_LAYER_ANNOTATION;
+    map->layers[l]=(layerObj*)malloc(sizeof(layerObj));
+    if (GET_LAYER(map, l) == NULL) {
+         msSetError(MS_MEMERR, "Malloc of a new layer failed.", "msLoadMap()");
+         return(NULL);
+    }
+    if(initLayer((GET_LAYER(map, l)), map) == -1) return(-1);
+    GET_LAYER(map, l)->name = strdup("__embed__scalebar");
+    GET_LAYER(map, l)->type = MS_LAYER_ANNOTATION;
 
-    if(initClass(&(map->layers[l].class[0])) == -1) return(-1);
-    map->layers[l].numclasses = 1; /* so we make sure to free it */
+    if(initClass(&(GET_LAYER(map, l)->class[0])) == -1) return(-1);
+    GET_LAYER(map, l)->numclasses = 1; /* so we make sure to free it */
     
     /* update the layer order list with the layer's index. */
     map->layerorder[l] = l;
   }
 
   /* to resolve bug 490 */
-  map->layers[l].transparency = MS_GD_ALPHA;
+  GET_LAYER(map, l)->transparency = MS_GD_ALPHA;
   
-  map->layers[l].status = MS_ON;
+  GET_LAYER(map, l)->status = MS_ON;
 
-  map->layers[l].class[0].numstyles = 1;
-  map->layers[l].class[0].styles[0].symbol = s;
-  map->layers[l].class[0].styles[0].color.pen = -1;
-  map->layers[l].class[0].label.force = MS_TRUE;
-  map->layers[l].class[0].label.size = MS_MEDIUM; /* must set a size to have a valid label definition */
+  GET_LAYER(map, l)->class[0].numstyles = 1;
+  GET_LAYER(map, l)->class[0].styles[0].symbol = s;
+  GET_LAYER(map, l)->class[0].styles[0].color.pen = -1;
+  GET_LAYER(map, l)->class[0].label.force = MS_TRUE;
+  GET_LAYER(map, l)->class[0].label.size = MS_MEDIUM; /* must set a size to have a valid label definition */
 
   if(map->scalebar.postlabelcache) /* add it directly to the image //TODO */
   {
-    msDrawMarkerSymbolGD(&map->symbolset, img, &point, &(map->layers[l].class[0].styles[0]), 1.0);
+    msDrawMarkerSymbolGD(&map->symbolset, img, &point, &(GET_LAYER(map, l)->class[0].styles[0]), 1.0);
   }
   else
     msAddLabel(map, l, 0, -1, -1, &point, NULL, " ", 1.0, NULL);
 
   /* Mark layer as deleted so that it doesn't interfere with html legends or */
   /* with saving maps */
-  map->layers[l].status = MS_DELETE;
+  GET_LAYER(map, l)->status = MS_DELETE;
 
   /* Free image (but keep the GD image which is in the symbol cache now) */
   image->img.gd = NULL;
Index: mapserv.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapserv.c,v
retrieving revision 1.155
diff -U3 -r1.155 mapserv.c
--- mapserv.c	13 Feb 2007 04:44:54 -0000	1.155
+++ mapserv.c	22 Feb 2007 08:11:09 -0000
@@ -312,7 +312,7 @@
     sprintf(key,"%s_validation_pattern", msObj->request->ParamNames[i]);
 		
     for(j=0; j<map->numlayers; j++) {
-			value = msLookupHashTable(&(map->layers[j].metadata), key);
+			value = msLookupHashTable(&(GET_LAYER(map, j)->metadata), key);
       if(value) { /* validate parameter value */
         if(msEvalRegex(value, msObj->request->ParamValues[i]) == MS_FALSE) {
           msSetError(MS_WEBERR, "Parameter '%s' value fails to validate.", "loadMap()", msObj->request->ParamNames[i]);
@@ -320,17 +320,17 @@
         }
       }
 
-      if(map->layers[j].data && (strstr(map->layers[j].data, tmpstr) != NULL)) 
-        map->layers[j].data = gsub(map->layers[j].data, tmpstr, msObj->request->ParamValues[i]);
-      if(map->layers[j].tileindex && (strstr(map->layers[j].tileindex, tmpstr) != NULL)) 
-        map->layers[j].tileindex = gsub(map->layers[j].tileindex, tmpstr, msObj->request->ParamValues[i]);
-      if(map->layers[j].connection && (strstr(map->layers[j].connection, tmpstr) != NULL)) 
-        map->layers[j].connection = gsub(map->layers[j].connection, tmpstr, msObj->request->ParamValues[i]);
-      if(map->layers[j].filter.string && (strstr(map->layers[j].filter.string, tmpstr) != NULL)) 
-        map->layers[j].filter.string = gsub(map->layers[j].filter.string, tmpstr, msObj->request->ParamValues[i]);
-      for(k=0; k<map->layers[j].numclasses; k++) {
-	      if(map->layers[j].class[k].expression.string && (strstr(map->layers[j].class[k].expression.string, tmpstr) != NULL)) 
-          map->layers[j].class[k].expression.string = gsub(map->layers[j].class[k].expression.string, tmpstr, msObj->request->ParamValues[i]);
+      if(GET_LAYER(map, j)->data && (strstr(GET_LAYER(map, j)->data, tmpstr) != NULL)) 
+        GET_LAYER(map, j)->data = gsub(GET_LAYER(map, j)->data, tmpstr, msObj->request->ParamValues[i]);
+      if(GET_LAYER(map, j)->tileindex && (strstr(GET_LAYER(map, j)->tileindex, tmpstr) != NULL)) 
+        GET_LAYER(map, j)->tileindex = gsub(GET_LAYER(map, j)->tileindex, tmpstr, msObj->request->ParamValues[i]);
+      if(GET_LAYER(map, j)->connection && (strstr(GET_LAYER(map, j)->connection, tmpstr) != NULL)) 
+        GET_LAYER(map, j)->connection = gsub(GET_LAYER(map, j)->connection, tmpstr, msObj->request->ParamValues[i]);
+      if(GET_LAYER(map, j)->filter.string && (strstr(GET_LAYER(map, j)->filter.string, tmpstr) != NULL)) 
+        GET_LAYER(map, j)->filter.string = gsub(GET_LAYER(map, j)->filter.string, tmpstr, msObj->request->ParamValues[i]);
+      for(k=0; k<GET_LAYER(map, j)->numclasses; k++) {
+	      if(GET_LAYER(map, j)->class[k].expression.string && (strstr(GET_LAYER(map, j)->class[k].expression.string, tmpstr) != NULL)) 
+          GET_LAYER(map, j)->class[k].expression.string = gsub(GET_LAYER(map, j)->class[k].expression.string, tmpstr, msObj->request->ParamValues[i]);
       }
     }
     
@@ -833,9 +833,9 @@
 
           for(msObj->NumLayers=0; msObj->NumLayers < msObj->Map->numlayers; msObj->NumLayers++)
           {
-              if (msObj->Map->layers[msObj->NumLayers].name)
+              if (GET_LAYER(msObj->Map, msObj->NumLayers)->name)
               {
-                  msObj->Layers[msObj->NumLayers] = strdup(msObj->Map->layers[msObj->NumLayers].name);
+                  msObj->Layers[msObj->NumLayers] = strdup(GET_LAYER(msObj->Map, msObj->NumLayers)->name);
               }
               else
               {
@@ -1336,11 +1336,11 @@
     */
         
     for(i=0;i<msObj->Map->numlayers;i++) {
-      if((msObj->Map->layers[i].status != MS_DEFAULT)) {
-	if(isOn(msObj,  msObj->Map->layers[i].name, msObj->Map->layers[i].group) == MS_TRUE) /* Set layer status */
-	  msObj->Map->layers[i].status = MS_ON;
+      if((GET_LAYER(msObj->Map, i)->status != MS_DEFAULT)) {
+	if(isOn(msObj,  GET_LAYER(msObj->Map, i)->name, GET_LAYER(msObj->Map, i)->group) == MS_TRUE) /* Set layer status */
+	  GET_LAYER(msObj->Map, i)->status = MS_ON;
 	else
-	  msObj->Map->layers[i].status = MS_OFF;
+	  GET_LAYER(msObj->Map, i)->status = MS_OFF;
       }     
     }
 
@@ -1452,7 +1452,7 @@
       } else {
 
 	if((QueryLayerIndex = msGetLayerIndex(msObj->Map, QueryLayer)) != -1) /* force the query layer on */
-	  msObj->Map->layers[QueryLayerIndex].status = MS_ON;
+	  GET_LAYER(msObj->Map, QueryLayerIndex)->status = MS_ON;
 
         switch(msObj->Mode) {
 	case ITEMFEATUREQUERY:
@@ -1463,7 +1463,7 @@
 	    msSetError(MS_WEBERR, "Selection layer not set or references an invalid layer.", "mapserv()"); 
 	    writeError();
 	  }
-	  msObj->Map->layers[SelectLayerIndex].status = MS_ON;
+	  GET_LAYER(msObj->Map, SelectLayerIndex)->status = MS_ON;
 
 	  if(QueryCoordSource != NONE && !msObj->UseShapes)
 	    setExtent(msObj); /* set user area of interest */
@@ -1485,7 +1485,7 @@
 	    msSetError(MS_WEBERR, "Selection layer not set or references an invalid layer.", "mapserv()"); 
 	    writeError();
 	  }
-	  msObj->Map->layers[SelectLayerIndex].status = MS_ON;
+	  GET_LAYER(msObj->Map, SelectLayerIndex)->status = MS_ON;
 	  
 	  if(msObj->Mode == FEATUREQUERY || msObj->Mode == FEATUREQUERYMAP) {
 	    switch(QueryCoordSource) {
Index: mapshape.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapshape.c,v
retrieving revision 1.73
diff -U3 -r1.73 mapshape.c
--- mapshape.c	12 Jul 2006 06:17:17 -0000	1.73
+++ mapshape.c	22 Feb 2007 08:11:13 -0000
@@ -1598,7 +1598,7 @@
     int status;
     layerObj *tlp;
 
-    tlp = &(layer->map->layers[tSHP->tilelayerindex]);
+    tlp = (GET_LAYER(layer->map, tSHP->tilelayerindex));
 
     if(tlp->connectiontype != MS_SHAPEFILE) {
 	  msSetError(MS_SDEERR, "Tileindex layer must be a shapefile.", "msTiledSHPOpenFile()");
@@ -1681,7 +1681,7 @@
     layerObj *tlp;
     shapeObj tshape;
 
-    tlp = &(layer->map->layers[tSHP->tilelayerindex]);
+    tlp = (GET_LAYER(layer->map, tSHP->tilelayerindex));
     status= msLayerWhichShapes(tlp, rect);
     if(status != MS_SUCCESS) return(status); /* could be MS_DONE or MS_FAILURE */
 
@@ -1817,7 +1817,7 @@
         layerObj *tlp;
         shapeObj tshape;
 
-        tlp = &(layer->map->layers[tSHP->tilelayerindex]);
+        tlp = (GET_LAYER(layer->map, tSHP->tilelayerindex));
 
         msInitShape(&tshape);
         while((status = msLayerNextShape(tlp, &tshape)) == MS_SUCCESS) {
@@ -2002,7 +2002,7 @@
   
     if(tSHP->tilelayerindex != -1) {
       layerObj *tlp;
-      tlp = &(layer->map->layers[tSHP->tilelayerindex]);
+      tlp = (GET_LAYER(layer->map, tSHP->tilelayerindex));
       msLayerClose(tlp);
     } else { 
       msSHPCloseFile(tSHP->tileshpfile);
Index: mapsvg.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapsvg.c,v
retrieving revision 1.22
diff -U3 -r1.22 mapsvg.c
--- mapsvg.c	16 Jan 2006 20:21:18 -0000	1.22
+++ mapsvg.c	22 Feb 2007 08:11:17 -0000
@@ -1219,7 +1219,7 @@
 
     cachePtr = &(map->labelcache.labels[l]); /* point to right spot in the label cache */
 
-    layerPtr = &(map->layers[cachePtr->layerindex]); /* set a couple of other pointers, avoids nasty references */
+    layerPtr = (GET_LAYER(map, cachePtr->layerindex)); /* set a couple of other pointers, avoids nasty references */
     labelPtr = &(cachePtr->label);
 
     if(!cachePtr->text || strlen(cachePtr->text) == 0)
Index: mapswf.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapswf.c,v
retrieving revision 1.59
diff -U3 -r1.59 mapswf.c
--- mapswf.c	29 May 2006 18:07:49 -0000	1.59
+++ mapswf.c	22 Feb 2007 08:11:20 -0000
@@ -1320,7 +1320,7 @@
 /*      the attributes of the shape.                                    */
 /* -------------------------------------------------------------------- */
     psLayerTmp = 
-      &(((SWFObj *)image->img.swf)->map->layers[((SWFObj *)image->img.swf)->nCurrentLayerIdx]);
+      &((GET_LAYER(((SWFObj *)image->img.swf)->map, ((SWFObj *)image->img.swf)->nCurrentLayerIdx));
 
     if (msLookupHashTable(&(psLayerTmp->metadata), "SWFDUMPATTRIBUTES"))
     {
@@ -1783,7 +1783,7 @@
 /*      the attributes of the shape.                                    */
 /* -------------------------------------------------------------------- */
     psLayerTmp = 
-      &(((SWFObj *)image->img.swf)->map->layers[((SWFObj *)image->img.swf)->nCurrentLayerIdx]);
+      &(GET_LAYER(((SWFObj *)image->img.swf)->map, ((SWFObj *)image->img.swf)->nCurrentLayerIdx));
 
     if (msLookupHashTable(&(psLayerTmp->metadata), "SWFDUMPATTRIBUTES"))
     {
@@ -1896,7 +1896,7 @@
 /*      the attributes of the shape.                                    */
 /* -------------------------------------------------------------------- */
     psLayerTmp = 
-      &(((SWFObj *)image->img.swf)->map->layers[((SWFObj *)image->img.swf)->nCurrentLayerIdx]);
+      &(GET_LAYER(((SWFObj *)image->img.swf)->map, ((SWFObj *)image->img.swf)->nCurrentLayerIdx));
 
     if (msLookupHashTable(&(psLayerTmp->metadata), "SWFDUMPATTRIBUTES"))
     {
@@ -2284,7 +2284,7 @@
 
         cachePtr = &(map->labelcache.labels[l]); /* point to right spot in cache */
 
-        layerPtr = &(map->layers[cachePtr->layerindex]); /* set a couple of other pointers, avoids nasty references */
+        layerPtr = &(GET_LAYER(map, cachePtr->layerindex)); /* set a couple of other pointers, avoids nasty references */
 
 /* ==================================================================== */
 /*      set the current layer so the label will be drawn in the         */
@@ -3006,7 +3006,7 @@
             
                 /* sprintf(szAction, "mapObj.layers[%d]=\"%s\";", i, gszFilename); */
                 sprintf(szAction, "mapObj.layers[%d]= new LayerObj(\"%s\",\"%d\",\"%s\",\"%s\");", i, 
-                        map->layers[i].name, map->layers[i].type, gszFilename,
+                        GET_LAYER(map, i)->name, GET_LAYER(map, i)->type, gszFilename,
                         pszRelativeName);
             
                 oAction = compileSWFActionCode(szAction);
@@ -3036,7 +3036,7 @@
             {
                 sprintf(szAction, 
                         "mapObj.layers[%d]= new LayerObj(\"%s\",\"%d\",\"undefined\",\"undefined\");", i, 
-                        map->layers[i].name, map->layers[i].type);
+                        GET_LAYER(map, i)->name, GET_LAYER(map, i)->type);
             
                 oAction = compileSWFActionCode(szAction);
                 SWFMovie_add(((SWFObj *)image->img.swf)->sMainMovie, oAction);
Index: maptemplate.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maptemplate.c,v
retrieving revision 1.124
diff -U3 -r1.124 maptemplate.c
--- maptemplate.c	19 Dec 2006 18:58:05 -0000	1.124
+++ maptemplate.c	22 Feb 2007 08:11:26 -0000
@@ -459,8 +459,8 @@
    */
    for (i=0; i<map->numlayers-1; i++) {
       for (j=0; j<map->numlayers-1-i; j++) {
-         pszLegendOrder1 = msLookupHashTable(&(map->layers[map->layerorder[j+1]].metadata), pszMetadata);
-         pszLegendOrder2 = msLookupHashTable(&(map->layers[map->layerorder[j]].metadata), pszMetadata);
+         pszLegendOrder1 = msLookupHashTable(&(GET_LAYER(map, map->layerorder[j+1])->metadata), pszMetadata);
+         pszLegendOrder2 = msLookupHashTable(&(GET_LAYER(map, map->layerorder[j])->metadata), pszMetadata);
      
          if (!pszLegendOrder1 || !pszLegendOrder2)
            continue;
@@ -1401,16 +1401,16 @@
          /* Create an image corresponding to the current class */
           imageObj *img=NULL;
 
-         if (map->layers[nIdxLayer].numclasses <= 0 || 
-             nIdxClass > map->layers[nIdxLayer].numclasses || nIdxClass < 0)
+         if (GET_LAYER(map, nIdxLayer)->numclasses <= 0 || 
+             nIdxClass > GET_LAYER(map, nIdxLayer)->numclasses || nIdxClass < 0)
          {
              /* Nonexistent class.  Create an empty image */
              img = msCreateLegendIcon(map, NULL, NULL, nWidth, nHeight);
          }
          else
          {
-            img = msCreateLegendIcon(map, &(map->layers[nIdxLayer]), 
-                                     &(map->layers[nIdxLayer].class[nIdxClass]), 
+            img = msCreateLegendIcon(map, GET_LAYER(map, nIdxLayer), 
+                                     &(GET_LAYER(map, nIdxLayer)->class[nIdxClass]), 
                                      nWidth, nHeight);
          }
 
@@ -1522,24 +1522,24 @@
    bShowGroup = 0;
    for (j=0; j<map->numlayers; j++)
    {
-       if (map->layers[map->layerorder[j]].group && 
-           strcmp(map->layers[map->layerorder[j]].group, pszGroupName) == 0)
+       if (GET_LAYER(map, map->layerorder[j])->group && 
+           strcmp(GET_LAYER(map, map->layerorder[j])->group, pszGroupName) == 0)
        {
            /* dont display layer is off. */
            if( (nOptFlag & 2) == 0 && 
-               map->layers[map->layerorder[j]].status == MS_OFF )
+               GET_LAYER(map, map->layerorder[j])->status == MS_OFF )
                bShowGroup = 0;
            else
                bShowGroup = 1;
 
            /* dont display layer is query. */
            if( (nOptFlag & 4) == 0  && 
-               map->layers[map->layerorder[j]].type == MS_LAYER_QUERY )
+               GET_LAYER(map, map->layerorder[j])->type == MS_LAYER_QUERY )
                bShowGroup = 0;
 
            /* dont display layer is annotation. */
            if( (nOptFlag & 8) == 0 && 
-               map->layers[map->layerorder[j]].type == MS_LAYER_ANNOTATION )
+               GET_LAYER(map, map->layerorder[j])->type == MS_LAYER_ANNOTATION )
                bShowGroup = 0;
                
 
@@ -1547,11 +1547,11 @@
            if ((nOptFlag & 1) == 0)
            {
                if(map->scale > 0) {
-                   if((map->layers[map->layerorder[j]].maxscale > 0) && 
-                      (map->scale > map->layers[map->layerorder[j]].maxscale))
+                   if((GET_LAYER(map, map->layerorder[j])->maxscale > 0) && 
+                      (map->scale > GET_LAYER(map, map->layerorder[j])->maxscale))
                        bShowGroup = 0;
-                   if((map->layers[map->layerorder[j]].minscale > 0) && 
-                      (map->scale <= map->layers[map->layerorder[j]].minscale))
+                   if((GET_LAYER(map, map->layerorder[j])->minscale > 0) && 
+                      (map->scale <= GET_LAYER(map, map->layerorder[j])->minscale))
                        bShowGroup = 0;
                }
            }
@@ -1591,20 +1591,20 @@
     */
    for (j=0; j<map->numlayers; j++)
    {
-      if (map->layers[map->layerorder[j]].group && strcmp(map->layers[map->layerorder[j]].group, pszGroupName) == 0)
+      if (GET_LAYER(map, map->layerorder[j])->group && strcmp(GET_LAYER(map, map->layerorder[j])->group, pszGroupName) == 0)
       {
-         sprintf(pszStatus, "%d", map->layers[map->layerorder[j]].status);
+         sprintf(pszStatus, "%d", GET_LAYER(map, map->layerorder[j])->status);
          msInsertHashTable(myHashTable, "layer_status", pszStatus);
-         msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, &(map->layers[map->layerorder[j]]))?"1":"0" );
+         msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, GET_LAYER(map, map->layerorder[j]))?"1":"0" );
          msInsertHashTable(myHashTable, "group_name", pszGroupName);
 
          if (processIf(pszTemp, myHashTable, MS_FALSE) != MS_SUCCESS)
            return MS_FAILURE;
          
-         if (processIf(pszTemp, &(map->layers[map->layerorder[j]].metadata), MS_FALSE) != MS_SUCCESS)
+         if (processIf(pszTemp, &(GET_LAYER(map, map->layerorder[j])->metadata), MS_FALSE) != MS_SUCCESS)
            return MS_FAILURE;
 
-         if (processMetadata(pszTemp, &(map->layers[map->layerorder[j]].metadata)) != MS_SUCCESS)
+         if (processMetadata(pszTemp, &GET_LAYER(map, map->layerorder[j])->metadata) != MS_SUCCESS)
            return MS_FAILURE;
 
          break;
@@ -1634,7 +1634,7 @@
    if (pszClassImg) {
       /* find first layer of this group */
       for (i=0; i<map->numlayers; i++)
-        if (map->layers[map->layerorder[i]].group && strcmp(map->layers[map->layerorder[i]].group, pszGroupName) == 0)
+        if (GET_LAYER(map, map->layerorder[i])->group && strcmp(GET_LAYER(map, map->layerorder[i])->group, pszGroupName) == 0)
           processIcon(map, map->layerorder[i], 0, pszTemp, pszPrefix);
    }      
       
@@ -1679,31 +1679,31 @@
      nOptFlag = atoi(pszOptFlag);
 
    /* don't display deleted layers */
-   if (map->layers[nIdxLayer].status == MS_DELETE)
+   if (GET_LAYER(map, nIdxLayer)->status == MS_DELETE)
      return MS_SUCCESS;
 
    /* dont display layer is off. */
    /* check this if Opt flag is not set */
-   if((nOptFlag & 2) == 0 && map->layers[nIdxLayer].status == MS_OFF)
+   if((nOptFlag & 2) == 0 && GET_LAYER(map, nIdxLayer)->status == MS_OFF)
      return MS_SUCCESS;
 
    /* dont display layer is query. */
    /* check this if Opt flag is not set */
-   if ((nOptFlag & 4) == 0  && map->layers[nIdxLayer].type == MS_LAYER_QUERY)
+   if ((nOptFlag & 4) == 0  && GET_LAYER(map, nIdxLayer)->type == MS_LAYER_QUERY)
      return MS_SUCCESS;
 
    /* dont display layer is annotation. */
    /* check this if Opt flag is not set       */
-   if ((nOptFlag & 8) == 0 && map->layers[nIdxLayer].type == MS_LAYER_ANNOTATION)
+   if ((nOptFlag & 8) == 0 && GET_LAYER(map, nIdxLayer)->type == MS_LAYER_ANNOTATION)
      return MS_SUCCESS;      
 
    /* dont display layer if out of scale. */
    /* check this if Opt flag is not set             */
    if ((nOptFlag & 1) == 0) {
       if(map->scale > 0) {
-         if((map->layers[nIdxLayer].maxscale > 0) && (map->scale > map->layers[nIdxLayer].maxscale))
+         if((GET_LAYER(map, nIdxLayer)->maxscale > 0) && (map->scale > GET_LAYER(map, nIdxLayer)->maxscale))
            return MS_SUCCESS;
-         if((map->layers[nIdxLayer].minscale > 0) && (map->scale <= map->layers[nIdxLayer].minscale))
+         if((GET_LAYER(map, nIdxLayer)->minscale > 0) && (map->scale <= GET_LAYER(map, nIdxLayer)->minscale))
            return MS_SUCCESS;
       }
    }
@@ -1716,15 +1716,15 @@
    /*
     * Change layer tags
     */
-   *pszTemp = gsub(*pszTemp, "[leg_layer_name]", map->layers[nIdxLayer].name);
-   *pszTemp = gsub(*pszTemp, "[leg_layer_group]", map->layers[nIdxLayer].group);
+   *pszTemp = gsub(*pszTemp, "[leg_layer_name]", GET_LAYER(map, nIdxLayer)->name);
+   *pszTemp = gsub(*pszTemp, "[leg_layer_group]", GET_LAYER(map, nIdxLayer)->group);
 
    snprintf(szTmpstr, 128, "%d", nIdxLayer); 
    *pszTemp = gsub(*pszTemp, "[leg_layer_index]", szTmpstr);
 
-   snprintf(szTmpstr, 128, "%g", map->layers[nIdxLayer].minscale); 
+   snprintf(szTmpstr, 128, "%g", GET_LAYER(map, nIdxLayer)->minscale); 
    *pszTemp = gsub(*pszTemp, "[leg_layer_minscale]", szTmpstr);
-   snprintf(szTmpstr, 128, "%g", map->layers[nIdxLayer].maxscale); 
+   snprintf(szTmpstr, 128, "%g", GET_LAYER(map, nIdxLayer)->maxscale); 
    *pszTemp = gsub(*pszTemp, "[leg_layer_maxscale]", szTmpstr);
 
    /*
@@ -1736,20 +1736,20 @@
    /*
     * for now, only status and type is required by template
     */
-   sprintf(szStatus, "%d", map->layers[nIdxLayer].status);
+   sprintf(szStatus, "%d", GET_LAYER(map, nIdxLayer)->status);
    msInsertHashTable(myHashTable, "layer_status", szStatus);
 
-   sprintf(szType, "%d", map->layers[nIdxLayer].type);
+   sprintf(szType, "%d", GET_LAYER(map, nIdxLayer)->type);
    msInsertHashTable(myHashTable, "layer_type", szType);
 
-   msInsertHashTable(myHashTable, "layer_name", map->layers[nIdxLayer].name);
-   msInsertHashTable(myHashTable, "layer_group", map->layers[nIdxLayer].group);
-   msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, &(map->layers[nIdxLayer]))?"1":"0" );
+   msInsertHashTable(myHashTable, "layer_name", GET_LAYER(map, nIdxLayer)->name);
+   msInsertHashTable(myHashTable, "layer_group", GET_LAYER(map, nIdxLayer)->group);
+   msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, GET_LAYER(map, nIdxLayer))?"1":"0" );
 
    if (processIf(pszTemp, myHashTable, MS_FALSE) != MS_SUCCESS)
       return MS_FAILURE;
    
-   if (processIf(pszTemp, &(map->layers[nIdxLayer].metadata), MS_FALSE) != MS_SUCCESS)
+   if (processIf(pszTemp, &(GET_LAYER(map, nIdxLayer)->metadata), MS_FALSE) != MS_SUCCESS)
       return MS_FAILURE;
    
    if (processIf(pszTemp, &(map->web.metadata), MS_TRUE) != MS_SUCCESS)
@@ -1770,7 +1770,7 @@
     * only current layer and web object
     * metaddata are accessible
    */
-   if (processMetadata(pszTemp, &(map->layers[nIdxLayer].metadata)) != MS_SUCCESS)
+   if (processMetadata(pszTemp, &GET_LAYER(map, nIdxLayer)->metadata) != MS_SUCCESS)
       return MS_FAILURE;
 
    if (processMetadata(pszTemp, &(map->web.metadata)) != MS_SUCCESS)
@@ -1806,7 +1806,7 @@
        !map || 
        nIdxLayer > map->numlayers ||
        nIdxLayer < 0 ||
-       nIdxClass > map->layers[nIdxLayer].numclasses ||
+       nIdxClass > GET_LAYER(map, nIdxLayer)->numclasses ||
        nIdxClass < 0) {
         
      msSetError(MS_WEBERR, "Invalid pointer.", "generateClassTemplate()");
@@ -1820,31 +1820,31 @@
      nOptFlag = atoi(pszOptFlag);
       
    /* don't display deleted layers */
-   if (map->layers[nIdxLayer].status == MS_DELETE)
+   if (GET_LAYER(map, nIdxLayer)->status == MS_DELETE)
      return MS_SUCCESS;
 
    /* dont display class if layer is off. */
    /* check this if Opt flag is not set */
-   if((nOptFlag & 2) == 0 && map->layers[nIdxLayer].status == MS_OFF)
+   if((nOptFlag & 2) == 0 && GET_LAYER(map, nIdxLayer)->status == MS_OFF)
      return MS_SUCCESS;
 
    /* dont display class if layer is query. */
    /* check this if Opt flag is not set       */
-   if ((nOptFlag & 4) == 0 && map->layers[nIdxLayer].type == MS_LAYER_QUERY)
+   if ((nOptFlag & 4) == 0 && GET_LAYER(map, nIdxLayer)->type == MS_LAYER_QUERY)
      return MS_SUCCESS;
       
    /* dont display class if layer is annotation. */
    /* check this if Opt flag is not set       */
-   if ((nOptFlag & 8) == 0 && map->layers[nIdxLayer].type == MS_LAYER_ANNOTATION)
+   if ((nOptFlag & 8) == 0 && GET_LAYER(map, nIdxLayer)->type == MS_LAYER_ANNOTATION)
      return MS_SUCCESS;
       
    /* dont display layer if out of scale. */
    /* check this if Opt flag is not set */
    if ((nOptFlag & 1) == 0) {
       if(map->scale > 0) {
-         if((map->layers[nIdxLayer].maxscale > 0) && (map->scale > map->layers[nIdxLayer].maxscale))
+         if((GET_LAYER(map, nIdxLayer)->maxscale > 0) && (map->scale > GET_LAYER(map, nIdxLayer)->maxscale))
            return MS_SUCCESS;
-         if((map->layers[nIdxLayer].minscale > 0) && (map->scale <= map->layers[nIdxLayer].minscale))
+         if((GET_LAYER(map, nIdxLayer)->minscale > 0) && (map->scale <= GET_LAYER(map, nIdxLayer)->minscale))
            return MS_SUCCESS;
       }
    }
@@ -1858,16 +1858,16 @@
    /*
     * Change class tags
     */
-   *pszTemp = gsub(*pszTemp, "[leg_class_name]", map->layers[nIdxLayer].class[nIdxClass].name);
-   *pszTemp = gsub(*pszTemp, "[leg_class_title]", map->layers[nIdxLayer].class[nIdxClass].title);
-   *pszTemp = gsub(*pszTemp, "[leg_layer_name]", map->layers[nIdxLayer].name);
+   *pszTemp = gsub(*pszTemp, "[leg_class_name]", GET_LAYER(map, nIdxLayer)->class[nIdxClass].name);
+   *pszTemp = gsub(*pszTemp, "[leg_class_title]", GET_LAYER(map, nIdxLayer)->class[nIdxClass].title);
+   *pszTemp = gsub(*pszTemp, "[leg_layer_name]", GET_LAYER(map, nIdxLayer)->name);
 
    snprintf(szTmpstr, 128, "%d", nIdxClass); 
    *pszTemp = gsub(*pszTemp, "[leg_class_index]", szTmpstr);
 
-   snprintf(szTmpstr, 128, "%g", map->layers[nIdxLayer].class[nIdxClass].minscale); 
+   snprintf(szTmpstr, 128, "%g", GET_LAYER(map, nIdxLayer)->class[nIdxClass].minscale); 
    *pszTemp = gsub(*pszTemp, "[leg_class_minscale]", szTmpstr);
-   snprintf(szTmpstr, 128, "%g", map->layers[nIdxLayer].class[nIdxClass].maxscale); 
+   snprintf(szTmpstr, 128, "%g", GET_LAYER(map, nIdxLayer)->class[nIdxClass].maxscale); 
    *pszTemp = gsub(*pszTemp, "[leg_class_maxscale]", szTmpstr);
 
    /*
@@ -1879,21 +1879,21 @@
    /*
     * for now, only status, type, name and group are  required by template
     */
-   sprintf(szStatus, "%d", map->layers[nIdxLayer].status);
+   sprintf(szStatus, "%d", GET_LAYER(map, nIdxLayer)->status);
    msInsertHashTable(myHashTable, "layer_status", szStatus);
 
-   sprintf(szType, "%d", map->layers[nIdxLayer].type);
+   sprintf(szType, "%d", GET_LAYER(map, nIdxLayer)->type);
    msInsertHashTable(myHashTable, "layer_type", szType);   
    
-   msInsertHashTable(myHashTable, "layer_name", map->layers[nIdxLayer].name);
-   msInsertHashTable(myHashTable, "layer_group", map->layers[nIdxLayer].group);
-   msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, &(map->layers[nIdxLayer]))?"1":"0" );
-   msInsertHashTable(myHashTable, "class_name", map->layers[nIdxLayer].class[nIdxClass].name);
+   msInsertHashTable(myHashTable, "layer_name", GET_LAYER(map, nIdxLayer)->name);
+   msInsertHashTable(myHashTable, "layer_group", GET_LAYER(map, nIdxLayer)->group);
+   msInsertHashTable(myHashTable, "layer_visible", msLayerIsVisible(map, GET_LAYER(map, nIdxLayer))?"1":"0" );
+   msInsertHashTable(myHashTable, "class_name", GET_LAYER(map, nIdxLayer)->class[nIdxClass].name);
 
    if (processIf(pszTemp, myHashTable, MS_FALSE) != MS_SUCCESS)
       return MS_FAILURE;
    
-   if (processIf(pszTemp, &(map->layers[nIdxLayer].metadata), MS_FALSE) != MS_SUCCESS)
+   if (processIf(pszTemp, &(GET_LAYER(map, nIdxLayer)->metadata), MS_FALSE) != MS_SUCCESS)
       return MS_FAILURE;
    
    if (processIf(pszTemp, &(map->web.metadata), MS_TRUE) != MS_SUCCESS)
@@ -1913,7 +1913,7 @@
     * only current layer and web object
     * metaddata are accessible
    */
-   if (processMetadata(pszTemp, &(map->layers[nIdxLayer].metadata)) != MS_SUCCESS)
+   if (processMetadata(pszTemp, &GET_LAYER(map, nIdxLayer)->metadata) != MS_SUCCESS)
       return MS_FAILURE;
    
    if (processMetadata(pszTemp, &(map->web.metadata)) != MS_SUCCESS)
@@ -2171,7 +2171,7 @@
                */
               pszOrderMetadata = msLookupHashTable(layerArgs, "order_metadata");
               if (pszOrderMetadata) {
-                 pszOrderValue = msLookupHashTable(&(msObj->Map->layers[msObj->Map->layerorder[j]].metadata), pszOrderMetadata);
+                 pszOrderValue = msLookupHashTable(&(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->metadata), pszOrderMetadata);
                  if (pszOrderValue) {
                     nLegendOrder = atoi(pszOrderValue);
                     if (nLegendOrder < 0)
@@ -2179,7 +2179,7 @@
                  }
               }
 
-              if (msObj->Map->layers[msObj->Map->layerorder[j]].group && strcmp(msObj->Map->layers[msObj->Map->layerorder[j]].group, papszGroups[i]) == 0) {
+              if (GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->group && strcmp(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->group, papszGroups[i]) == 0) {
                  /* process all layer tags */
                  if (generateLayerTemplate(legLayerHtml, msObj->Map, msObj->Map->layerorder[j], layerArgs, &legLayerHtmlCopy, pszPrefix) != MS_SUCCESS)
                  {
@@ -2202,9 +2202,9 @@
             
                  /* for all classes in layer */
                  if (legClassHtml) {
-                    for (k=0; k<msObj->Map->layers[msObj->Map->layerorder[j]].numclasses; k++) {
+                    for (k=0; k<GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->numclasses; k++) {
                        /* process all class tags */
-                       if (!msObj->Map->layers[msObj->Map->layerorder[j]].class[k].name)
+                       if (!GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->class[k].name)
                          continue;
 
                        if (generateClassTemplate(legClassHtml, msObj->Map, msObj->Map->layerorder[j], k, classArgs, &legClassHtmlCopy, pszPrefix) != MS_SUCCESS)
@@ -2237,7 +2237,7 @@
                */
               pszOrderMetadata = msLookupHashTable(layerArgs, "order_metadata");
               if (pszOrderMetadata) {
-                 pszOrderValue = msLookupHashTable(&(msObj->Map->layers[msObj->Map->layerorder[j]].metadata), pszOrderMetadata);
+                 pszOrderValue = msLookupHashTable(&(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->metadata), pszOrderMetadata);
                  if (pszOrderValue) {
                     nLegendOrder = atoi(pszOrderValue);
                     if (nLegendOrder < 0)
@@ -2245,12 +2245,12 @@
                  }
               }
 
-              if (msObj->Map->layers[msObj->Map->layerorder[j]].group && strcmp(msObj->Map->layers[msObj->Map->layerorder[j]].group, papszGroups[i]) == 0) {
+              if (GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->group && strcmp(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->group, papszGroups[i]) == 0) {
                  /* for all classes in layer */
                  if (legClassHtml) {
-                    for (k=0; k<msObj->Map->layers[msObj->Map->layerorder[j]].numclasses; k++) {
+                    for (k=0; k<GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->numclasses; k++) {
                        /* process all class tags */
-                       if (!msObj->Map->layers[msObj->Map->layerorder[j]].class[k].name)
+                       if (!GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->class[k].name)
                          continue;
 
                        if (generateClassTemplate(legClassHtml, msObj->Map, msObj->Map->layerorder[j], k, classArgs, &legClassHtmlCopy, pszPrefix) != MS_SUCCESS)
@@ -2286,7 +2286,7 @@
              */
             pszOrderMetadata = msLookupHashTable(layerArgs, "order_metadata");
             if (pszOrderMetadata) {
-               pszOrderValue = msLookupHashTable(&(msObj->Map->layers[msObj->Map->layerorder[j]].metadata), pszOrderMetadata);
+               pszOrderValue = msLookupHashTable(&(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->metadata), pszOrderMetadata);
                if (pszOrderValue) {
                   nLegendOrder = atoi(pszOrderValue);
                   if (nLegendOrder < 0)
@@ -2315,9 +2315,9 @@
             
             /* for all classes in layer */
             if (legClassHtml) {
-               for (k=0; k<msObj->Map->layers[msObj->Map->layerorder[j]].numclasses; k++) {
+               for (k=0; k<GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->numclasses; k++) {
                   /* process all class tags */
-                  if (!msObj->Map->layers[msObj->Map->layerorder[j]].class[k].name)
+                  if (!GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->class[k].name)
                     continue;
 
                   if (generateClassTemplate(legClassHtml, msObj->Map, msObj->Map->layerorder[j], k, classArgs, &legClassHtmlCopy, pszPrefix) != MS_SUCCESS)
@@ -2349,7 +2349,7 @@
                 */
                pszOrderMetadata = msLookupHashTable(layerArgs, "order_metadata");
                if (pszOrderMetadata) {
-                  pszOrderValue = msLookupHashTable(&(msObj->Map->layers[msObj->Map->layerorder[j]].metadata), pszOrderMetadata);
+                  pszOrderValue = msLookupHashTable(&(GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->metadata), pszOrderMetadata);
                   if (pszOrderValue) {
                      nLegendOrder = atoi(pszOrderValue);
                      if (nLegendOrder < 0)
@@ -2357,8 +2357,8 @@
                   }
                }
 
-               for (k=0; k<msObj->Map->layers[msObj->Map->layerorder[j]].numclasses; k++) {
-                  if (!msObj->Map->layers[msObj->Map->layerorder[j]].class[k].name)
+               for (k=0; k<GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->numclasses; k++) {
+                  if (!GET_LAYER(msObj->Map, msObj->Map->layerorder[j])->class[k].name)
                     continue;
                   
                   if (generateClassTemplate(legClassHtml, msObj->Map, msObj->Map->layerorder[j], k, classArgs, &legClassHtmlCopy, pszPrefix) != MS_SUCCESS)
@@ -2595,8 +2595,8 @@
   strcpy(repstr, ""); /* list of ALL layers that can be toggled */
   repstr[0] = '\0';
   for(i=0;i<msObj->Map->numlayers;i++) {
-    if(msObj->Map->layers[i].status != MS_DEFAULT && msObj->Map->layers[i].name != NULL) {
-      strlcat(repstr, msObj->Map->layers[i].name, sizeof(repstr));
+    if(GET_LAYER(msObj->Map, i)->status != MS_DEFAULT && GET_LAYER(msObj->Map, i)->name != NULL) {
+      strlcat(repstr, GET_LAYER(msObj->Map, i)->name, sizeof(repstr));
       strlcat(repstr, " ", sizeof(repstr));
     }
   }
@@ -2608,30 +2608,30 @@
   free(encodedstr);
   
   for(i=0;i<msObj->Map->numlayers;i++) { /* Set form widgets (i.e. checkboxes, radio and select lists), note that default layers don't show up here */
-    if(isOn(msObj, msObj->Map->layers[i].name, msObj->Map->layers[i].group) == MS_TRUE) {
-      if(msObj->Map->layers[i].group) {
-        sprintf(substr, "[%s_select]", msObj->Map->layers[i].group);
+    if(isOn(msObj, GET_LAYER(msObj->Map, i)->name, GET_LAYER(msObj->Map, i)->group) == MS_TRUE) {
+      if(GET_LAYER(msObj->Map, i)->group) {
+        sprintf(substr, "[%s_select]", GET_LAYER(msObj->Map, i)->group);
         outstr = gsub(outstr, substr, "selected=\"selected\"");
-        sprintf(substr, "[%s_check]", msObj->Map->layers[i].group);
+        sprintf(substr, "[%s_check]", GET_LAYER(msObj->Map, i)->group);
         outstr = gsub(outstr, substr, "checked=\"checked\"");
       }
-      if(msObj->Map->layers[i].name) {
-        sprintf(substr, "[%s_select]", msObj->Map->layers[i].name);
+      if(GET_LAYER(msObj->Map, i)->name) {
+        sprintf(substr, "[%s_select]", GET_LAYER(msObj->Map, i)->name);
         outstr = gsub(outstr, substr, "selected=\"selected\"");
-        sprintf(substr, "[%s_check]", msObj->Map->layers[i].name);
+        sprintf(substr, "[%s_check]", GET_LAYER(msObj->Map, i)->name);
         outstr = gsub(outstr, substr, "checked=\"checked\"");
       }
     } else {
-      if(msObj->Map->layers[i].group) {
-        sprintf(substr, "[%s_select]", msObj->Map->layers[i].group);
+      if(GET_LAYER(msObj->Map, i)->group) {
+        sprintf(substr, "[%s_select]", GET_LAYER(msObj->Map, i)->group);
         outstr = gsub(outstr, substr, "");
-        sprintf(substr, "[%s_check]", msObj->Map->layers[i].group);
+        sprintf(substr, "[%s_check]", GET_LAYER(msObj->Map, i)->group);
         outstr = gsub(outstr, substr, "");
       }
-      if(msObj->Map->layers[i].name) {
-        sprintf(substr, "[%s_select]", msObj->Map->layers[i].name);
+      if(GET_LAYER(msObj->Map, i)->name) {
+        sprintf(substr, "[%s_select]", GET_LAYER(msObj->Map, i)->name);
         outstr = gsub(outstr, substr, "");
-        sprintf(substr, "[%s_check]", msObj->Map->layers[i].name);
+        sprintf(substr, "[%s_check]", GET_LAYER(msObj->Map, i)->name);
         outstr = gsub(outstr, substr, "");
       }
     }
@@ -2689,17 +2689,17 @@
 
   /* allow layer metadata access in template */
   for(i=0;i<msObj->Map->numlayers;i++) {
-    if(&(msObj->Map->layers[i].metadata) && msObj->Map->layers[i].name && strstr(outstr, msObj->Map->layers[i].name)) {
+    if(&(GET_LAYER(msObj->Map, i)->metadata) && GET_LAYER(msObj->Map, i)->name && strstr(outstr, GET_LAYER(msObj->Map, i)->name)) {
       for(j=0; j<MS_HASHSIZE; j++) {
-        if(msObj->Map->layers[i].metadata.items[j] != NULL) {
-          for(tp=msObj->Map->layers[i].metadata.items[j]; tp!=NULL; tp=tp->next) {
-            sprintf(substr, "[%s_%s]", msObj->Map->layers[i].name, tp->key);
-            if(msObj->Map->layers[i].status == MS_ON)
+        if(GET_LAYER(msObj->Map, i)->metadata.items[j] != NULL) {
+          for(tp=GET_LAYER(msObj->Map, i)->metadata.items[j]; tp!=NULL; tp=tp->next) {
+            sprintf(substr, "[%s_%s]", GET_LAYER(msObj->Map, i)->name, tp->key);
+            if(GET_LAYER(msObj->Map, i)->status == MS_ON)
               outstr = gsub(outstr, substr, tp->data);
             else
               outstr = gsub(outstr, substr, "");
-            sprintf(substr, "[%s_%s_esc]", msObj->Map->layers[i].name, tp->key);
-            if(msObj->Map->layers[i].status == MS_ON) {
+            sprintf(substr, "[%s_%s_esc]", GET_LAYER(msObj->Map, i)->name, tp->key);
+            if(GET_LAYER(msObj->Map, i)->status == MS_ON) {
               encodedstr = msEncodeUrl(tp->data);
               outstr = gsub(outstr, substr, encodedstr);
               free(encodedstr);
@@ -3153,7 +3153,7 @@
   if((msObj->Mode == ITEMQUERY) || (msObj->Mode == QUERY)) { /* may need to handle a URL result set */
 
     for(i=(msObj->Map->numlayers-1); i>=0; i--) {
-      lp = &(msObj->Map->layers[i]);
+      lp = (GET_LAYER(msObj->Map, i));
 
       if(!lp->resultcache) continue;
       if(lp->resultcache->numresults > 0) break;
@@ -3211,7 +3211,7 @@
 
   msObj->NR = msObj->NL = 0;
   for(i=0; i<msObj->Map->numlayers; i++) { /* compute some totals */
-    lp = &(msObj->Map->layers[i]);
+    lp = (GET_LAYER(msObj->Map, i));
 
     if(!lp->resultcache) continue;
 
@@ -3244,7 +3244,7 @@
 
   msObj->RN = 1; /* overall result number */
   for(i=(msObj->Map->numlayers-1); i>=0; i--) {
-    msObj->ResultLayer = lp = &(msObj->Map->layers[i]);
+    msObj->ResultLayer = lp = (GET_LAYER(msObj->Map, i));
 
     if(!lp->resultcache) continue;
     if(lp->resultcache->numresults <= 0) continue;
Index: maputil.c
===================================================================
RCS file: /data2/cvsroot/mapserver/maputil.c,v
retrieving revision 1.191
diff -U3 -r1.191 maputil.c
--- maputil.c	22 Jan 2007 14:47:24 -0000	1.191
+++ maputil.c	22 Feb 2007 08:11:35 -0000
@@ -186,9 +186,9 @@
   for(i=0; i<map->numlayers; i++) {
     if(strstr(context, ltags[i]) != NULL) { /* need to check this layer */
       if(requires == MS_TRUE) {
-        if(searchContextForTag(map, ltags, tag, map->layers[i].requires, MS_TRUE) == MS_SUCCESS) return MS_SUCCESS;
+        if(searchContextForTag(map, ltags, tag, GET_LAYER(map, i)->requires, MS_TRUE) == MS_SUCCESS) return MS_SUCCESS;
       } else {
-        if(searchContextForTag(map, ltags, tag, map->layers[i].labelrequires, MS_FALSE) == MS_SUCCESS) return MS_SUCCESS;      
+        if(searchContextForTag(map, ltags, tag, GET_LAYER(map, i)->labelrequires, MS_FALSE) == MS_SUCCESS) return MS_SUCCESS;      
       }
     }
   }
@@ -209,28 +209,28 @@
 
   ltags = (char **) malloc(map->numlayers*sizeof(char *));
   for(i=0; i<map->numlayers; i++) {
-    if(map->layers[i].name == NULL) {
+    if(GET_LAYER(map, i)->name == NULL) {
       ltags[i] = strdup("[NULL]");
     } else {
-      ltags[i] = (char *) malloc(sizeof(char)*strlen(map->layers[i].name) + 3);
-      sprintf(ltags[i], "[%s]", map->layers[i].name);
+      ltags[i] = (char *) malloc(sizeof(char)*strlen(GET_LAYER(map, i)->name) + 3);
+      sprintf(ltags[i], "[%s]", GET_LAYER(map, i)->name);
     }
   }
 
   /* check each layer's REQUIRES and LABELREQUIRES parameters */
   for(i=0; i<map->numlayers; i++) { 
-    /* printf("working on layer %s, looking for references to %s\n", map->layers[i].name, ltags[i]); */
-    if(searchContextForTag(map, ltags, ltags[i], map->layers[i].requires, MS_TRUE) == MS_SUCCESS) {
-      msSetError(MS_PARSEERR, "Recursion error found for REQUIRES parameter for layer %s.", "msValidateContexts", map->layers[i].name);
+    /* printf("working on layer %s, looking for references to %s\n", GET_LAYER(map, i)->name, ltags[i]); */
+    if(searchContextForTag(map, ltags, ltags[i], GET_LAYER(map, i)->requires, MS_TRUE) == MS_SUCCESS) {
+      msSetError(MS_PARSEERR, "Recursion error found for REQUIRES parameter for layer %s.", "msValidateContexts", GET_LAYER(map, i)->name);
       status = MS_FAILURE;
       break;
     }
-    if(searchContextForTag(map, ltags, ltags[i], map->layers[i].labelrequires, MS_FALSE) == MS_SUCCESS) {
-      msSetError(MS_PARSEERR, "Recursion error found for LABELREQUIRES parameter for layer %s.", "msValidateContexts", map->layers[i].name);
+    if(searchContextForTag(map, ltags, ltags[i], GET_LAYER(map, i)->labelrequires, MS_FALSE) == MS_SUCCESS) {
+      msSetError(MS_PARSEERR, "Recursion error found for LABELREQUIRES parameter for layer %s.", "msValidateContexts", GET_LAYER(map, i)->name);
       status = MS_FAILURE;
       break;
     }
-    /* printf("done layer %s\n", map->layers[i].name); */
+    /* printf("done layer %s\n", GET_LAYER(map, i)->name); */
   }
 
   /* clean up */
@@ -251,13 +251,13 @@
 
   for(i=0; i<map->numlayers; i++) { /* step through all the layers */
     if(layer->index == i) continue; /* skip the layer in question */    
-    if (map->layers[i].name == NULL) continue; /* Layer without name cannot be used in contexts */
+    if (GET_LAYER(map, i)->name == NULL) continue; /* Layer without name cannot be used in contexts */
 
-    tmpstr2 = (char *)malloc(sizeof(char)*strlen(map->layers[i].name) + 3);
-    sprintf(tmpstr2, "[%s]", map->layers[i].name);
+    tmpstr2 = (char *)malloc(sizeof(char)*strlen(GET_LAYER(map, i)->name) + 3);
+    sprintf(tmpstr2, "[%s]", GET_LAYER(map, i)->name);
 
     if(strstr(tmpstr1, tmpstr2)) {
-      if(msLayerIsVisible(map, &(map->layers[i])))
+      if(msLayerIsVisible(map, (GET_LAYER(map, i))))
 	tmpstr1 = gsub(tmpstr1, tmpstr2, "1");
       else
 	tmpstr1 = gsub(tmpstr1, tmpstr2, "0");
@@ -672,9 +672,9 @@
 
     for(i=0;i<map->numlayers; i++)
     {
-        if(!map->layers[i].group) /* skip it */
+        if(!GET_LAYER(map, i)->group) /* skip it */
             continue;
-        if(strcmp(groupname, map->layers[i].group) == 0)
+        if(strcmp(groupname, GET_LAYER(map, i)->group) == 0)
         {
             aiIndex[iLayer] = i;
             iLayer++;
@@ -1046,7 +1046,7 @@
         for (i=0; i<nCount; i++)
         {
             layerObj *lp;
-            lp = &(map->layers[map->layerorder[i]]);
+            lp = (GET_LAYER(map, map->layerorder[i]));
 
             bFound = 0;
             if (lp->group && lp->status != MS_DELETE)
Index: mapwcs.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwcs.c,v
retrieving revision 1.74
diff -U3 -r1.74 mapwcs.c
--- mapwcs.c	13 Feb 2007 04:39:07 -0000	1.74
+++ mapwcs.c	22 Feb 2007 08:11:37 -0000
@@ -701,7 +701,7 @@
            "   xsi:schemaLocation=\"http://www.opengis.net/wcs %s/wcs/%s/wcsCapabilities.xsd\">\n", params->version, msOWSGetSchemasLocation(map), params->version); 
 
   for(i=0; i<map->numlayers; i++)
-    msWCSGetCapabilities_CoverageOfferingBrief(&(map->layers[i]), params);
+    msWCSGetCapabilities_CoverageOfferingBrief(&(GET_LAYER(map, i)), params);
 
   /* done */
   msIO_printf("</ContentMetadata>\n");
@@ -1029,11 +1029,11 @@
     for( j = 0; params->coverages[j]; j++ ) {
       i = msGetLayerIndex(map, params->coverages[j]);
       if(i == -1) continue; /* skip this layer, could/should generate an error */
-      msWCSDescribeCoverage_CoverageOffering(&(map->layers[i]), params);
+      msWCSDescribeCoverage_CoverageOffering(&(GET_LAYER(map, i)), params);
     }
   } else { /* return all layers */
     for(i=0; i<map->numlayers; i++)
-      msWCSDescribeCoverage_CoverageOffering(&(map->layers[i]), params);
+      msWCSDescribeCoverage_CoverageOffering(&(GET_LAYER(map, i)), params);
   }
   
   /* done */
@@ -1074,7 +1074,7 @@
   /* find the layer we are working with.  */
   lp = NULL;
   for(i=0; i<map->numlayers; i++) {
-    if( EQUAL(map->layers[i].name, params->coverages[0]) ) {
+    if( EQUAL(GET_LAYER(map, i)->name, params->coverages[0]) ) {
       lp = map->layers + i;
       break;
     }
@@ -1159,7 +1159,7 @@
       return msWCSException(map, params->version);
     }
 
-    tlp = &(map->layers[tli]);
+    tlp = &(GET_LAYER(map, tli));
 
     /* make sure there is enough information to filter */
     value = msOWSLookupMetadata(&(lp->metadata), "COM", "timeitem");
Index: mapwfs.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwfs.c,v
retrieving revision 1.88
diff -U3 -r1.88 mapwfs.c
--- mapwfs.c	13 Feb 2007 04:39:07 -0000	1.88
+++ mapwfs.c	22 Feb 2007 08:11:40 -0000
@@ -481,7 +481,7 @@
   for(i=0; i<map->numlayers; i++)
   {
       layerObj *lp;
-      lp = &(map->layers[i]);
+      lp = &(GET_LAYER(map, i));
 
       /* List only vector layers in which DUMP=TRUE */
       if (msWFSIsLayerSupported(lp))
@@ -864,7 +864,7 @@
     layerObj *lp;
     int j, bFound = 0;
     
-    lp = &(map->layers[i]);
+    lp = &(GET_LAYER(map, i));
 
     for (j=0; j<numlayers && !bFound; j++) {
       if ( lp->name && strcasecmp(lp->name, layers[j]) == 0)
@@ -1084,7 +1084,7 @@
     for(j=0; j<map->numlayers; j++) {
       layerObj *lp;
       
-      lp = &(map->layers[j]);
+      lp = &(GET_LAYER(map, j));
       
       /* Keep only selected layers, set to OFF by default. */
       lp->status = MS_OFF;
@@ -1096,7 +1096,7 @@
       for (j=0; j<map->numlayers; j++) {
 	layerObj *lp;
 	
-	lp = &(map->layers[j]);
+	lp = &(GET_LAYER(map, j));
 	
 	if (msWFSIsLayerSupported(lp) && lp->name && strcasecmp(lp->name, layers[k]) == 0) {
 	  const char *pszThisLayerSRS;
@@ -1431,7 +1431,7 @@
     
     /* if no results where written (TODO: this needs to be GML2/3 specific I imagine */
     for(i=0; i<map->numlayers; i++) {
-      if (map->layers[i].resultcache && map->layers[i].resultcache->numresults > 0)
+      if (GET_LAYER(map, i)->resultcache && GET_LAYER(map, i)->resultcache->numresults > 0)
         break;
     }
     if ((i==map->numlayers) || (maxfeatures == 0)) {
Index: mapwfslayer.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwfslayer.c,v
retrieving revision 1.37
diff -U3 -r1.37 mapwfslayer.c
--- mapwfslayer.c	19 May 2006 20:53:27 -0000	1.37
+++ mapwfslayer.c	22 Feb 2007 08:11:41 -0000
@@ -704,7 +704,7 @@
         int iLayer;
         for(iLayer=0; iLayer < map->numlayers; iLayer++)
         {
-            if (&(map->layers[iLayer]) == lp)
+            if (&(GET_LAYER(map, iLayer)) == lp)
             {
                 nLayerId = iLayer;
                 break;
Index: mapwms.c
===================================================================
RCS file: /data2/cvsroot/mapserver/mapwms.c,v
retrieving revision 1.182
diff -U3 -r1.182 mapwms.c
--- mapwms.c	13 Feb 2007 04:39:07 -0000	1.182
+++ mapwms.c	22 Feb 2007 08:11:45 -0000
@@ -458,7 +458,7 @@
     {
         for (i=0; i<map->numlayers; i++)
         {
-            lp = &(map->layers[i]);
+            lp = (GET_LAYER(map, i));
             if (lp->status != MS_ON && lp->status != MS_DEFAULT)
               continue;
             /* check if the layer is time aware */
@@ -599,8 +599,8 @@
       {
         /* Keep only layers with status=DEFAULT by default */
         /* Layer with status DEFAULT is drawn first. */
-        if (map->layers[j].status != MS_DEFAULT)
-           map->layers[j].status = MS_OFF;
+        if (GET_LAYER(map, j)->status != MS_DEFAULT)
+           GET_LAYER(map, j)->status = MS_OFF;
         else
            map->layerorder[nLayerOrder++] = j;
       }
@@ -611,12 +611,12 @@
           for (j=0; j<map->numlayers; j++)
           {
               /* Turn on selected layers only. */
-              if ((map->layers[j].name &&
-                   strcasecmp(map->layers[j].name, layers[k]) == 0) ||
+              if ((GET_LAYER(map, j)->name &&
+                   strcasecmp(GET_LAYER(map, j)->name, layers[k]) == 0) ||
                   (map->name && strcasecmp(map->name, layers[k]) == 0) ||
-                  (map->layers[j].group && strcasecmp(map->layers[j].group, layers[k]) == 0))
+                  (GET_LAYER(map, j)->group && strcasecmp(GET_LAYER(map, j)->group, layers[k]) == 0))
               {
-                  map->layers[j].status = MS_ON;
+                  GET_LAYER(map, j)->status = MS_ON;
                   map->layerorder[nLayerOrder++] = j;
                   validlayers++;
                   layerfound = 1;
@@ -630,7 +630,7 @@
       /* set all layers with status off at end of array */
       for (j=0; j<map->numlayers; j++)
       {
-         if (map->layers[j].status == MS_OFF)
+         if (GET_LAYER(map, j)->status == MS_OFF)
            map->layerorder[nLayerOrder++] = j;
       }
 
@@ -782,7 +782,7 @@
       {
           layerObj *lp = NULL;
 
-          lp = &(map->layers[i]);
+          lp = (GET_LAYER(map, i));
           if (lp->status != MS_ON && lp->status != MS_DEFAULT)
               continue;
 
@@ -852,10 +852,10 @@
           for (i=0; i<map->numlayers; i++)
           {
               epsgvalid = MS_FALSE;
-              if (map->layers[i].status == MS_ON)
+              if (GET_LAYER(map, i)->status == MS_ON)
               {
-                  projstring = msOWSGetEPSGProj(&(map->layers[i].projection),
-                                                &(map->layers[i].metadata),
+                  projstring = msOWSGetEPSGProj(&(GET_LAYER(map, i)->projection),
+                                                &(GET_LAYER(map, i)->metadata),
                                                 "MO", MS_FALSE);
                   if (projstring)
                   {
@@ -953,9 +953,9 @@
 
           for(i=0; i<map->numlayers; i++)
           {
-              if (map->layers[i].projection.numargs <= 0 &&
-                  map->layers[i].status != MS_OFF &&
-                  map->layers[i].transform == MS_TRUE)
+              if (GET_LAYER(map, i)->projection.numargs <= 0 &&
+                  GET_LAYER(map, i)->status != MS_OFF &&
+                  GET_LAYER(map, i)->transform == MS_TRUE)
               {
                   /* This layer is turned on and needs a projection */
 
@@ -963,13 +963,13 @@
                   if (original_srs == NULL)
                       original_srs = msGetProjectionString(&(map->projection));
 
-                  if (msLoadProjectionString(&(map->layers[i].projection),
+                  if (msLoadProjectionString(&(GET_LAYER(map, i)->projection),
                                              original_srs) != 0)
                   {
                       msFreeProjection(&newProj);
                       return msWMSException(map, nVersion, NULL);
                   }
-                  map->layers[i].project = MS_TRUE;
+                  GET_LAYER(map, i)->project = MS_TRUE;
               }
           }
 
@@ -1529,10 +1529,10 @@
     nestedGroups[i] = NULL; /* default */
     numNestedGroups[i] = 0; /* default */
     
-    groups = msOWSLookupMetadata(&(map->layers[i].metadata), "MO", "layer_group");
+    groups = msOWSLookupMetadata(&(GET_LAYER(map, i)->metadata), "MO", "layer_group");
     if ((groups != NULL) && (strlen(groups) != 0))
     {
-      if (map->layers[i].group != NULL && strlen(map->layers[i].group) != 0)
+      if (GET_LAYER(map, i)->group != NULL && strlen(GET_LAYER(map, i)->group) != 0)
       {
         errorMsg = "It is not allowed to set both the GROUP and WMS_LAYER_GROUP for a layer";
         msSetError(MS_WMSERR, errorMsg, "msWMSPrepareNestedGroups()", NULL);
@@ -1603,7 +1603,7 @@
    if (numNestedGroups[index] <= level) /* no more subgroups */
    {
       /* we are at the deepest level of the group branchings, so add layer now. */
-      msDumpLayer(map, &map->layers[index], nVersion, script_url_encoded, "");
+      msDumpLayer(map, GET_LAYER(map, index), nVersion, script_url_encoded, "");
       pabLayerProcessed[index] = 1; /* done */
    }
    else /* not yet there, we have to deal with this group and possible subgroups and layers. */
@@ -1952,7 +1952,7 @@
      for(i=0; i<map->numlayers; i++)
      {
          layerObj *lp;
-         lp = &(map->layers[i]);
+         lp = (GET_LAYER(map, i));
 
          if (pabLayerProcessed[i])
              continue;  /* Layer has already been handled */
@@ -1995,10 +1995,10 @@
              for(j=i; j<map->numlayers; j++)
              {
                  if (!pabLayerProcessed[j] &&
-                     map->layers[j].group &&
-                     strcmp(lp->group, map->layers[j].group) == 0 )
+                     GET_LAYER(map, j)->group &&
+                     strcmp(lp->group, GET_LAYER(map, j)->group) == 0 )
                  {
-                     msDumpLayer(map, &(map->layers[j]), nVersion, script_url_encoded, "  ");
+                     msDumpLayer(map, (GET_LAYER(map, j)), nVersion, script_url_encoded, "  ");
                      pabLayerProcessed[j] = 1;
                  }
              }
@@ -2159,7 +2159,7 @@
   {
       for (i=0; i<map->numlayers; i++)
       {
-          if (msLookupHashTable(&(map->layers[i].metadata), "tmp_wms_sld_query"))
+          if (msLookupHashTable(&(GET_LAYER(map, i)->metadata), "tmp_wms_sld_query"))
           {
               sldspatialfilter = MS_TRUE;
               break;
@@ -2177,31 +2177,31 @@
       
       /* compute layer scale factors now */
       for(i=0;i<map->numlayers; i++) {
-          if(map->layers[i].sizeunits != MS_PIXELS)
-            map->layers[i].scalefactor = (msInchesPerUnit(map->layers[i].sizeunits,0)/msInchesPerUnit(map->units,0)) / map->cellsize;
-          else if(map->layers[i].symbolscale > 0 && map->scale > 0)
-            map->layers[i].scalefactor = map->layers[i].symbolscale/map->scale;
+          if(GET_LAYER(map, i)->sizeunits != MS_PIXELS)
+            GET_LAYER(map, i)->scalefactor = (msInchesPerUnit(GET_LAYER(map, i)->sizeunits,0)/msInchesPerUnit(map->units,0)) / map->cellsize;
+          else if(GET_LAYER(map, i)->symbolscale > 0 && map->scale > 0)
+            GET_LAYER(map, i)->scalefactor = GET_LAYER(map, i)->symbolscale/map->scale;
           else
-            map->layers[i].scalefactor = 1;
+            GET_LAYER(map, i)->scalefactor = 1;
       }
       for (i=0; i<map->numlayers; i++)
       {
-          if (msLookupHashTable(&(map->layers[i].metadata), "tmp_wms_sld_query") &&
-              (map->layers[i].type == MS_LAYER_POINT || 
-               map->layers[i].type == MS_LAYER_LINE ||
-               map->layers[i].type == MS_LAYER_POLYGON ||
-               map->layers[i].type == MS_LAYER_ANNOTATION ||
-               map->layers[i].type == MS_LAYER_TILEINDEX))
+          if (msLookupHashTable(&(GET_LAYER(map, i)->metadata), "tmp_wms_sld_query") &&
+              (GET_LAYER(map, i)->type == MS_LAYER_POINT || 
+               GET_LAYER(map, i)->type == MS_LAYER_LINE ||
+               GET_LAYER(map, i)->type == MS_LAYER_POLYGON ||
+               GET_LAYER(map, i)->type == MS_LAYER_ANNOTATION ||
+               GET_LAYER(map, i)->type == MS_LAYER_TILEINDEX))
                
           {
               /* make sure that there is a resultcache. If not just ignore */
               /* the layer */
-              if (map->layers[i].resultcache)
-                msDrawQueryLayer(map, &map->layers[i], img);
+              if (GET_LAYER(map, i)->resultcache)
+                msDrawQueryLayer(map, GET_LAYER(map, i), img);
           }
 
           else
-            msDrawLayer(map, &map->layers[i], img);
+            msDrawLayer(map, GET_LAYER(map, i), img);
       }
 
   }
@@ -2236,7 +2236,7 @@
       const char *value;
 
       layerObj *lp;
-      lp = &(map->layers[i]);
+      lp = (GET_LAYER(map, i));
 
       if(lp->status != MS_ON || lp->resultcache==NULL || lp->resultcache->numresults == 0)
         continue;
@@ -2350,14 +2350,14 @@
 
       for(j=0; j<map->numlayers; j++) {
         /* Force all layers OFF by default */
-	map->layers[j].status = MS_OFF;
+	GET_LAYER(map, j)->status = MS_OFF;
 
         for(k=0; k<numlayers; k++) {
-          if ((map->layers[j].name && strcasecmp(map->layers[j].name, layers[k]) == 0) ||
+          if ((GET_LAYER(map, j)->name && strcasecmp(GET_LAYER(map, j)->name, layers[k]) == 0) ||
               (map->name && strcasecmp(map->name, layers[k]) == 0) ||
-              (map->layers[j].group && strcasecmp(map->layers[j].group, layers[k]) == 0))
+              (GET_LAYER(map, j)->group && strcasecmp(GET_LAYER(map, j)->group, layers[k]) == 0))
             {
-              map->layers[j].status = MS_ON;
+              GET_LAYER(map, j)->status = MS_ON;
               numlayers_found++;
             }
         }
@@ -2381,8 +2381,8 @@
         int j;
         for(j=0; j<map->numlayers; j++)
         {
-            map->layers[j].tolerance = atoi(values[i]);
-            map->layers[j].toleranceunits = MS_PIXELS;
+            GET_LAYER(map, j)->tolerance = atoi(values[i]);
+            GET_LAYER(map, j)->toleranceunits = MS_PIXELS;
         }
     }
 
@@ -2408,7 +2408,7 @@
 /* -------------------------------------------------------------------- */
   for (i=0; i<map->numlayers; i++)
   {
-      if (map->layers[i].status == MS_ON && !msIsLayerQueryable(&map->layers[i]))
+      if (GET_LAYER(map, i)->status == MS_ON && !msIsLayerQueryable(GET_LAYER(map, i)))
       {
           msSetError(MS_WMSERR, "Requested layer(s) are not queryable.", "msWMSFeatureInfo()");
           return msWMSException(map, nVersion, "LayerNotQueryable");
@@ -2537,7 +2537,7 @@
    {
        for(k=0; k<map->numlayers; k++)
        {
-         lp = &map->layers[k];
+         lp = GET_LAYER(map, k);
          if (lp->name && strcasecmp(lp->name, layers[j]) == 0)
          {
              /* Look for a WFS onlineresouce at the layer level and then at
@@ -2675,8 +2675,8 @@
      /* the group name. */
      for (i=0; i<map->numlayers; i++)
      {
-         if (map->layers[i].name &&
-             strcasecmp(map->layers[i].name, pszLayer) == 0)
+         if (GET_LAYER(map, i)->name &&
+             strcasecmp(GET_LAYER(map, i)->name, pszLayer) == 0)
          {
              iLayerIndex = i;
              break;
@@ -2710,9 +2710,9 @@
          for (i=0; i<map->numlayers; i++)
          {
              if (i == iLayerIndex)
-                 map->layers[i].status = MS_ON;
+                 GET_LAYER(map, i)->status = MS_ON;
              else
-                 map->layers[i].status = MS_OFF;
+                 GET_LAYER(map, i)->status = MS_OFF;
          }
 
          /* if SCALE was provided in request, calculate an extent and use a default width and height */
@@ -2745,15 +2745,15 @@
          /* RULE was specified. Get the class corresponding to the RULE */
          /* (RULE = class->name) */
          
-         for (i=0; i<map->layers[iLayerIndex].numclasses; i++)
+         for (i=0; i<GET_LAYER(map, iLayerIndex)->numclasses; i++)
          {
-             if (map->layers[iLayerIndex].class[i].name && 
-                 strlen(map->layers[iLayerIndex].class[i].name) > 0 &&
-                 strcasecmp(map->layers[iLayerIndex].class[i].name,psRule) == 0)
+             if (GET_LAYER(map, iLayerIndex)->class[i].name && 
+                 strlen(GET_LAYER(map, iLayerIndex)->class[i].name) > 0 &&
+                 strcasecmp(GET_LAYER(map, iLayerIndex)->class[i].name,psRule) == 0)
                break;
              
          }
-         if (i < map->layers[iLayerIndex].numclasses)
+         if (i < GET_LAYER(map, iLayerIndex)->numclasses)
          {
          /* set the map legend parameters */
              if (nWidth < 0)
@@ -2771,8 +2771,8 @@
                    nHeight = 20;
              }
              
-             img = msCreateLegendIcon(map, &map->layers[iLayerIndex], 
-                                      &map->layers[iLayerIndex].class[i],
+             img = msCreateLegendIcon(map, GET_LAYER(map, iLayerIndex), 
+                                      &(GET_LAYER(map, iLayerIndex)->class[i]),
                                       nWidth, nHeight);
          }
          if (img == NULL)
@@ -2824,16 +2824,16 @@
                 return msWMSException(map, nVersion, NULL);
             }
             for(j=0; j<map->numlayers; j++)
-               map->layers[j].status = MS_OFF;
+               GET_LAYER(map, j)->status = MS_OFF;
 
             for (k=0; k<numlayers; k++)
             {
                 for (j=0; j<map->numlayers; j++)
                 {
-                    if (map->layers[j].name &&
-                        strcasecmp(map->layers[j].name, layers[k]) == 0)
+                    if (GET_LAYER(map, j)->name &&
+                        strcasecmp(GET_LAYER(map, j)->name, layers[k]) == 0)
                     {
-                        map->layers[j].status = MS_ON;
+                        GET_LAYER(map, j)->status = MS_ON;
                         validlayer =1;
                     }
                 }
Index: shp2img.c
===================================================================
RCS file: /data2/cvsroot/mapserver/shp2img.c,v
retrieving revision 1.20
diff -U3 -r1.20 shp2img.c
--- shp2img.c	12 May 2006 20:59:07 -0000	1.20
+++ shp2img.c	22 Feb 2007 08:11:48 -0000
@@ -154,9 +154,9 @@
 
     if(strcmp(argv[i],"-d") == 0) { /* swap layer data */
       for(j=0; j<map->numlayers; j++) {
-	 if(strcmp(map->layers[j].name, argv[i+1]) == 0) {
-	   free(map->layers[j].data);
-	   map->layers[j].data = strdup(argv[i+2]);
+	 if(strcmp(GET_LAYER(map, j)->name, argv[i+1]) == 0) {
+	   free(GET_LAYER(map, j)->data);
+	   GET_LAYER(map, j)->data = strdup(argv[i+2]);
 	   break;
 	 }
       }
@@ -169,7 +169,7 @@
 
         map->debug = debug_level;
         for(j=0; j<map->numlayers; j++) {
-            map->layers[j].debug = debug_level;
+            GET_LAYER(map, j)->debug = debug_level;
         }
         if( getenv( "MS_ERRORFILE" ) == NULL )
             putenv( "MS_ERRORFILE=stderr" );
@@ -187,8 +187,8 @@
         int got_layer = 0;
 
         for(j=0; j<map->numlayers; j++) {
-            if(strcmp(map->layers[j].name,layer_name) == 0 ) {
-                map->layers[j].debug = debug_level;
+            if(strcmp(GET_LAYER(map, j)->name,layer_name) == 0 ) {
+                GET_LAYER(map, j)->debug = debug_level;
                 got_layer = 1;
             }
         }
@@ -210,13 +210,13 @@
       layers = split(argv[i+1], ' ', &(num_layers));
 
       for(j=0; j<map->numlayers; j++) {
-	if(map->layers[j].status == MS_DEFAULT)
+	if(GET_LAYER(map, j)->status == MS_DEFAULT)
 	  continue;
 	else {
-	  map->layers[j].status = MS_OFF;
+	  GET_LAYER(map, j)->status = MS_OFF;
 	  for(k=0; k<num_layers; k++) {
-	    if(map->layers[j].name && strcmp(map->layers[j].name, layers[k]) == 0) {
-	      map->layers[j].status = MS_ON;
+	    if(GET_LAYER(map, j)->name && strcmp(GET_LAYER(map, j)->name, layers[k]) == 0) {
+	      GET_LAYER(map, j)->status = MS_ON;
 	      break;
 	    }
 	  }
Index: shp2pdf.c
===================================================================
RCS file: /data2/cvsroot/mapserver/shp2pdf.c,v
retrieving revision 1.7
diff -U3 -r1.7 shp2pdf.c
--- shp2pdf.c	14 Jun 2005 16:03:35 -0000	1.7
+++ shp2pdf.c	22 Feb 2007 08:11:48 -0000
@@ -134,9 +134,9 @@
 
     if(strncmp(argv[i],"-d",2) == 0) { /* swap layer data */
       for(j=0; j<map->numlayers; j++) {
-     if(strcmp(map->layers[j].name, argv[i+1]) == 0) {
-       free(map->layers[j].data);
-       map->layers[j].data = strdup(argv[i+2]);
+     if(strcmp(GET_LAYER(map, j)->name, argv[i+1]) == 0) {
+       free(GET_LAYER(map, j)->data);
+       GET_LAYER(map, j)->data = strdup(argv[i+2]);
        break;
      }
       }
@@ -160,13 +160,13 @@
       layers = split(argv[i+1], ' ', &(num_layers));
 
       for(j=0; j<map->numlayers; j++) {
-    if(map->layers[j].status == MS_DEFAULT)
+    if(GET_LAYER(map, j)->status == MS_DEFAULT)
       continue;
     else {
-      map->layers[j].status = MS_OFF;
+      GET_LAYER(map, j)->status = MS_OFF;
       for(k=0; k<num_layers; k++) {
-        if(strcmp(map->layers[j].name, layers[k]) == 0) {
-          map->layers[j].status = MS_ON;
+        if(strcmp(GET_LAYER(map, j)->name, layers[k]) == 0) {
+          GET_LAYER(map, j)->status = MS_ON;
           break;
         }
       }

