anchor.diff:                      yn := xPrev-x;
                       // normalize..
                       l := sqrt((xn*xn)+(yn*yn));
  -
  -                    if not (IsNaN(isgop.Value.value) or IsNaN(isgop.Value.value2)) then
  +                    polygon[0].X := xPrev;
  +                    polygon[0].Y := yPrev;
  +                    polygon[1].X := x;
  +                    polygon[1].Y := y;
  +                    polygon[4].X := xPrev;
  +                    polygon[4].Y := yPrev;
  +
  +                    //draw right side
  +                    if validR then
                       begin
  -                      // add polygon to the right for x,y x2,y2
  -                      xn := {(1+}isgop.Value.value2*capacityFactor{)}*xn/l;
  -                      yn := {(1+}isgop.Value.value2*capacityFactor{)}*yn/l;
  -
  -                      polygon[0].X := xPrev;
  -                      polygon[0].Y := yPrev;
  -                      polygon[1].X := x;
  -                      polygon[1].Y := y;
  -                      polygon[2].X := x+xn;
  -                      polygon[2].Y := y+yn;
  -                      polygon[3].X := xPrev+xn;
  -                      polygon[3].Y := yPrev+yn;
  -                      polygon[4].X := xPrev;
  -                      polygon[4].Y := yPrev;
  +                      xd := {(1+}widthR*capacityFactor{)}*xn/l;
  +                      yd := {(1+}widthR*capacityFactor{)}*yn/l;
  +
  +                      polygon[2].X := x-xd;
  +                      polygon[2].Y := y-yd;
  +                      polygon[3].X := xPrev-xd;
  +                      polygon[3].Y := yPrev-yd;
   
                         // draw
  -                      if colors.fillColor<>0  then
  +                      if colorsR.fillColor<>0  then
                         begin
  -                        aBitmap.Canvas.Fill.Color := colors.fillColor;
  +                        aBitmap.Canvas.Fill.Color := colorsR.fillColor;
                           aBitmap.Canvas.FillPolygon(polygon, 1);
                         end;
  -                      if colors.outlineColor<>0 then
  +                      if colorsR.outlineColor<>0 then
                         begin
  -                        aBitmap.Canvas.Stroke.Color := colors.outlineColor;
  +                        aBitmap.Canvas.Stroke.Color := colorsR.outlineColor;
                           aBitmap.Canvas.DrawPolygon(polygon, 1);
                         end;
  -
  -                      //left
  -                      // add polygon to the left for x,y x2,y2
  -                      xn := yPrev-y;
  -                      yn := x-xPrev;
  -                      // normalize..
  -                      l := sqrt((xn*xn)+(yn*yn));
  -                      xn := {(1+}isgop.Value.value*capacityFactor{)}*xn/l;
  -                      yn := {(1+}isgop.Value.value*capacityFactor{)}*yn/l;
  +                    end;
  +                    //draw left side
  +                    if validL then
  +                    begin
  +                      xd := {(1+}widthL*capacityFactor{)}*xn/l;
  +                      yd := {(1+}widthL*capacityFactor{)}*yn/l;
   
                         // todo: wrong rotation direction..
  -                      polygon[2].X := x-xn;
  -                      polygon[2].Y := y-yn;
  -                      polygon[3].X := xPrev-xn;
  -                      polygon[3].Y := yPrev-yn;
  +                      polygon[2].X := x+xd;
  +                      polygon[2].Y := y+yd;
  +                      polygon[3].X := xPrev+xd;
  +                      polygon[3].Y := yPrev+yd;
                         // draw left
  -                      if colors2.fillColor<>0 then
  +                      if colorsL.fillColor<>0 then
                         begin
  -                        aBitmap.Canvas.Fill.Color := colors2.fillColor;
  +                        aBitmap.Canvas.Fill.Color := colorsL.fillColor;
                           aBitmap.Canvas.FillPolygon(polygon, 1);
                         end;
  -                      if colors2.outlineColor<>0 then
  +                      if colorsL.outlineColor<>0 then
                         begin
  -                        aBitmap.Canvas.Stroke.Color := colors2.outlineColor;
  -                        aBitmap.Canvas.DrawPolygon(polygon, 1);
  -                      end;
  -                    end
  -                    else
  -                    begin
  -                      // draw centered line around path with capacity as width
  -                      if IsNaN(isgop.Value.value) then
  -                      begin
  -                        xn := 0.5*{(1+}isgop.Value.value2*capacityFactor{)}*xn/l;
  -                        yn := 0.5*{(1+}isgop.Value.value2*capacityFactor{)}*yn/l;
  -                      end
  -                      else
  -                      begin
  -                        xn := 0.5*{(1+}isgop.Value.value*capacityFactor{)}*xn/l;
  -                        yn := 0.5*{(1+}isgop.Value.value*capacityFactor{)}*yn/l;
  -                      end;
  -
  -                      polygon[0].X := xPrev-xn;
  -                      polygon[0].Y := yPrev-yn;
  -                      polygon[1].X := x-xn;
  -                      polygon[1].Y := y-yn;
  -                      polygon[2].X := x+xn;
  -                      polygon[2].Y := y+yn;
  -                      polygon[3].X := xPrev+xn;
  -                      polygon[3].Y := yPrev+yn;
  -                      polygon[4].X := xPrev-xn;
  -                      polygon[4].Y := yPrev-yn;
  -
  -                      // draw
  -                      if colors.fillColor<>0 then
  -                      begin
  -                        aBitmap.Canvas.Fill.Color := colors.fillColor;
  -                        aBitmap.Canvas.FillPolygon(polygon, 1);
  -                      end;
  -                      if colors.outlineColor<>0 then
  -                      begin
  -                        aBitmap.Canvas.Stroke.Color := colors.outlineColor;
  +                        aBitmap.Canvas.Stroke.Color := colorsL.outlineColor;
                           aBitmap.Canvas.DrawPolygon(polygon, 1);
                         end;
                       end;
  
