     KD.remote.api["JPayment#{ category.capitalize() }"]
 
   fetchProducts: (category, callback) ->
-    KD.getGroup().fetchProducts category, callback+    KD.getGroup().fetchProducts category, (err, products) ->
+      return callback err  if err
+
+      queue = products.map (plan) -> ->
+        # recursively fetch nested products, if any
+        if plan.fetchProducts?
+          plan.fetchProducts (err, planProducts) ->
+            return queue.fin err  if err
+
+            plan.childProducts = planProducts
+            queue.fin()
+
+        else queue.fin()
+
+      dash queue, (err) ->
+        return callback err  if err
+
+        callback null, products


    showAddProductsModal = (plan) =>
      modal = new GroupPlanAddProductsModal {}, plan
      modal.on 'ProductsAdded', reload

      @fetchProducts 'product', (err, products) ->
        return  if KD.showError err

    @productsView = @prepareProductView 'product'
    @plansView    = @prepareProductView 'plan'

  prepareProductView: (category) ->
    { view } = @getOptions()

    konstructor = getConstructor category

    do reload = =>
      @fetchProducts category, (err, products) ->
        view.setProducts category, products

