diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
index 6e7a78ffe2ffd3410147a39578ced919f21dcf4d..10873c3734edb07138a34f6ed21822ec831c7d30 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
@@ -69,11 +69,26 @@
       </Documentation>
     </IntVectorProperty>
 
+    <!-- Interpolate Fields check-box -->
+    <IntVectorProperty
+      name="UiInterpolateVolFields"
+      command="SetInterpolateVolFields"
+      number_of_elements="1"
+      is_internal="1"
+      default_values="1"
+      animateable="0">
+      <BooleanDomain name="bool"/>
+      <Documentation>
+        Interpolate volume fields into point fields
+      </Documentation>
+    </IntVectorProperty>
+
     <!-- Extrapolate Patches check-box -->
     <IntVectorProperty
-      name="ExtrapolatePatches"
+      name="UiExtrapolatePatches"
       command="SetExtrapolatePatches"
       number_of_elements="1"
+      is_internal="1"
       default_values="0"
       animateable="0">
       <BooleanDomain name="bool"/>
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx
index a3d800288b4c15285886c1cf60b828dc115fedcf..66327dc6f5822e58c3785a32371b83c08d594599 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx
@@ -59,7 +59,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
     pqAutoGeneratedObjectPanel(proxy, p)
 {
     // create first sublayout (at top of the panel)
-    QGridLayout *form = new QGridLayout();
+    QGridLayout* form = new QGridLayout();
     this->PanelLayout->addLayout(form, 0, 0, 1, -1);
 
     vtkSMProperty* prop = 0;
@@ -107,6 +107,9 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
         );
     }
 
+    QFrame* hline1 = new QFrame(this);
+    hline1->setFrameStyle(QFrame::HLine | QFrame::Sunken);
+    form->addWidget(hline1, 1, 0, 1, 2);
 
     // checkbox for caching mesh
     if ((prop = this->proxy()->GetProperty("UiCacheMesh")) != 0)
@@ -124,7 +127,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
             "Cache the fvMesh in memory."
         );
 
-        form->addWidget(CacheMesh_, 1, 0, Qt::AlignLeft);
+        form->addWidget(CacheMesh_, 2, 0, Qt::AlignLeft);
         connect
         (
             CacheMesh_,
@@ -152,7 +155,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
         );
 
         // row/col 0,1
-        form->addWidget(ShowPatchNames_, 1, 1, Qt::AlignLeft);
+        form->addWidget(ShowPatchNames_, 2, 1, Qt::AlignLeft);
         connect
         (
             ShowPatchNames_,
@@ -180,7 +183,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
         );
 
         // row/col 1,0
-        form->addWidget(IncludeSets_, 2, 0, Qt::AlignLeft);
+        form->addWidget(IncludeSets_, 3, 0, Qt::AlignLeft);
         connect
         (
             IncludeSets_,
@@ -209,7 +212,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
         );
 
         // row/col 1,1
-        form->addWidget(IncludeZones_, 2, 1, Qt::AlignLeft);
+        form->addWidget(IncludeZones_, 3, 1, Qt::AlignLeft);
         connect
         (
             IncludeZones_,
@@ -219,6 +222,63 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel
         );
     }
 
+    // checkbox for vol field interpolation
+    if ((prop = this->proxy()->GetProperty("UiInterpolateVolFields")) != 0)
+    {
+        // immediate update on the Server Manager side
+        prop->SetImmediateUpdate(true);
+
+        InterpolateVolFields_ = new QCheckBox("Interpolate volFields");
+        InterpolateVolFields_->setChecked
+        (
+            vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0)
+        );
+        InterpolateVolFields_->setToolTip
+        (
+            "Interpolate volFields into pointFields"
+        );
+
+        // row/col 1,1
+        form->addWidget(InterpolateVolFields_, 4, 0, Qt::AlignLeft);
+        connect
+        (
+            InterpolateVolFields_,
+            SIGNAL(stateChanged(int)),
+            this,
+            SLOT(InterpolateVolFieldsToggled())
+        );
+    }
+
+    // checkbox for extrapolate patches
+    if ((prop = this->proxy()->GetProperty("UiExtrapolatePatches")) != 0)
+    {
+        // immediate update on the Server Manager side
+        prop->SetImmediateUpdate(true);
+
+        ExtrapolatePatches_ = new QCheckBox("Extrapolate Patches");
+        ExtrapolatePatches_->setChecked
+        (
+            vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0)
+        );
+        ExtrapolatePatches_->setToolTip
+        (
+            "Extrapolate internalField to non-constraint patches"
+        );
+
+        // row/col 1,1
+        form->addWidget(ExtrapolatePatches_, 4, 1, Qt::AlignLeft);
+        connect
+        (
+            ExtrapolatePatches_,
+            SIGNAL(stateChanged(int)),
+            this,
+            SLOT(ExtrapolatePatchesToggled())
+        );
+    }
+
+    QFrame* hline2 = new QFrame(this);
+    hline2->setFrameStyle(QFrame::HLine | QFrame::Sunken);
+    form->addWidget(hline2, 5, 0, 1, 2);
 }
 
 
