Index: classesh.inc
===================================================================
--- classesh.inc	(revision 7989)
+++ classesh.inc	(working copy)
@@ -482,6 +482,7 @@
     FNameValueSeparator : Char;
     FUpdateCount: Integer;
     FAdapter: IStringsAdapter;
+    FStrictDelimiter: Boolean;
     function GetCommaText: string;
     function GetName(Index: Integer): string;
     function GetValue(const Name: string): string;
@@ -555,6 +556,7 @@
     property Strings[Index: Integer]: string read Get write Put; default;
     property Text: string read GetTextStr write SetTextStr;
     property StringsAdapter: IStringsAdapter read FAdapter write SetStringsAdapter;
+    property StrictDelimiter: Boolean read FStrictDelimiter write FStrictDelimiter;
   end;
 
 { TStringList class }
Index: stringl.inc
===================================================================
--- stringl.inc	(revision 7989)
+++ stringl.inc	(working copy)
@@ -216,8 +216,9 @@
    if aNotFirst and (i<=length(AValue)) and (AValue[i]=FDelimiter) then inc(i);
 
    // skip spaces
-   while (i<=length(AValue)) and (Ord(AValue[i])<=Ord(' ')) do inc(i);
-  
+   if not FStrictDelimiter then
+    while (i<=length(AValue)) and (Ord(AValue[i])<=Ord(' ')) do inc(i);
+
    // read next string
    if i<=length(AValue) then begin
     if AValue[i]=FQuoteChar then begin
@@ -237,7 +238,7 @@
      // next string is not quoted
      j:=i;
      while (j<=length(AValue)) and
-           (Ord(AValue[j])>Ord(' ')) and
+           ( FStrictDelimiter or (Ord(AValue[j])>Ord(' ')) )  and
            (AValue[j]<>FDelimiter) do inc(j);
      Add( Copy(AValue,i,j-i));
      i:=j;
@@ -247,7 +248,8 @@
    end;
 
    // skip spaces
-   while (i<=length(AValue)) and (Ord(AValue[i])<=Ord(' ')) do inc(i);
+   if not FStrictDelimiter then
+    while (i<=length(AValue)) and (Ord(AValue[i])<=Ord(' ')) do inc(i);
 
    aNotFirst:=true;
   end;
