 +   * ncv_# = n_vars*ncv_magic + n_comp      for variable group #
 +   * idx_# = base_offset                    for variable group #
     *
--   * The starting indices are not specifically stored, but rather inferred as follows:
+-   * The ending index is then given by
 +   * the DOF index for a particular component c of variable v within that group is then given by
     *
+-   * end_s = _idx_buf.size(), s == (ns-1),
+-   *       = _idx_buf[s+1]    otherwise.
++   *  idx_var = idx_# + n_comp*v + c
+    *
+-   * The starting indices are not specifically stored, but rather inferred as follows:
+-   *
 -   * start_s = _idx_buf[s];
-+   *  idx_var = idx_# + n_comp*v + c
++   * note there is a subtlety here - "variable v within that group" usually means nothing to the
++   * user. This class is either indexed with variable group numbers, or variable numbers counted
++   * *within the system*. So for a system with 2 variable groups, 4 and 8 variables each,
++   * the 5th variable in the system is the 1st variable in 2nd variable group.
++   * (Now of course 0-base everything...  but you get the idea.)
     */
 -  typedef std::vector<unsigned int> index_buffer_t;
 +  typedef unsigned int index_t;

+}
+
+
 } // namespace libMesh
 
 
Index: include/base/dof_map.h
===================================================================
--- include/base/dof_map.h	(revision 6500)
+++ include/base/dof_map.h	(working copy)
@@ -309,13 +309,24 @@
     return *_n_oz;

 #ifdef LIBMESH_ENABLE_AMR
 
   //------------------------------------------------------------
@@ -486,13 +477,13 @@
 	    Node* node = elem->get_node(n);
 
 	    if (node->old_dof_object == NULL)
-	      if (node->has_dofs(this->sys_number()))
+	      if (node->has_dofs(sys_num))
 		node->set_old_dof_object();
 	  }
 
 	libmesh_assert (!elem->old_dof_object);
 
-	if (elem->has_dofs(this->sys_number()))
+	if (elem->has_dofs(sys_num))
 	  elem->set_old_dof_object();
       }
   }
@@ -510,14 +501,14 @@
     const MeshBase::node_iterator node_end = mesh.nodes_end();
 
     for ( ; node_it != node_end; ++node_it)
-      (*node_it)->set_n_vars(this->sys_number(),n_var);
+      (*node_it)->set_n_vars_per_group(sys_num, n_vars_per_group);
 
     // All the elements
     MeshBase::element_iterator       elem_it  = mesh.elements_begin();
