Index: reader.inc
===================================================================
--- reader.inc	(revision 12454)
+++ reader.inc	(working copy)
@@ -307,19 +307,21 @@
   i: Integer;
 begin
   case StringType of
-    vaString:
+	vaLString,vaUTF8String:
+      i:=ReadDWord;
+  else
+  //vaString:
       begin
         Read(b, 1);
         i := b;
       end;
-    vaLString:
-      i:=ReadDWord;
   end;
   SetLength(Result, i);
   if i > 0 then
     Read(Pointer(@Result[1])^, i);
 end;
 
+
 function TBinaryObjectReader.ReadWideString: WideString;
 var
   len: DWord;
@@ -1415,12 +1417,16 @@
 var
  s: String;
  i: Integer;
+ vt:TValueType;
 begin
   if NextValue in [vaWString,vaUString,vaUTF8String] then
-    //vaUTF8String needs conversion? 2008-09-06 mse
+    //vaUTF8String needs conversion? 2008-09-06 mse, YES!! AntonK
     begin
-      ReadValue;
-      Result := FDriver.ReadWideString
+      vt:=ReadValue;
+      if vt=vaUTF8String then
+				Result := utf8decode(fDriver.ReadString(vaLString))
+	    else
+	      Result := FDriver.ReadWideString
     end
   else
     begin