positive.code:       try
          for isgop in (fCurrentSlice as TSliceGeometryICLR).fGeometries do
          begin
            // get reference geometry object
            if not (fRefSlice as TSliceGeometryICLR).fGeometries.TryGetValue(isgop.Key, refObj)
            then refObj := nil;
  
            if bufferExtent.Intersects(isgop.Value.fExtent) then
            begin
              if (not Assigned(refObj)) or (IsNaN(isgop.Value.texture) and IsNaN(isgop.Value.texture2)) then
              begin // both values are NaN -> draw small black line
                path := GeometryToPath(aExtent, aPixelWidth, aPixelHeight, isgop.Value.fGeometry);
                try
                  aBitmap.Canvas.Stroke.Color := TAlphaColorRec.Black or TAlphaColorRec.Alpha;
  
negative.code:         (icehObjectID shl 3) or wtLengthDelimited:
            begin
              id := aBuffer.bb_read_rawbytestring(aCursor);
              if fGeometries.TryGetValue(id, sgo) then
              begin
                if Assigned(geometry) then
                begin
                // Assume that geometry is modified if we received geometry in the payload.
                // We remove the geometry from fLocations. The list will free the geometry.
                  fGeometries.Remove(id);
                  sgo := TSliceGeometryICLRObject.Create(geometry, value, value2, texture, texture2);
                  if fMaxExtent.IsEmpty
                  then fMaxExtent := sgo.extent
                  else fMaxExtent.Expand(sgo.extent);
                  fGeometries.Add(id, sgo);
                  geometry := nil; // do not free. Object is owned by fLocations
                end
                else
                begin
                  if not IsNaN(value) then
                  begin
                    sgo.value := value;
                  end;
                  if not IsNaN(value2) then
                  begin
                    sgo.value2 := value2;
                  end;
                  if not IsNaN(texture) then
                  begin
                    sgo.texture := texture;
                  end;
                  if not IsNaN(texture2) then
                  begin
                    sgo.texture2 := texture2;
                  end;
                end;
              end
              else
              begin
                if Assigned(geometry) then
                begin
                  sgo := TSliceGeometryICLRObject.Create(geometry, value, value2, texture, texture2);
                  if fMaxExtent.IsEmpty
                    then fMaxExtent := sgo.extent
                  else fMaxExtent.Expand(sgo.extent);
                  fGeometries.Add(id, sgo);
                  geometry := nil;
                  value := NaN;
                end;
              end;
            end;
          (icehTilerValue shl 3) or wt64Bit:
            begin
  