@@ -255,8 +315,7 @@ void pqPV3FoamReaderPanel::ZeroTimeToggled()
         this->proxy()->GetProperty("UiZeroTime")
     )->SetElement(0, ZeroTime_->isChecked());
 
-    // update everything
-    RefreshPressed();
+    this->setModified();
 }
 
 
@@ -306,7 +365,32 @@ void pqPV3FoamReaderPanel::IncludeZonesToggled()
     {
         this->proxy()->UpdatePropertyInformation(prop);
     }
+}
+
+
+void pqPV3FoamReaderPanel::ExtrapolatePatchesToggled()
+{
+    vtkSMProperty* prop;
+
+    vtkSMIntVectorProperty::SafeDownCast
+    (
+        this->proxy()->GetProperty("UiExtrapolatePatches")
+    )->SetElement(0, ExtrapolatePatches_->isChecked());
+
+    this->setModified();
+}
+
+
+void pqPV3FoamReaderPanel::InterpolateVolFieldsToggled()
+{
+    vtkSMProperty* prop;
+
+    vtkSMIntVectorProperty::SafeDownCast
+    (
+        this->proxy()->GetProperty("UiInterpolateVolFields")
+    )->SetElement(0, InterpolateVolFields_->isChecked());
 
+    this->setModified();
 }
 
 
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h
index 35e3089b49c1fa0afa368cf708f5b28ea3baf02a..f7b057ecc75abceca2f27bee71267476770a9464 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h
@@ -77,6 +77,13 @@ class pqPV3FoamReaderPanel
     //- IncludeZones checkbox
     QCheckBox* IncludeZones_;
 
+    //- InterpolateVolFields checkbox
+    QCheckBox* InterpolateVolFields_;
+
+    //- ExtrapolatePatches checkbox
+    QCheckBox* ExtrapolatePatches_;
+
+
 protected slots:
 
     void CacheMeshToggled();
@@ -85,6 +92,8 @@ protected slots:
     void ShowPatchNamesToggled();
     void IncludeSetsToggled();
     void IncludeZonesToggled();
+    void InterpolateVolFieldsToggled();
+    void ExtrapolatePatchesToggled();
 
 
 public:
@@ -97,7 +106,6 @@ public:
 
     //- Destructor
     // virtual ~pqPV3FoamReaderPanel();
-
 };
 
 
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
index f0b5da6261c6bf708c3e35a0c6c90429996bc03b..a2671ddb9d41c6d849cff5bfce19cbcf6ed943b0 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
@@ -85,6 +85,7 @@ vtkPV3FoamReader::vtkPV3FoamReader()
     IncludeSets = 0;
     IncludeZones = 0;
     ShowPatchNames = 0;
+    InterpolateVolFields = 1;
 
     UpdateGUI = 0;
 
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
index 5d375545c5eb174f633ad5d024aca0b841b81425..da31ba6231bfa08c491b6ff662bd3ad6d5d0503b 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
@@ -121,6 +121,11 @@ public:
     virtual void SetShowPatchNames(int);
     vtkGetMacro(ShowPatchNames, int);
 
+    // Description:
+    // OpenFOAM volField interpolation
+    vtkSetMacro(InterpolateVolFields, int);
+    vtkGetMacro(InterpolateVolFields, int);
+
     // Description:
     // Get the current timestep
     int  GetTimeStep();
@@ -170,6 +175,7 @@ public:
 
     void SelectionModified();
 
+
 protected:
 
     //- Construct null
@@ -203,6 +209,7 @@ protected:
     //- The file name for this case
     char* FileName;
 
+
 private:
 
     //- Disallow default bitwise copy construct
@@ -224,6 +231,7 @@ private:
     int IncludeSets;
     int IncludeZones;
     int ShowPatchNames;
