Index: Include/Sledge++/umOutput.h
===================================================================
--- Include/Sledge++/umOutput.h	(revision 1365)
+++ Include/Sledge++/umOutput.h	(working copy)
@@ -52,16 +52,17 @@
     umIVec &DomMask, bool appendZone=false);
 
 void umOutputVTK(umDOMAINS *domains, const char* fileprefix,
-    const umDVec& FData, int porderShift=0);
+    const umDVec& FData, int porderShift=0, const char **names=0);
 
 void umOutputVTK(umDOMAINS *domains, const char* fileprefix,
-    const umDMat& FData, int porderShift=0);
+    const umDMat& FData, int porderShift=0, const char **names=0);
 
 void umOutputVTK(umDOMAINS *domains, const char* fileprefix,
-    const umDMat& FData, umIVec &NqVec);
+    const umDMat& FData, umIVec &NqVec, const char **names=0);
 
 void umOutputVTK(umDOMAINS *domains, const char* fileprefix,
-    const umDMat& FData, umIVec &NqVec, umIVec &DomMask);
+    const umDMat& FData, umIVec &NqVec, umIVec &DomMask, 
+    const char **names=0);
 
 
 #endif // SLEDGE__umOutput_H__INCLUDED
Index: Include/Sledge++/umMat_ROW.h
===================================================================
--- Include/Sledge++/umMat_ROW.h	(revision 1365)
+++ Include/Sledge++/umMat_ROW.h	(working copy)
@@ -79,7 +79,7 @@
 
   
   //-------------------------------------------------------
-  explicit umMat_ROW(const umMat_ROW<T> &B, OBJ_mode md=OBJ_real, const char* sz="rmat")
+  umMat_ROW(const umMat_ROW<T> &B, OBJ_mode md=OBJ_real, const char* sz="rmat")
   //-------------------------------------------------------
     : Vector<T>(sz), 
       m_M(0), m_N(0), m_MN(0), row_(0), rowm1_(0),
@@ -860,7 +860,7 @@
     return (*tmp);
   }
   
-  void set_row(const int i, const double &x)
+  void set_row(const int i, const T &x)
   {
     // Fill row i with a value
     CheckIdx_Row_0(i);
@@ -889,7 +889,7 @@
     assert(vec.size() >= m_N);    // sufficient values?
 
     // unroll loop along row-major arrays
-    const double* p = vec.data();
+    const T* p = vec.data();
     int Nmod4 = m_N & 3;
     int N4    = m_N - Nmod4;
     int j=0;
@@ -912,7 +912,7 @@
   }
 
 
