anchor.diff:          (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;
  +            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
  
positive.code:                 end;
                end;
              end;
            end;
          end;
          // todo: process ref geometries not in current? or just skip..
  
negative.code:               end
                else
                begin
                  colors2 := fPalette.ValueToColors(isgop.Value.texture2);
                  if IsNaN(isgop.Value.texture)
                  then colors := colors2
                  else colors := fPalette.ValueToColors(isgop.Value.texture);
                end;
                setLength(polygon, 5);
                for part in isgop.Value.fGeometry.parts do
  