;
(function(mag) {

  "use strict";

  var mod = {
    modules: [],
    promises: [],
    deferreds: [],
    controllers: [],
    elements: []
  }

  mod.getController = function(mod, element, fill) {
    var controller

    // FireFox support only
    if (typeof Proxy !== 'undefined') {
      controller = new Proxy(new mod.controller, {
        get: function(target, prop) {
          if (target[prop] === undefined && ['watchers', 'toJSON', 'called', 'onload', 'onunload'].indexOf(prop) === -1) {
            var a = fill.find(element, prop),
              greedy = prop[0] === '$',
              v, // can be an array, object or string
              // for each
              tmp = []
              a.forEach(function(item, index) {
                if (a[index]) {
                  if (a[index].value && a[index].value.length > 0) {
                    v = a[index].value
                    if (a[index].type && (a[index].type == 'checkbox' || a[index].type == 'radio')) {
                      v = {
                        _text: v,
                        _checked: a[index].checked
                      }
                      tmp.push(v)
                    }
                  } else if (a[index].innerText && a[index].innerText.length > 0) {
                    v = a[index].innerText
                  } else if (a[0].innerHTML && a[index].innerHTML.length > 0) {
                    v = a[index].innerHTML
                  }
                }
              })
              if (tmp.length > 0 && greedy) return tmp
              return v
          }
          return target[prop]
        }
      })
    } else {
      controller = new mod.controller
    }
    return controller
  }

  mod.submodule = function(module, args) {
    var controller = function(args) {
      return (module.controller || function() {}).apply(this, args)
    }.bind({}, args)

    var view = function(ctrl) {
      if (arguments.length > 1) args = args.concat([].slice.call(arguments, 1))
      var template = module.view.apply(module, args ? [ctrl].concat(args) : [ctrl])
      if (args[0] && args[0].key != null) template.attrs.key = args[0].key
      // There's no template return ??
      return template
    }
    controller.$original = module.controller

    var output = {
      controller: controller,
      view: view
    }
    if (args[0] && args[0].key != null) output.attrs = {
      key: args[0].key
    }
    return output
  }

  mod.getArgs = function(i) {
    var args = mod.modules[i].controller && mod.modules[i].controller.$$args ? [mod.controllers[i]].concat(mod.modules[i].controller.$$args) : [mod.controllers[i]]
    return args
  }
  mag.mod = mod

})(window.mag || {})

@@ -74,17 +74,16 @@
 romises:
- 
 %5B%5D,%0A    
@@ -92,17 +92,16 @@
 ferreds:
- 
 %5B%5D,%0A    
@@ -240,16 +240,112 @@
 rt only%0A
+    // Removing since we are now native with Object.observe which is only Chrome & Opera%0A    /*%0A
     if (
@@ -686,18 +686,16 @@
         
-  
 v, // ca
@@ -738,18 +738,16 @@
         
-  
 // for e
@@ -750,18 +750,16 @@
 or each%0A
-  
         
@@ -783,18 +783,16 @@
         
-  
 a.forEac
@@ -823,34 +823,32 @@
 %7B%0A              
-  
 if (a%5Bindex%5D) %7B%0A
@@ -843,26 +843,24 @@
 a%5Bindex%5D) %7B%0A
-  
             
@@ -924,34 +924,32 @@
                 
-  
 v = a%5Bindex%5D.val
@@ -951,18 +951,16 @@
 %5D.value%0A
-  
         
@@ -1075,18 +1075,14 @@
     
-  
 v = %7B%0A
-  
     
@@ -1131,18 +1131,16 @@
         
-  
 _checked
@@ -1170,38 +1170,34 @@
                 
- 
- 
 %7D%0A
-  
                 
@@ -1222,34 +1222,32 @@
                 
-  
 %7D%0A              
@@ -1240,34 +1240,32 @@
                 
- 
- 
 %7D else if (a%5Bind
@@ -1306,34 +1306,32 @@
 t.length %3E 0) %7B%0A
-  
                 
@@ -1363,34 +1363,32 @@
                 
-  
 %7D else if (a%5B0%5D.
@@ -1443,34 +1443,32 @@
                 
- 
- 
 v = a%5Bindex%5D.inn
@@ -1482,38 +1482,34 @@
                 
-  %7D%0A  
+%7D%0A
               %7D%0A
@@ -1520,23 +1520,19 @@
         
- 
- 
 %7D)%0A
-  
         
@@ -1576,18 +1576,16 @@
 urn tmp%0A
-  
         
@@ -1711,24 +1711,67 @@
 oller%0A    %7D%0A
+    */%0A    controller = new mod.controller%0A
     return c

Update module.js