Index: prototypes/containers/JclArrayLists.imp
===================================================================
--- prototypes/containers/JclArrayLists.imp	(revision 2870)
+++ prototypes/containers/JclArrayLists.imp	(working copy)
@@ -327,7 +327,7 @@
       begin
         FElementData[I] := DEFAULTVALUE;
         if I < (FSize - 1) then
-          MoveArray(FElementData, I + 1, I, FSize - I);
+          MoveArray(FElementData, I + 1, I, FSize - 1 - I);
         Dec(FSize);
         Result := True;
         if FRemoveSingleElement then
@@ -358,8 +358,9 @@
     if (Index >= 0) and (Index < FSize) then
     begin
       Result := FElementData[Index];
+      FElementData[Index] := DEFAULTVALUE;      
       if Index < (FSize - 1) then
-        MoveArray(FElementData, Index + 1, Index, FSize - Index);
+        MoveArray(FElementData, Index + 1, Index, FSize - 1 - Index);
       Dec(FSize);
       AutoPack;
     end
Index: prototypes/containers/JclVectors.imp
===================================================================
--- prototypes/containers/JclVectors.imp	(revision 2870)
+++ prototypes/containers/JclVectors.imp	(working copy)
@@ -326,7 +326,7 @@
       begin
         FItems[I] := DEFAULTVALUE;
         if I < (FSize - 1) then
-          MoveArray(FItems, I + 1, I, FSize - I);
+          MoveArray(FItems, I + 1, I, FSize - 1 - I);
         Dec(FSize);
         Result := True;
         if FRemoveSingleElement then
@@ -357,8 +357,9 @@
     if (Index >= 0) and (Index < FSize) then
     begin
       Result := FItems[Index];
+      FItems[Index] := DEFAULTVALUE;
       if Index < (FSize - 1) then
-        MoveArray(FItems, Index + 1, Index, FSize - Index);
+        MoveArray(FItems, Index + 1, Index, FSize - 1 - Index);
       Dec(FSize);
       AutoPack;
     end
