module.exports = function(neume, _) {
  "use strict";

  /*
   * +-----------+
   * | inputs[0] |
   * +-----------+
   *   |
   * +-----------+
   * | GainNode  |  +-----------+
   * | - gain: 0 |--| inputs[1] |
   * +-----------+  +-----------+
   *   |
   * +-----------+
   * | GainNode  |  +-----------+
   * | - gain: 0 |--| inputs[2] |
   * +-----------+  +-----------+
   *   |
   * +------------------+
   * | GainNode         |
   * | - gain: multiple |
   * +------------------+
   *   |
   */
  neume.register("*", function(ugen, spec, inputs) {
    var context = ugen.$context;
    var outlet  = null;

    var nodes    = [];
    var multiple = 1;
    var i, imax;

    for (i = 0, imax = inputs.length; i < imax; i++) {
      if (typeof inputs[i] === "number")  {
        multiple *= inputs[i];
      } else {
        nodes.push(inputs[i]);
      }
    }

    multiple = _.finite(multiple);

    if (nodes.length && multiple !== 0) {
      outlet = nodes.shift();

      for (i = 0, imax = nodes.length; i < imax; i++) {
        var gain = context.createGain();

        gain.gain.value = 0;

        _.connect({ from: nodes[i], to: gain.gain });
        _.connect({ from: outlet  , to: gain });

        outlet = gain;
      }

      if (multiple !== 1) {
        var tmp = outlet;

        outlet = context.createGain();

        outlet.gain.value = multiple;
        _.connect({ from: tmp, to: outlet });
      }
    }

    return new neume.Unit({
      outlet: outlet,
      offset: 0
    });

  });

};

@@ -658,77 +658,41 @@
  1;%0A
-    var i, imax;%0A%0A    for (i = 0, imax = inputs.length; i %3C imax; i++
+%0A    inputs.forEach(function(node
 ) %7B%0A
@@ -708,25 +708,20 @@
 (typeof 
-inputs%5Bi%5D
+node
  === %22nu
@@ -726,17 +726,16 @@
 number%22)
- 
  %7B%0A     
@@ -749,25 +749,20 @@
 iple *= 
-inputs%5Bi%5D
+node
 ;%0A      
@@ -793,17 +793,12 @@
 ush(
-inputs%5Bi%5D
+node
 );%0A 
@@ -805,25 +805,26 @@
      %7D%0A    %7D
-%0A
+);
 %0A    multipl
@@ -931,54 +931,51 @@
     
-for (i = 0, imax = nodes.length; i %3C imax; i++
+outlet = nodes.reduce(function(outlet, node
 ) %7B%0A
@@ -1080,12 +1080,10 @@
 node
-s%5Bi%5D
+  
 , to
@@ -1130,18 +1130,16 @@
 : outlet
-  
 , to: ga
@@ -1154,24 +1154,22 @@
         
-outlet =
+return
  gain;%0A 
@@ -1170,24 +1170,34 @@
 ain;%0A      %7D
+, outlet);
 %0A%0A      if (

fix ugen/mul