anchor.diff:                  path.Free;
                 end;
               end
  -            else
  +            else //draw our polygons
               begin
  -              // todo: add smart code for combinations of refObj=nil, texture values being NaN etc.
  -              if Assigned(refObj) and not IsNaN(refObj.texture2) then
  -              begin
  -                colors2 := fPalette.ValueToColors(isgop.Value.texture2-refObj.texture2);
  -                if IsNaN(isgop.Value.texture)
  -                then colors := colors2
  -                else colors := fPalette.ValueToColors(isgop.Value.texture-refObj.texture);
  -              end
  -              else
  -              begin
  -                colors2 := TGeoColors.Create(TAlphaColorRec.Black or TAlphaColorRec.Alpha, TAlphaColorRec.Black or TAlphaColorRec.Alpha);
  -                colors := colors2;
  -              end;
                 setLength(polygon, 5);
                 for part in isgop.Value.fGeometry.parts do
                 begin
  
positive.code:   part: TWDGeometryPart;
    point: TWDGeometryPoint;
    path: TPathData;
    x, y, xPrev, yPrev, xn, yn: Double;
    l: Double;
    bufferExtent: TExtent;
    colors: TGeoColors;
    colors2: TGeoColors;
    refObj: TSliceGeometryICLRObject;
  begin
    Result := gtsFailed; // sentinel
  
negative.code:       try
          for isgop in (fCurrentSlice as TSliceGeometryICLR).fGeometries do
          begin
            if bufferExtent.Intersects(isgop.Value.fExtent) then
            begin
              // get reference geometry object
              validL := True;
              validR := True;
              if not (fRefSlice as TSliceGeometryICLR).fGeometries.TryGetValue(isgop.Key, refObj) then
              begin
                validL := False;
                validR := False;
              end
              else
              begin
                //see if we can find L width
                if not IsNaN(isgop.Value.value) then
                begin
                  if not IsNaN(refObj.value) then
                    widthL := (isgop.Value.value + refObj.value) / 2
                  else
                    widthL := isgop.Value.value;
                end
                else
                begin
                  if not IsNaN(refObj.value) then
                    widthL := refObj.value
                  else
                    validL := False;
                end;
                //see if we can find R width
                if not IsNaN(isgop.Value.value2) then
                begin
                  if not IsNaN(refObj.value2) then
                    widthR := (isgop.Value.value2 + refObj.value2) / 2
                  else
                    widthR := isgop.Value.value2;
                end
                else
                begin
                  if not IsNaN(refObj.value2) then
                    widthR := refObj.value2
                  else
                    validR := False;
                end;
                //see if we can find L color
                if not (IsNaN(isgop.Value.texture) or IsNaN(refObj.texture)) then
                  colorsL := fPalette.ValueToColors(isgop.Value.texture-refObj.texture)
                else
                  validL := False;
                //see if we can find R color
                if not (IsNaN(isgop.Value.texture2) or IsNaN(refObj.texture2)) then
                  colorsR := fPalette.ValueToColors(isgop.Value.texture2-refObj.texture2)
                else
                  validR := False;
              end;
  
              if not (validR or validL) then //if neither side is valid -> draw a thin black line
              begin
                path := GeometryToPath(aExtent, aPixelWidth, aPixelHeight, isgop.Value.fGeometry);
                try
                  aBitmap.Canvas.Stroke.Color := TAlphaColorRec.Black or TAlphaColorRec.Alpha;
  