--- ./mapwms.c	2007-07-27 14:21:57.000000000 -0400
+++ mapwms.c.ows_service	2007-07-27 14:22:21.000000000 -0400
@@ -1440,6 +1440,45 @@
    
 } /* msWMSPrintNestedGroups */
 
+/* 
+Verify if the Layer is a valid WMS layer and can be displayed in a 
+GetCapability request
+*/
+int msWMSIsLayerSupported( layerObj *lp) {
+    const char *value;
+    int bIsWMSLayerSupported=TRUE; /* WMS Layer is enable by default */
+
+    if( (value = msOWSLookupMetadata(&(lp->metadata), "MO", "service")) || 
+	(value=msOWSLookupMetadata(&(lp->map->web.metadata),"MO","service")) ) 
+	{
+	    char **services;
+	    int tok;
+	    int j;
+/* -------------------------------------------------------------------- */
+/* We have a service metadata, disable wms unless it is explicitly      */
+/* required                                                             */
+/* -------------------------------------------------------------------- */
+	    bIsWMSLayerSupported=FALSE;
+
+	    services = msStringSplit(value, '|', &tok);
+
+	    for( j=0; j<tok; j++ )
+		{
+		    if( !strcasecmp("wms",services[j]) )
+			{
+/* -------------------------------------------------------------------- */
+/*      Ok we want WMS.                                                 */
+/* -------------------------------------------------------------------- */
+			    bIsWMSLayerSupported=TRUE;
+			}
+		}
+	    free(services);
+	}
+
+    
+    return( bIsWMSLayerSupported );
+}
+
 /*
 ** msWMSGetCapabilities()
 */
@@ -1767,6 +1806,11 @@
          if (pabLayerProcessed[i])
              continue;  /* Layer has already been handled */
 
+	 if (!msWMSIsLayerSupported(lp)) 
+	     continue; /* Not a WMS layer */
+
+	 //	 if (msWMSIsTileIndex())
+	 //	     continue; /* Tileindex layer are not displayed */
 
          if (numNestedGroups[i] > 0) 
          {
