    // 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?

 #endif // #define __variable_h__
Index: src/systems/system.C
===================================================================
--- src/systems/system.C	(revision 6500)
+++ src/systems/system.C	(working copy)
@@ -1073,53 +1073,86 @@
 			           const FEType& type,

+   * ncv_# = n_vars*ncv_magic + n_comp      for variable group #
+   * idx_# = base_offset                    for variable group #
    *
-   * 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];
+   * 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;
