diff --git a/Infovis/vtkDelimitedTextReader.cxx b/Infovis/vtkDelimitedTextReader.cxx
index d8feb6d53448226588f4b313c268e22ca422e1d1..608aea6a0aeb18c2bc2827596b2892248f5a3e86 100644
--- a/Infovis/vtkDelimitedTextReader.cxx
+++ b/Infovis/vtkDelimitedTextReader.cxx
@@ -31,7 +31,7 @@
 #include <vtkstd/vector>
 #include <vtkstd/string>
 
-vtkCxxRevisionMacro(vtkDelimitedTextReader, "1.8");
+vtkCxxRevisionMacro(vtkDelimitedTextReader, "1.9");
 vtkStandardNewMacro(vtkDelimitedTextReader);
 
 struct vtkDelimitedTextReaderInternals
@@ -44,6 +44,7 @@ static int splitString(const vtkStdString& input,
                        char fieldDelimiter,
                        char stringDelimiter,
                        bool useStringDelimiter,
+                       bool mergeConsecutiveDelimiters,
                        vtkstd::vector<vtkStdString>& results, 
                        bool includeEmpties=true);
 
@@ -169,6 +170,7 @@ int vtkDelimitedTextReader::RequestData(
                 this->FieldDelimiter,
                 this->StringDelimiter,
                 this->UseStringDelimiter,
+                this->MergeConsecutiveDelimiters,
                 headers);
     }
   else
@@ -177,6 +179,7 @@ int vtkDelimitedTextReader::RequestData(
                 this->FieldDelimiter,
                 this->StringDelimiter,
                 this->UseStringDelimiter,
+                this->MergeConsecutiveDelimiters,
                 firstLineFields);
 
     for (unsigned int i = 0; i < firstLineFields.size(); ++i)
@@ -236,6 +239,7 @@ int vtkDelimitedTextReader::RequestData(
                 this->FieldDelimiter,
                 this->StringDelimiter,
                 this->UseStringDelimiter,
+                this->MergeConsecutiveDelimiters,
                 dataVector);
     
     vtkDebugMacro(<<"Split into " << dataVector.size() << " fields");
@@ -270,6 +274,7 @@ splitString(const vtkStdString& input,
             char fieldDelimiter,
             char stringDelimiter,
             bool useStringDelimiter,
+            bool mergeConsecutiveDelimiters,
             vtkstd::vector<vtkStdString>& results, 
             bool includeEmpties)
 {
@@ -328,6 +333,11 @@ splitString(const vtkStdString& input,
         }
       else if (thisCharacter == fieldDelimiter && !inString)
         {
+        if (mergeConsecutiveDelimiters && lastCharacter == fieldDelimiter)
+          {
+          continue; // We're in the middle of a string of delimiters.
+          }
+
         // A delimiter starts a new field unless we're in a string, in
         // which case it's normal text and we won't even get here.
         if (includeEmpties || currentField.size() > 0)
diff --git a/Infovis/vtkDelimitedTextReader.h b/Infovis/vtkDelimitedTextReader.h
index 7625d777ff5c4552b6ab949c48489b23db48817e..faf335bb73a6983b5c247e398217fa4099ed17cc 100644
--- a/Infovis/vtkDelimitedTextReader.h
+++ b/Infovis/vtkDelimitedTextReader.h
@@ -84,6 +84,14 @@ public:
   vtkGetMacro(HaveHeaders,bool);
   vtkSetMacro(HaveHeaders,bool);
 
+  // Description:
+  // Set/get whether to merge successive delimiters.  Use this if (for
+  // example) your fields are separated by spaces but you don't know
+  // exactly how many.
+  vtkSetMacro(MergeConsecutiveDelimiters, bool);
+  vtkGetMacro(MergeConsecutiveDelimiters, bool);
+  vtkBooleanMacro(MergeConsecutiveDelimiters, bool);
+
  protected:
   vtkDelimitedTextReader();
   ~vtkDelimitedTextReader();