+    int InterpolateVolFields;
 
     //- Dummy variable/switch to invoke a reader update
     int UpdateGUI;
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
index cad46ba215a6248da900c49b43dd333e9306d350..7d9a481b49a232fb4d1600492d7612a62a71a5e8 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H
@@ -505,6 +505,7 @@ class vtkPV3Foam
                 const fvMesh&,
                 const PtrList<PrimitivePatchInterpolation<primitivePatch> >&,
                 const IOobjectList&,
+                const bool interpFields,
                 vtkMultiBlockDataSet* output
             );
 
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C
index 7ab37db06f56c7041941cc416a7ec2af036cf7c3..9a869d37b58c505848e8827201960563af4cf845 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C
@@ -120,25 +120,27 @@ void Foam::vtkPV3Foam::convertVolFields
     }
 
 
+    bool interpFields = reader_->GetInterpolateVolFields();
+
     convertVolFields<scalar>
     (
-        mesh, ppInterpList, objects, output
+        mesh, ppInterpList, objects, interpFields, output
     );
     convertVolFields<vector>
     (
-        mesh, ppInterpList, objects, output
+        mesh, ppInterpList, objects, interpFields, output
     );
     convertVolFields<sphericalTensor>
     (
-        mesh, ppInterpList, objects, output
+        mesh, ppInterpList, objects, interpFields, output
     );
     convertVolFields<symmTensor>
     (
-        mesh, ppInterpList, objects, output
+        mesh, ppInterpList, objects, interpFields, output
     );
     convertVolFields<tensor>
     (
-        mesh, ppInterpList, objects, output
+        mesh, ppInterpList, objects, interpFields, output
     );
 
     if (debug)
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H
index f18d7053ebbea1aa685e52c5552aa54e68c79381..a057afb51189132108ea827eecc0af90aa95f619 100644
--- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H
+++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H
@@ -48,6 +48,7 @@ void Foam::vtkPV3Foam::convertVolFields
     const fvMesh& mesh,
     const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList,
     const IOobjectList& objects,
+    const bool interpFields,
     vtkMultiBlockDataSet* output
 )
 {
@@ -74,6 +75,19 @@ void Foam::vtkPV3Foam::convertVolFields
 
         // Interpolated field (demand driven)
         autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr;
+        if (interpFields)
+        {
+            if (debug)
+            {
+                Info<< "convertVolFieldBlock interpolating:" << tf.name()
+                    << endl;
+            }
+
+            ptfPtr.reset
+            (
+                volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr()
+            );
+        }
 
 
         // Convert activated internalMesh regions
@@ -154,14 +168,17 @@ void Foam::vtkPV3Foam::convertVolFields
                     datasetNo
                 );
 
-                convertPatchPointField
-                (
-                    tf.name(),
-                    ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
-                    output,
-                    arrayRangePatches_,
-                    datasetNo
-                );
+                if (interpFields)
+                {
+                    convertPatchPointField
+                    (
+                        tf.name(),
+                        ppInterpList[patchId].faceToPointInterpolate(tpptf)(),
+                        output,
+                        arrayRangePatches_,
+                        datasetNo
+                    );
+                }
             }
             else
             {
@@ -174,14 +191,17 @@ void Foam::vtkPV3Foam::convertVolFields
                     datasetNo
                 );
 
-                convertPatchPointField
-                (
-                    tf.name(),
-                    ppInterpList[patchId].faceToPointInterpolate(ptf)(),
-                    output,
-                    arrayRangePatches_,
-                    datasetNo
-                );
+                if (interpFields)
+                {
+                    convertPatchPointField
+                    (
+                        tf.name(),
+                        ppInterpList[patchId].faceToPointInterpolate(ptf)(),
+                        output,
+                        arrayRangePatches_,
+                        datasetNo
+                    );
+                }
             }
         }
 
@@ -285,29 +305,18 @@ void Foam::vtkPV3Foam::convertVolFieldBlock
                 decompLst[datasetNo]
             );
 
-            if (!ptfPtr.valid())
+            if (ptfPtr.valid())
             {
-                if (debug)
-                {
-                    Info<< "convertVolFieldBlock interpolating:" << tf.name()
-                        << endl;
-                }
-
-                ptfPtr.reset
+                convertPointField
                 (
-                    volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr()
+                    ptfPtr(),
+                    tf,
+                    output,
+                    range,
+                    datasetNo,
+                    decompLst[datasetNo]
                 );
             }
-
-            convertPointField
-            (
-                ptfPtr(),
-                tf,
-                output,
-                range,
-                datasetNo,
-                decompLst[datasetNo]
-            );
         }
     }
 }