-  void set_col(const int j, const double &x)
+  void set_col(const int j, const T &x)
   {
     // Fill col j with a value
     CheckIdx_Col_0(j);
@@ -1009,7 +1009,7 @@
   /// 
 
   /// scale all elements of row i by a scalar
-  void scale_row(const int i, const double &x)
+  void scale_row(const int i, const T &x)
   {
     CheckIdx_Row_0(i);
 
@@ -1088,9 +1088,9 @@
   {
     assert(ok());
 
-    T maxval = this->ZERO;
+    double maxval = this->ZERO;
     for (int i=0; i<m_M; ++i) {
-      T sum = this->ZERO;
+      double sum = this->ZERO;
       for (int j=0; j<m_N; ++j) {
         sum += std::abs( row_[i][j] );
       }
@@ -1105,8 +1105,7 @@
   double norm_frob() const
   {
     assert(ok());
-    T ss = this->sumsquares();
-    return sqrt(ss);
+    return sqrt(this->sumsquares());
   }
 
 
Index: Include/Sledge++/umMat_COL.h
===================================================================
--- Include/Sledge++/umMat_COL.h	(revision 1365)
+++ Include/Sledge++/umMat_COL.h	(working copy)
@@ -80,7 +80,7 @@
 
   
   //-------------------------------------------------------
-  explicit umMat_COL(const umMat_COL<T> &B, OBJ_mode md=OBJ_real, const char* sz="mat")
+  umMat_COL(const umMat_COL<T> &B, OBJ_mode md=OBJ_real, const char* sz="mat")
   //-------------------------------------------------------
     : Vector<T>(sz), 
       m_M(0), m_N(0), m_MN(0), col_(0), m_major(MajorCOL), 
@@ -916,7 +916,7 @@
     return (*tmp);
   }
   
-  void set_row(const int i, const double &x)
+  void set_row(const int i, const T &x)
   {
     // Fill row i with a value
     CheckIdx_Row_1(i);
@@ -937,7 +937,7 @@
     }
   }
 
-  void set_col(const int j, const double &x)
+  void set_col(const int j, const T &x)
   {
     // Fill col j with a value
     CheckIdx_Col_1(j);
@@ -1072,7 +1072,7 @@
   /// 
 
   /// scale all elements of column j by a scalar
-  void scale_col(const int j, const double &x)
+  void scale_col(const int j, const T &x)
   {
     CheckIdx_Col_1(j);
 
Index: Include/Sledge++/umVec_Type.h
===================================================================
--- Include/Sledge++/umVec_Type.h	(revision 1365)
+++ Include/Sledge++/umVec_Type.h	(working copy)
@@ -113,7 +113,7 @@
 
 
   //-------------------------------------------------------
-  explicit Vector(const Vector<T> &B, OBJ_mode md=OBJ_real, const char* sz="vec")
+  Vector(const Vector<T> &B, OBJ_mode md=OBJ_real, const char* sz="vec")
   //-------------------------------------------------------
     : v_(0), vm1_(0), m_Len(0), ZERO(0), ONE(1),
       m_name(sz), m_EqTol(0.0), m_borrowed(false),
@@ -904,7 +904,7 @@
   }
 
 
-  double d_dot(const Vector<T> &B) const
+  T d_dot(const Vector<T> &B) const
   {
     if (m_Len<1) return ZERO;
     assert(B.size() >= m_Len);
@@ -1184,6 +1184,7 @@
     }
   }
 
+
   void mult_val(const T &x)
   {
     // handle special cases
@@ -1259,7 +1260,7 @@
     // element-by-element --> A .+ B
 
     assert(B.size() >= m_Len);    // B may be longer than A
-    const double* p = B.data();   // operate on the base array
+    const T* p = B.data();   // operate on the base array
 
     int Nmod4 = m_Len & 3;
     int N4    = m_Len - Nmod4;
Index: Include/Sledge++/umMat_DIAG.h
===================================================================
--- Include/Sledge++/umMat_DIAG.h	(revision 1365)
+++ Include/Sledge++/umMat_DIAG.h	(working copy)
@@ -60,7 +60,7 @@
   {}
 
   
-  explicit umMat_DIAG(const umMat_DIAG<T> &B, OBJ_mode md=OBJ_real, const char* sz="diag")
+  umMat_DIAG(const umMat_DIAG<T> &B, OBJ_mode md=OBJ_real, const char* sz="diag")
     : Vector<T>(sz), 
       m_M(0), m_N(0), m_MN(0), m_zero(0),
       m_D(B.min_mn())
Index: Doxyfile
===================================================================
--- Doxyfile	(revision 1365)
+++ Doxyfile	(working copy)
@@ -76,7 +76,7 @@
 # ordinary class members. Constructors, destructors and assignment operators of 
 # the base classes will not be shown.
 
-INLINE_INHERITED_MEMB  = NO
+INLINE_INHERITED_MEMB  = YES
 
 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
 # path before files name in the file list and in the header files. If set 
@@ -443,12 +443,12 @@
 # Note: To get rid of all source code in the generated output, make sure also 
 # VERBATIM_HEADERS is set to NO.
 
-SOURCE_BROWSER         = NO
+SOURCE_BROWSER         = YES
 
 # Setting the INLINE_SOURCES tag to YES will include the body 
 # of functions and classes directly in the documentation.
 
-INLINE_SOURCES         = NO
+INLINE_SOURCES         = YES
 
 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
 # doxygen to hide any special comment blocks from generated source code 
@@ -616,7 +616,7 @@
 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
 # generate Latex output.
 
-GENERATE_LATEX         = YES
+GENERATE_LATEX         = NO
 
 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
 # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
Index: Src/Sledge++/AMR/umAMRMesh_3.cpp
===================================================================
--- Src/Sledge++/AMR/umAMRMesh_3.cpp	(revision 1365)
+++ Src/Sledge++/AMR/umAMRMesh_3.cpp	(working copy)
@@ -38,7 +38,7 @@
   // nodes, connectivity, materials, face boundaries.
 
   bool bResult=true, bCoord3D=false, bElement3D=false, bTET=false;
-  int i=0, k=0, e=0, iMat=0, Nfaces=0;
+  int e=0, iMat=0, Nfaces=0;
   int v1=0, v2=0, v3=0, v4=0;
 
   // Note: a mesh may have 3d coords, while still being 
@@ -334,7 +334,6 @@
   umElmBase& Rfe = (*Pfe);
 
   std::string name; // indicator name
-  int BFcount=0;
 //int Ncode = (3==Ndim) ? 6 : 3;
   int face_bind=0;
 
Index: Src/Sledge++/InputOutput/umOutput.cpp
===================================================================
--- Src/Sledge++/InputOutput/umOutput.cpp	(revision 1365)
+++ Src/Sledge++/InputOutput/umOutput.cpp	(working copy)
@@ -61,7 +61,7 @@
   umIVec startrow(sampleNq);
 
   // NBN: VC loop control vars visible outside loop.
-  int sk=0, i=0, j=0;
+  int sk=0, i=0;
   for(sk=0, i=0; i<sampleNq; ++i) {
     startrow[i] = sk;
     sk += sampleNq-i;
@@ -811,13 +811,14 @@
   umDOMAINS    *domains, 
   const char   *fileprefix,
   const umDVec &FData, 
-        int     porderShift
+        int     porderShift,
+        const char   **names
 )
 //---------------------------------------------------------
 {
   umDMat MatFData;
   MatFData.borrow(FData.size(), 1, (double *)FData.data());
-  umOutputVTK(domains, fileprefix, MatFData, porderShift);
+  umOutputVTK(domains, fileprefix, MatFData, porderShift, names);
 }
 
 
@@ -827,7 +828,8 @@
   umDOMAINS    *domains, 
   const char   *fileprefix,
   const umDMat &FData, 
-        int     porderShift
+        int     porderShift,
+  const char   **names
 )
 //---------------------------------------------------------
 {
@@ -842,11 +844,12 @@
   umDOMAINS    *domains, 
   const char   *fileprefix,
   const umDMat &FData, 
-        umIVec &NqVec
+        umIVec &NqVec,
+  const char   **names
 )
 {
   umIVec DomMask(domains->get_Ndomains(), 1);
-  umOutputVTK(domains, fileprefix, FData, NqVec, DomMask);
+  umOutputVTK(domains, fileprefix, FData, NqVec, DomMask, names);
 }
 
 
@@ -857,7 +860,8 @@
   const char   *fileprefix,
   const umDMat &FData, 
         umIVec &NqVec,
-        umIVec &DomMask
+        umIVec &DomMask,
+  const char   **names
 )
 //---------------------------------------------------------
 {
@@ -1039,7 +1043,7 @@
         }
       }
       else {
-        umERROR("umOutputMATLAB()", "Element type not supported %d ", um->Netype);
+        umERROR("umOutputVTK()", "Element type not supported %d ", um->Netype);
         return;
       }
 
