   bindings is a vector of symbol-context pairs, symbols will become
   locals in the examples.
 
-  examples is a vector of compiled example functions.
-
-  subgroups is a vector of child example groups."
-  [bindings examples subgroups]
+  children is a vector of example functions and/or sub-groups."
+  [bindings children]
   {:pre [(or-nil vector? bindings)
          (even? (count bindings))]}
   (if (seq bindings)
     `(with-context ~(first bindings) ~(second bindings)
-       (group ~(vec (nnext bindings)) ~examples ~subgroups))
-    `(new-group ~(find-locals &env)
-                ~examples
-                ~subgroups
-                ~(standard-metadata &form nil))))
-
-(defn subgroup-form?
-  "True if form is a list starting with a subgroup-creating Var."
-  [form]
-  (and (seq? form)
-       (::subgroup (meta (resolve (first form))))))
-
-(defn declare-subgroup-form!
-  "Declare that Var v creates a subgroup."
-  [v]
-  (alter-meta! v assoc ::subgroup true))
-
-(defn split-examples-and-subgroups
-  "Separates examples and subgroups in args.  Returns a vector
-  [example-forms subgroup-forms]"
-  [args]
-  [(remove subgroup-form? args)
-   (vec (filter subgroup-form? args))])
+       (group ~(vec (nnext bindings)) ~children))
+    `(group-from-children ~(find-locals &env)
+                          ~children
+                          ~(standard-metadata &form nil))))
 
 (defmacro description
   "Returns an example group.  body begins with an optional doc string,


(let [c1 (com.stuartsierra.lazytest.contexts/context [] 1)
      c2 (com.stuartsierra.lazytest.contexts/context [] 2)
      g (group [x c1 y c2] (group-examples (= 1 x) "foo" (= y 2)) [])]
  (assert (group? g))
  (assert (= [c1 c2] (:contexts g)))
  (let [exs (:examples g)]

        (assert (nil? (:name m)))
        (assert (= '[x y] (:locals m)))))))

(let [g (description :given [x 1 y 2] (group-examples (= 1 x) "foo" (= y 2)))]
  (assert (group? g))
  (assert (= 2 (count (:contexts g))))
  (let [exs (:examples g)]
