    // BSK - note that for compatibility with the previous implementation
    // calling this method when (nvars == this->n_vars()) requires that
    // we invalidate the DOF indices and set the number of components to 0.
-@@ -212,10 +216,10 @@
+@@ -212,10 +228,13 @@
    // even in the case of (nvars == this->n_vars()), resulting in n_comp(s,v)
    // implicitly becoming 0 regardless of any previous value.
    // quick return?

+}
+
+
 } // 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;

    * Note that we specifically do not store the end for the last system - this always _idx_buf.size().
    *
-   * Specifically, consider the case of 4 systems, with 3, 0, 1, 2 DOFs respectively.  The _idx_buf then looks like
+   * Specifically, consider the case of 4 systems, with 3, 0, 1, 2 variable groups, respectively.  The _idx_buf then looks like:
+   \verbatim
+    [4 10 10 12 () (ncv_0 idx_0 ncv_1 idx_1 ncv_2 idx_2) () (ncv_0 idx_0) (ncv_0 idx_0 ncv_1 idx_1)]
+    [0  1  2  3         4     5     6     7     8     9         10    11      12    13    14    15]
+
+   \endverbatim
+   * The ending index is then given by
+   \verbatim
+    end_s = _idx_buf.size(), s == (ns-1),
+          = _idx_buf[s+1]    otherwise.
+   \endverbatim
+   * The starting indices are not specifically stored, but rather inferred as follows:
    *
-   * [4 10 10 12 () (nc_0 idx_0 nc_1 idx_1 nc_2 idx_2) () (nc_0 idx_0) (nc_0 idx_0 nc_1 idx_1)]
-   * [0  1  2  3        4     5    6     7    8     9        10    11     12    13   14    15]
+   * start_s = _idx_buf[s];
+
+   * Now, the defining characteristic of the \p VariableGroup is that it supports