@@ -1131,7 +1135,10 @@
     // over the set of domain objects, extracting part
     // of each field from each sub-domain.
 
-    fprintf(fp, "\nSCALARS field%d double 1", fld);
+    if (names)
+      fprintf(fp, "\nSCALARS %s double 1", names[fld-1]);
+    else
+      fprintf(fp, "\nSCALARS field%d double 1", fld);
     fprintf(fp, "\nLOOKUP_TABLE default");
 
     for (int dom=0, rowskip=0; dom<Ndomains; ++dom)
Index: Src/Sledge++/SEMUtilities/umDOMAINS.cpp
===================================================================
--- Src/Sledge++/SEMUtilities/umDOMAINS.cpp	(revision 1365)
+++ Src/Sledge++/SEMUtilities/umDOMAINS.cpp	(working copy)
@@ -521,9 +521,9 @@
   fprintf(fp,"title = \"%s\"\n",filename);
   fprintf(fp,"variables = \"x\",\"y\"");
   for(int j=0; j<Nfields; ++j){
-    fprintf(fp,",\"u%d\"",j);
+    fprintf(fp,",\"%s\"", data[j]->name());
   }
-  fprintf(fp, ", order, dom, elmt\n");
+  fprintf(fp, ", \"order\", \"dom\", \"elmt\"\n");
 
   for(int dom=0, sk=1; dom<this->Ndomains; ++dom){
     USEMe2 *um1  = this->get_domain(dom);

