define(["elaiJS/helper"], function(helper) {
	'use strict';
  
	var self = function(data, keepDefined) {
  	merges(data, this || self, keepDefined);
	};
	
	function merges(src, dest, keepDefined) {
		for(var key in src) {
  		if(helper.isObject(src[key]) && helper.isObject(dest[key]))
        merges(src[key], dest[key], keepDefined);
	    else if((keepDefined && dest[key] === undefined) || !keepDefined)
        dest[key] = src[key];
		}
	}
	
	return self;
});
@@ -98,16 +98,73 @@
 ined) %7B%0A
+%09  var scope = (!this %7C%7C this === window) ? self : this;%0A
   %09merge
@@ -175,20 +175,13 @@
 ta, 
-this %7C%7C self
+scope
 , ke

Manage scope window