diff --git a/src/fileFormats/vtk/vtkUnstructuredReader.C b/src/fileFormats/vtk/vtkUnstructuredReader.C
index 2fbe4352426551adda3dccb04820316936cbfadf..26ecf9a0ade0477ec85bbab79cbe91d3a21cd72f 100644
--- a/src/fileFormats/vtk/vtkUnstructuredReader.C
+++ b/src/fileFormats/vtk/vtkUnstructuredReader.C
@@ -36,13 +36,14 @@ defineTypeNameAndDebug(Foam::vtkUnstructuredReader, 0);
 
 template<>
 const char*
-Foam::NamedEnum<Foam::vtkUnstructuredReader::vtkDataType, 3>::names[] =
+Foam::NamedEnum<Foam::vtkUnstructuredReader::vtkDataType, 4>::names[] =
 {
     "int",
     "float",
-    "string"
+    "string",
+    "vtkIdType"
 };
-const Foam::NamedEnum<Foam::vtkUnstructuredReader::vtkDataType, 3>
+const Foam::NamedEnum<Foam::vtkUnstructuredReader::vtkDataType, 4>
 Foam::vtkUnstructuredReader::vtkDataTypeNames;
 
 
@@ -384,6 +385,7 @@ void Foam::vtkUnstructuredReader::readField
     switch (vtkDataTypeNames[dataType])
     {
         case VTK_INT:
+        case VTK_ID:
         {
             autoPtr<labelIOField> fieldVals
             (
@@ -724,7 +726,7 @@ void Foam::vtkUnstructuredReader::read(ISstream& inFile)
         else if (tag == "CELL_DATA")
         {
             readMode = CELL_DATA;
-            wantedSize = cells_.size()+faces_.size();
+            wantedSize = cells_.size()+faces_.size()+lines_.size();
 
             label nCells(readLabel(inFile));
             if (nCells != wantedSize)
diff --git a/src/fileFormats/vtk/vtkUnstructuredReader.H b/src/fileFormats/vtk/vtkUnstructuredReader.H
index d33fb01d017ff02f09c5931f2b9fa4d0d1391eea..201012eaec1b2ad4a81c923c80d336b56f98af85 100644
--- a/src/fileFormats/vtk/vtkUnstructuredReader.H
+++ b/src/fileFormats/vtk/vtkUnstructuredReader.H
@@ -25,9 +25,18 @@ Class
     Foam::vtkUnstructuredReader
 
 Description
-    Reader for vtk unstructured legacy files. Supports single CELLS, POINTS
+    Reader for vtk unstructured_grid legacy files. Supports single CELLS, POINTS
     etc. entry only.
 
+    - POINTS becomes OpenFOAM points
+    - CELLS gets split into OpenFOAM
+        - cells
+        - faces
+        - lines
+    - CELL_DATA or POINT_DATA gets stored on the corresponding objectRegistry
+      in original vtk numbering order so use e.g. faceMap() to go from entry
+      in faces() back to vtk numbering.
+
 SourceFiles
     vtkUnstructuredReader.C
 
@@ -61,10 +70,11 @@ public:
         {
             VTK_INT,
             VTK_FLOAT,
-            VTK_STRING
+            VTK_STRING,
+            VTK_ID
         };
 
-        static const NamedEnum<vtkDataType, 3> vtkDataTypeNames;
+        static const NamedEnum<vtkDataType, 4> vtkDataTypeNames;
 
 
         //- Enumeration defining the vtk dataset types