diff --git a/IO/vtkOpenFOAMReader.cxx b/IO/vtkOpenFOAMReader.cxx
index 7445c6f..a7bdd61 100644
--- a/IO/vtkOpenFOAMReader.cxx
+++ b/IO/vtkOpenFOAMReader.cxx
@@ -2211,7 +2211,7 @@ public:
   {
     return this->IsUniform;
   }
-  void Read(vtkFoamIOobject& io);
+  int Read(vtkFoamIOobject& io);
   void ReadDictionary(vtkFoamIOobject& io, const vtkFoamToken& firstKeyword);
   const vtkIntArray& LabelList() const
   {
@@ -3406,7 +3406,9 @@ void vtkFoamEntryValue::ReadDictionary(vtkFoamIOobject& io,
 }
 
 // guess the type of the given entry value and read it
-void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
+// return value: 0 if encountered end of entry (';') during parsing
+// composite entry value, 1 otherwise
+int vtkFoamEntryValue::Read(vtkFoamIOobject& io)
 {
   vtkFoamToken currToken;
   if (!io.Read(currToken))
@@ -3417,7 +3419,7 @@ void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
   if (currToken == '{')
     {
     this->ReadDictionary(io, vtkFoamToken());
-    return;
+    return 1;
     }
   // for reading sublist from vtkFoamEntryValue::readList() or there
   // are cases where lists without the (non)uniform keyword appear
@@ -3425,12 +3427,12 @@ void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
   else if (currToken == '(')
     {
     this->ReadList(io);
-    return;
+    return 1;
     }
   else if (currToken == '[')
     {
     this->ReadDimensionSet(io);
-    return;
+    return 1;
     }
   else if (currToken == "uniform")
     {
@@ -3443,6 +3445,11 @@ void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
       {
       this->ReadList(io);
       }
+    else if (currToken == ';')
+      {
+      this->Superclass::operator=("uniform");
+      return 0;
+      }
     else if (currToken.GetType() == this->Superclass::LABEL
         || currToken.GetType() == this->Superclass::SCALAR
         || currToken.GetType() == this->Superclass::STRING)
@@ -3503,6 +3510,11 @@ void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
         io.ReadExpecting(')');
         }
       }
+    else if (currToken == ';')
+      {
+      this->Superclass::operator=("nonuniform");
+      return 0;
+      }
     else
       {
       throw vtkFoamError() << "Unsupported nonuniform list type " << currToken;
@@ -3524,6 +3536,7 @@ void vtkFoamEntryValue::Read(vtkFoamIOobject& io)
     {
     this->Superclass::operator=(currToken);
     }
+  return 1;
 }
 
 // read values of an entry
@@ -3532,7 +3545,10 @@ void vtkFoamEntry::Read(vtkFoamIOobject& io)
   for (;;)
     {
     this->Superclass::push_back(new vtkFoamEntryValue(this));
-    this->Superclass::back()->Read(io);
+    if (!this->Superclass::back()->Read(io))
+      {
+      break;
+      }
 
     if (this->Superclass::size() >= 2)
       {
