diff -ru ./mapdraw.c ./mapdraw.c
--- ./mapdraw.c	2009-05-04 11:30:30.000000000 +0200
+++ ./mapdraw.c	2009-05-04 10:59:55.000000000 +0200
@@ -1101,13 +1101,17 @@
           layer->class[i]->styles[0]->outlinecolor = map->querymap.color;
         }
       } else {
-        if(MS_VALID_COLOR(layer->class[i]->styles[layer->class[i]->numstyles-1]->color)) {
-          colorbuffer[i] = layer->class[i]->styles[layer->class[i]->numstyles-1]->color; /* save the color from the TOP style */
-          layer->class[i]->styles[layer->class[i]->numstyles-1]->color = map->querymap.color;
-        } else if(MS_VALID_COLOR(layer->class[i]->styles[layer->class[i]->numstyles-1]->outlinecolor)) {
-	  colorbuffer[i] = layer->class[i]->styles[layer->class[i]->numstyles-1]->outlinecolor; /* if no color, save the outlinecolor from the TOP style */
-          layer->class[i]->styles[layer->class[i]->numstyles-1]->outlinecolor = map->querymap.color;
-        }
+	int j;
+	for(j=0;j<layer->class[i]->numstyles;j++){
+	  if(MS_VALID_COLOR(layer->class[i]->styles[j]->color)) {
+	    colorbuffer[i] = layer->class[i]->styles[j]->color; /* save the color from the TOP style */
+	    layer->class[i]->styles[j]->color = map->querymap.color;
+	  } else if(MS_VALID_COLOR(layer->class[i]->styles[j]->outlinecolor)) {
+	    colorbuffer[i] = layer->class[i]->styles[j]->outlinecolor; /* if no color, save the outlinecolor from the TOP style */
+	    layer->class[i]->styles[j]->outlinecolor = map->querymap.color;
+	  }
+	}
+	
       }
 
       mindistancebuffer[i] = layer->class[i]->label.mindistance;
@@ -1193,18 +1197,41 @@
 
   if(shpcache) {
     int s;
+
+    shapeObj nonClippedShape;
+    rectObj cliprect;
   
     for(s=1; s<maxnumstyles; s++) {
       for(current=shpcache; current; current=current->next) {        
         if(layer->class[current->shape.classindex]->numstyles > s) {
           styleObj *curStyle = layer->class[current->shape.classindex]->styles[s];
+	  if(curStyle->_geomtransform!=MS_GEOMTRANSFORM_NONE){
+	    msInitShape(&nonClippedShape);
+	    msCopyShape(&current->shape,&nonClippedShape);
+	    
+	    msClipPolylineRect(&current->shape, cliprect);
+	    /*if(current->shape.numlines == 0) {
+	      msFreeShape(&nonClippedShape);   
+	      return(MS_SUCCESS);
+	    }*/
+	    msTransformShape(&current->shape, map->extent, map->cellsize, image);
+	    msTransformShape(&nonClippedShape, map->extent, map->cellsize, image);
+	    msOffsetShapeRelativeTo(&nonClippedShape, layer);
+	  }
+
           if(map->scaledenom > 0) {
             if((curStyle->maxscaledenom != -1) && (map->scaledenom >= curStyle->maxscaledenom))
               continue;
             if((curStyle->minscaledenom != -1) && (map->scaledenom < curStyle->minscaledenom))
               continue;
           }
-	      msDrawLineSymbol(&map->symbolset, image, &current->shape, (layer->class[current->shape.classindex]->styles[s]), layer->scalefactor);
+
+	  if(curStyle->_geomtransform != MS_GEOMTRANSFORM_NONE){
+	    msDrawTransformedShape(map, &map->symbolset, image, &nonClippedShape, curStyle, layer->scalefactor);
+	    msFreeShape(&nonClippedShape);
+	  }
+	  else
+	    msDrawLineSymbol(&map->symbolset, image, &current->shape, (layer->class[current->shape.classindex]->styles[s]), layer->scalefactor);
         }
       }
     }
