Index: VTK/Graphics/vtkArrayCalculator.h
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/VTK/Graphics/vtkArrayCalculator.h,v
retrieving revision 1.21
diff -u -3 -p -r1.21 vtkArrayCalculator.h
--- VTK/Graphics/vtkArrayCalculator.h	31 Jul 2008 14:09:35 -0000	1.21
+++ VTK/Graphics/vtkArrayCalculator.h	17 Feb 2009 16:31:57 -0000
@@ -67,6 +67,7 @@ class vtkFunctionParser;
 #define VTK_ATTRIBUTE_MODE_USE_CELL_DATA 2
 #define VTK_ATTRIBUTE_MODE_USE_VERTEX_DATA 3
 #define VTK_ATTRIBUTE_MODE_USE_EDGE_DATA 4
+#define VTK_ATTRIBUTE_MODE_USE_FIELD_DATA 5
 
 class VTK_GRAPHICS_EXPORT vtkArrayCalculator : public vtkDataSetAlgorithm 
 {
@@ -150,6 +151,8 @@ public:
     {this->SetAttributeMode(VTK_ATTRIBUTE_MODE_USE_VERTEX_DATA);};
   void SetAttributeModeToUseEdgeData() 
     {this->SetAttributeMode(VTK_ATTRIBUTE_MODE_USE_EDGE_DATA);};
+  void SetAttributeModeToUseFieldData()
+    {this->SetAttributeMode(VTK_ATTRIBUTE_MODE_USE_FIELD_DATA); };
   const char *GetAttributeModeAsString();
 
   // Description:
Index: VTK/Graphics/vtkArrayCalculator.cxx
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/VTK/Graphics/vtkArrayCalculator.cxx,v
retrieving revision 1.43
diff -u -3 -p -r1.43 vtkArrayCalculator.cxx
--- VTK/Graphics/vtkArrayCalculator.cxx	31 Jul 2008 14:09:35 -0000	1.43
+++ VTK/Graphics/vtkArrayCalculator.cxx	17 Feb 2009 16:31:57 -0000
@@ -216,12 +216,12 @@ int vtkArrayCalculator::RequestData(
   vtkDataObject *output = outInfo->Get(vtkDataObject::DATA_OBJECT());
 
   int resultType = 0; // 0 for scalar, 1 for vector
-  int attributeDataType = 0; // 0 for point data, 1 for cell data
+  int attributeDataType = 0; // 0 for point data, 1 for cell data, 2 for field data
   vtkIdType i;
   int j;
   
-  vtkDataSetAttributes* inFD = 0;
-  vtkDataSetAttributes* outFD = 0;
+  vtkFieldData* inFD = 0;
+  vtkFieldData* outFD = 0;
   vtkDataArray* currentArray;
   vtkIdType numTuples = 0;
   double scalarResult[1];
@@ -247,13 +247,19 @@ int vtkArrayCalculator::RequestData(
       attributeDataType = 0;
       numTuples = dsInput->GetNumberOfPoints();
       }
-    else
+    else if (this->AttributeMode == VTK_ATTRIBUTE_MODE_USE_CELL_DATA)
       {
       inFD = dsInput->GetCellData();
       outFD = dsOutput->GetCellData();
       attributeDataType = 1;
       numTuples = dsInput->GetNumberOfCells();
       }
+    else if (this->AttributeMode == VTK_ATTRIBUTE_MODE_USE_FIELD_DATA)
+      {
+      inFD = input->GetFieldData();
+      attributeDataType = 2;
+      numTuples = inFD->GetNumberOfTuples(); 
+      }
     }
   else if (graphInput)
     {
@@ -265,13 +271,19 @@ int vtkArrayCalculator::RequestData(
       attributeDataType = 0;
       numTuples = graphInput->GetNumberOfVertices();
       }
-    else
+    else if (this->AttributeMode == VTK_ATTRIBUTE_MODE_USE_EDGE_DATA)
       {
       inFD = graphInput->GetEdgeData();
       outFD = graphOutput->GetEdgeData();
       attributeDataType = 1;
       numTuples = graphInput->GetNumberOfEdges();
       }
+    else if (this->AttributeMode == VTK_ATTRIBUTE_MODE_USE_FIELD_DATA)
+      {
+      inFD = input->GetFieldData();
+      attributeDataType = 2;
+      numTuples = inFD->GetNumberOfTuples(); 
+      }
     }
   
   if (numTuples < 1)
@@ -539,13 +551,20 @@ int vtkArrayCalculator::RequestData(
     
     resultArray->SetName(this->ResultArrayName);
     outFD->AddArray(resultArray);
+    vtkDataSetAttributes *outDSA = vtkDataSetAttributes::SafeDownCast(outFD);
     if (resultType == 0)
       {
-      outFD->SetActiveScalars(this->ResultArrayName);
+      if (outDSA)
+        {
+        outDSA->SetActiveScalars(this->ResultArrayName);
+        }
       }
     else
       {
-      outFD->SetActiveVectors(this->ResultArrayName);
+      if (outDSA)
+        {
+        outDSA->SetActiveVectors(this->ResultArrayName);
+        }
       }
     
     resultArray->Delete();
Index: Qt/Components/pqCalculatorPanel.cxx
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/Qt/Components/pqCalculatorPanel.cxx,v
retrieving revision 1.22
diff -u -3 -p -r1.22 pqCalculatorPanel.cxx
--- Qt/Components/pqCalculatorPanel.cxx	27 Jun 2008 12:30:34 -0000	1.22
+++ Qt/Components/pqCalculatorPanel.cxx	17 Feb 2009 16:31:57 -0000
@@ -206,8 +206,20 @@ void pqCalculatorPanel::accept()
 
   vtkSMProxy* CalcProxy = this->proxy();
 
-  int mode = this->Internal->AttributeMode->currentText() == 
-             "Point Data" ? 1 : 2;
+  QString currentMode = this->Internal->AttributeMode->currentText();
+  int mode = 0;
+  if (currentMode == "Point Data")
+    {
+    mode = 1;
+    }
+  else if (currentMode == "Cell Data")
+    {
+    mode = 2;
+    }
+  else if (currentMode == "Field Data")
+    {
+    mode = 3;
+    }
 
   // put in new variables
   QList<QAction*> scalarActions = this->Internal->ScalarsMenu.actions();
@@ -341,9 +353,25 @@ void pqCalculatorPanel::reset()
   vtkSMProxy* CalcProxy = this->proxy();
 
 
+  QVariant v;
   // restore the attribute mode
-  QVariant v = pqSMAdaptor::getElementProperty(CalcProxy->GetProperty("AttributeMode"));
-  this->Internal->AttributeMode->setCurrentIndex(v.toInt() == 2 ? 1 : 0);
+  int currentMode = pqSMAdaptor::getElementProperty(
+    CalcProxy->GetProperty("AttributeMode")).toInt();
+  switch (currentMode)
+    {
+  case 0:
+  case 1:
+    currentMode = 0;
+    break;
+
+  case 2:
+    currentMode = 1;
+    break;
+  case 5:
+    currentMode = 3;
+    break;
+    }
+  this->Internal->AttributeMode->setCurrentIndex(currentMode);
   
   // restore the function (after attribute or function will be cleared)
   v = pqSMAdaptor::getElementProperty(CalcProxy->GetProperty("Function"));
@@ -406,6 +434,11 @@ void pqCalculatorPanel::updateVariables(
     fdi = vtkSMSourceProxy::SafeDownCast(f->getInput(0)->getProxy())->
       GetDataInformation()->GetCellDataInformation();
     }
+  else if (mode == "Field Data")
+    {
+    fdi = vtkSMSourceProxy::SafeDownCast(f->getInput(0)->getProxy())->
+      GetDataInformation()->GetFieldDataInformation();
+    }
   
   if(!fdi)
     {
Index: Qt/Components/Resources/UI/pqCalculatorPanel.ui
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/Qt/Components/Resources/UI/pqCalculatorPanel.ui,v
retrieving revision 1.5
diff -u -3 -p -r1.5 pqCalculatorPanel.ui
--- Qt/Components/Resources/UI/pqCalculatorPanel.ui	28 Oct 2006 03:36:54 -0000	1.5
+++ Qt/Components/Resources/UI/pqCalculatorPanel.ui	17 Feb 2009 16:31:57 -0000
@@ -52,6 +52,11 @@
          <string>Cell Data</string>
         </property>
        </item>
+       <item>
+        <property name="text" >
+         <string>Field Data</string>
+        </property>
+       </item>
       </widget>
      </item>
      <item rowspan="2" row="2" column="0" >
