=== modified file 'AdapterRegistry.js'
--- AdapterRegistry.js	2007-11-04 18:07:03 +0000
+++ AdapterRegistry.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo.AdapterRegistry");
-
+dojo.module(
+	"dojo.AdapterRegistry",
+	function(){
 dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
 	//	summary:
 	//		A registry to make contextual calling/searching easier.
@@ -93,3 +94,5 @@
 		return false;
 	}
 });
+	}
+);

=== modified file 'DeferredList.js'
--- DeferredList.js	2008-10-01 18:35:37 +0000
+++ DeferredList.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,6 @@
-dojo.provide("dojo.DeferredList");
+dojo.module(
+	"dojo.DeferredList",
+	function(){
 dojo.declare("dojo.DeferredList", dojo.Deferred, {
 	constructor: function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
 		// summary:
@@ -82,3 +84,5 @@
 		return d;
 	}
 });
+	}
+);

=== modified file 'NodeList-fx.js'
--- NodeList-fx.js	2009-04-07 22:22:23 +0000
+++ NodeList-fx.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.NodeList-fx");
-dojo.require("dojo.fx");
+dojo.module("dojo.NodeList-fx", "dojo.fx", function(){
 
 /*=====
 dojo["NodeList-fx"] = {
@@ -131,3 +130,4 @@
 		return canim.play(delay||0); // dojo.Animation
 	}
 });
+});

=== modified file 'NodeList-html.js'
--- NodeList-html.js	2008-08-30 20:26:57 +0000
+++ NodeList-html.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.NodeList-html");
-dojo.require("dojo.html");
+dojo.module("dojo.NodeList-html", "dojo.html", function(){
 
 /*=====
 dojo["NodeList-html"] = {
@@ -36,3 +35,5 @@
 		return this; // dojo.NodeList
 	}
 });
+
+});

=== modified file 'NodeList-manipulate.js'
--- NodeList-manipulate.js	2009-09-30 15:47:23 +0000
+++ NodeList-manipulate.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.NodeList-manipulate");
+dojo.module("dojo.NodeList-manipulate", function(){
 
 /*=====
 dojo["NodeList-manipulate"] = {
@@ -9,7 +9,6 @@
 
 //TODO: add a way to parse for widgets in the injected markup?
 
-(function(){
 	function getText(/*DOMNode*/node){
 		// summary:
 		// 		recursion method for text() to use. Gets text value for a node.
@@ -717,4 +716,4 @@
 	if(!dojo.NodeList.prototype.html){
 		dojo.NodeList.prototype.html = dojo.NodeList.prototype.innerHTML;
 	}
-})();
+});

=== modified file 'NodeList-traverse.js'
--- NodeList-traverse.js	2009-10-20 04:05:07 +0000
+++ NodeList-traverse.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.NodeList-traverse");
+dojo.module("dojo.NodeList-traverse", function(){
 
 /*=====
 dojo["NodeList-traverse"] = {
@@ -504,3 +504,5 @@
 		}); //dojo.NodeList
 	}
 });
+
+});

=== modified file '_base.js'
--- _base.js	2008-02-24 04:52:17 +0000
+++ _base.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,13 @@
-dojo.provide("dojo._base");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.declare");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.Deferred");
-dojo.require("dojo._base.json");
-dojo.require("dojo._base.array");
-dojo.require("dojo._base.Color");
-dojo.requireIf(dojo.isBrowser, "dojo._base.browser");
+dojo.module(
+	"dojo._base",
+	[
+		"dojo._base.lang",
+		"dojo._base.declare",
+		"dojo._base.connect",
+		"dojo._base.Deferred",
+		"dojo._base.json",
+		"dojo._base.array",
+		"dojo._base.Color",
+		[ dojo.isBrowser, "dojo._base.browser" ]
+	]
+);

=== modified file '_base/Color.js'
--- _base/Color.js	2009-10-03 15:31:37 +0000
+++ _base/Color.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,7 @@
-dojo.provide("dojo._base.Color");
-dojo.require("dojo._base.array");
-dojo.require("dojo._base.lang");
-
-(function(){
-
+dojo.module(
+	"dojo._base.Color",
+	["dojo._base.array", "dojo._base.lang"],
+	function(){
 	var d = dojo;
 
 	dojo.Color = function(/*Array|String|Object*/ color){
@@ -213,4 +211,5 @@
 		var a = d.Color.named[str];
 		return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj);
 	};
-})();
+	}
+);

=== modified file '_base/Deferred.js'
--- _base/Deferred.js	2009-10-11 03:06:36 +0000
+++ _base/Deferred.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,7 @@
-dojo.provide("dojo._base.Deferred");
-dojo.require("dojo._base.lang");
-
+dojo.module(
+	"dojo._base.Deferred",
+	"dojo._base.lang",
+	function(){
 dojo.Deferred = function(/*Function?*/ canceller){
 	// summary:
 	//		Encapsulates a sequence of callbacks in response to a value that
@@ -419,3 +420,5 @@
 		}
 	}
 });
+	}
+);

=== modified file '_base/NodeList.js'
--- _base/NodeList.js	2009-10-26 05:40:01 +0000
+++ _base/NodeList.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,8 @@
-dojo.provide("dojo._base.NodeList");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.array");
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-(function(){
-
+dojo.module(
+	"dojo._base.NodeList",
+	["dojo._base.lang", "dojo._base.array"],
+	function(){
 	var d = dojo;
-//>>excludeEnd("webkitMobile");
 
 	var ap = Array.prototype, aps = ap.slice, apc = ap.concat;
 
@@ -980,7 +976,5 @@
 				*/
 		}
 	);
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-})();
-//>>excludeEnd("webkitMobile");
+	}
+);

=== modified file '_base/_loader/bootstrap.js'
--- _base/_loader/bootstrap.js	2009-11-07 23:42:56 +0000
+++ _base/_loader/bootstrap.js	2009-11-20 15:14:23 +0000
@@ -210,6 +210,88 @@
 		}
 	}
 
+	d.isOwnProperty = function(o, p) {
+		var prop = o.constructor.prototype[p];
+		return typeof prop == 'undefined' || prop !== o[p];
+	};
+
+	// Feature detection
+	var reFeaturedMethod = new RegExp('^(function|object)$', 'i');
+
+	// summary:
+	// Test for host object property referencing an object to be called
+	//
+	// description:
+	// If the referenced object will not be called, use isHostObjectProperty
+	// Allowed properties may be of type function, object (IE and possibly others) or unknown (IE ActiveX methods)
+	// Object types exclude null.
+	//
+	// Does NOT assert that an arbitrary property is callable
+	// Pass only names of properties universally implemented as methods
+	// This does NOT include properties that are methods in some browsers but not others
+	// This test will not discriminate between such implementations and
+	// applications should never call such objects
+	//
+	// example:
+	//
+	// if (dojo.isHostMethod(document, 'getElementById')) {
+	//     anElement = document.getElementById(id);
+	// }
+
+	dojo.isHostMethod = function(/* Host object */ o, /* String */ m) {
+		var t = typeof o[m];
+		return !!((reFeaturedMethod.test(t) && o[m]) || t == 'unknown'); /* Boolean */
+	};
+
+	// summary:
+	// Test for host object property that will be evaluated (e.g. assigned, type converted)
+	//
+	// description:
+	// Similar to isHostMethod, but does not allow unknown types, which are known to throw errors when evaluated
+	// If the property will be called, use isHostMethod
+	//
+	// example:
+	//
+	// if (dojo.isHostObjectProperty(document, 'all')) {
+	//     allElements = document.all;
+	// }
+
+	dojo.isHostObjectProperty = function(/* Host object */ o, /* String */ p) {
+		var t = typeof o[p];
+		return !!(reFeaturedMethod.test(t) && o[p]); /* Boolean */
+	};
+
+	// For application gateways to detect one or more API methods
+
+	dojo.areFeatures = function() {
+		var i = arguments.length;
+		while (i--) {
+			if (!dojo[arguments[i]]) {
+				return false;
+			}
+		}
+		return true;
+	};
+
+	dojo.areNSFeatures = function(ns) {
+		ns = dojo[ns];
+		if (ns) {
+			var features = Array.prototype.slice.call(arguments, 1);
+			var i = features.length;
+			while (i--) {
+				if (!ns[features[i]]) {
+					return false;
+				}
+			}
+			return true;
+		}
+		return false;
+	};
+
+	dojo._getWin = function() {
+		return dojo.global.window || dojo.global;
+	};
+
 /*=====
 	// Override locale setting, if specified
 	dojo.locale = {

=== modified file '_base/_loader/hostenv_browser.js'
--- _base/_loader/hostenv_browser.js	2009-11-15 12:27:52 +0000
+++ _base/_loader/hostenv_browser.js	2009-11-20 15:14:24 +0000
@@ -78,6 +78,23 @@
 		var d = dojo;
 //>>excludeEnd("webkitMobile");
 
+		dojo._loadUri = function(/*String*/uri, /*Function?*/cb){
+			if(d._loadedUrls[uri]){
+				return true; // Boolean
+			}
+			if(d._postLoad){
+				dojo._injectScript(uri);
+			}else{
+				dojo._writeScript(uri);
+			}
+			return true;
+		};
+
+		dojo._writeScript = function(uri){
+			(this.global.window || this.global)
+				.document.write('<script type="text/javascript" src="' + uri + '"></script>');
+		};
+
 		// this is a scope protection closure. We set browser versions and grab
 		// the URL we were loaded from here.
 
@@ -102,10 +119,37 @@
 							dojo.config[x] = cfgo[x];
 						}
 					}
+					(function(sNode){
+						dojo._injectScript = function(uri){
+							s = dojo.doc.createElement('script');
+
+							s.src = uri;
+							s.type = "text/javascript";
+
+							sNode.parentNode.appendChild(s);
+
+							s = null;
+						};
+					})(scripts[i]);
+
 					break; // "first Dojo wins"
 				}
 			}
 		}
+
+		if(typeof dojo._injectScript == "undefined"){
+			dojo._injectScript = function(uri){
+				var head = dojo.doc.getElementsByTagName('head')[0],
+				s = dojo.doc.createElement('script');
+
+				s.src = uri;
+				s.type = "text/javascript";
+
+				head.appendChild(s);
+
+				head = s = null;
+			};
+		}
 		d.baseUrl = d.config.baseUrl;
 
 		// fill in the rendering support information in dojo.render.*
@@ -367,62 +411,55 @@
 	})();
 //>>excludeEnd("webkitMobile");
 
-	//START DOMContentLoaded
 	dojo._initFired = false;
 	dojo._loadInit = function(e){
-		if(!dojo._initFired){
-			dojo._initFired = true;
-
-			//Help out IE to avoid memory leak.
-			if(!dojo.config.afterOnLoad && window.detachEvent){
-				window.detachEvent("onload", dojo._loadInit);
+
+		// NOTE: What is this flag for?
+
+		dojo._initFired = true;
+
+		// allow multiple calls, only first one will take effect
+		// A bug in khtml calls events callbacks for document for events which are not supported
+		// for example a created contextmenu event calls DOMContentLoaded
+
+		var type = e && e.type ? e.type.toLowerCase() : "load";
+		if (!arguments.callee.initialized && (type == "domcontentloaded" || type == "load")){
+			arguments.callee.initialized = true;
+			if (dojo._khtmlTimer){
+				window.clearInterval(dojo._khtmlTimer);
+				delete dojo._khtmlTimer;
 			}
 
-			if(dojo._inFlightCount == 0){
+			if (!dojo._inFlightCount){
 				dojo._modulesLoaded();
 			}
 		}
-	}
-
-	if(!dojo.config.afterOnLoad){
-		if(document.addEventListener){
-			//Standards. Hooray! Assumption here that if standards based,
-			//it knows about DOMContentLoaded. It is OK if it does not, the fall through
-			//to window onload should be good enough.
-			document.addEventListener("DOMContentLoaded", dojo._loadInit, false);
-			window.addEventListener("load", dojo._loadInit, false);
-		}else if(window.attachEvent){
-			window.attachEvent("onload", dojo._loadInit);
-		}
-	}
-
-	//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-	if(dojo.isIE){
-		// 	for Internet Explorer. readyState will not be achieved on init
-		// 	call, but dojo doesn't need it however, we'll include it
-		// 	because we don't know if there are other functions added that
-		// 	might.  Note that this has changed because the build process
-		// 	strips all comments -- including conditional ones.
-		if(!dojo.config.afterOnLoad && !dojo.config.skipIeDomLoaded){
-			document.write('<scr'+'ipt defer src="//:" '
-				+ 'onreadystatechange="if(this.readyState==\'complete\'){' + dojo._scopeName + '._loadInit();}">'
-				+ '</scr'+'ipt>'
-			);
-		}
-
-		try{
-			document.namespaces.add("v","urn:schemas-microsoft-com:vml");
-			var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata"],
-				i = 0, l = 1, s = document.createStyleSheet();
-			if(dojo.isIE >= 8){
-				i = 1;
-				l = vmlElems.length;
-			}
-			for(; i < l; ++i){
-				s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML);  display:inline-block");
-			}
-		}catch(e){}
-	}
+	};
+
+	var isHostMethod = dojo.isHostMethod,
+		doc = (dojo._getWin()).document,
+		config = dojo.config;
+	if (isHostMethod(window, 'addEventListener')) {
+		window.addEventListener("load", dojo._loadInit, false);
+	} else if (isHostMethod(window, 'attachEvent')) {
+		window.attachEvent("onload", dojo._loadInit);
+	}
+	if (!config.afterOnLoad){
+		if (isHostMethod(doc, 'addEventListener')){				
+			if (config.enableMozDomContentLoaded !== false){
+				doc.addEventListener("DOMContentLoaded", dojo._loadInit, false);
+			}
+		}			
+
+		if (!dojo.isIE && typeof doc.readyState == 'string' && isHostMethod(window, 'setInterval')){
+			dojo._khtmlTimer = window.setInterval(function(){
+				if (/loaded|complete/i.test(window.document.readyState)){
+					dojo._loadInit(); // call the onload handler
+				}
+			}, 10);
+		}
+	}
+
 	//>>excludeEnd("webkitMobile");
 	//END DOMContentLoaded
 

=== modified file '_base/_loader/loader.js'
--- _base/_loader/loader.js	2009-10-04 18:09:15 +0000
+++ _base/_loader/loader.js	2009-11-20 15:14:24 +0000
@@ -10,7 +10,6 @@
 
 	d.mixin(d, {
 		_loadedModules: {},
-		_inFlightCount: 0,
 		_hasResource: {},
 
 		_modulePrefixes: {
@@ -50,6 +49,7 @@
 	});
 
 
+	dojo._protocolPattern = /^\w+:/;
 	//>>excludeStart("xdomainExclude", fileName.indexOf("dojo.xd.js") != -1 && kwArgs.loader == "xdomain");
 	dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
 		// 	summary:
@@ -71,13 +71,16 @@
 		// cb: 
 		//		a callback function to pass the result of evaluating the script
 
-		var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath;
-		try{
-			return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean
-		}catch(e){
-			console.error(e);
-			return false; // Boolean
+		var absolute = this._protocolPattern.test(relpath) || relpath.charAt(0) == "/";
+		var uri = relpath;
+
+		if(!absolute){
+			uri = this.baseUrl + uri;
+		}else{
+			warn('Path should be relative: ' + relpath + '.');
 		}
+
+		return this._loadUri(uri);
 	}
 
 	dojo._loadUri = function(/*String*/uri, /*Function?*/cb){
@@ -161,18 +164,14 @@
 		//For other xdomain package loads after the initial load.
 		d._loaders = [];
 
+		// Same for required callbacks
+		dojo._requiredCallbacks = {};
+
 		for(var x = 0; x < mll.length; x++){
 			mll[x]();
 		}
 
 		d._loadNotifying = false;
-		
-		//Make sure nothing else got added to the onload queue
-		//after this first run. If something did, and we are not waiting for any
-		//more inflight resources, run again.
-		if(d._postLoad && d._inFlightCount == 0 && mll.length){
-			d._callLoaded();
-		}
 	}
 
 	dojo.unloaded = function(){
@@ -181,10 +180,11 @@
 		//		dojo.addOnUnload() instead of doing a direct dojo.connect() to this 
 		//		method to perform page/application cleanup methods. See 
 		//		dojo.addOnUnload for more info.
-		var mll = d._unloaders;
-		while(mll.length){
-			(mll.pop())();
+		var mll = dojo._unloaders;
+		for(var i = mll.length; i--;){
+			mll[i]();
 		}
+		dojo._unloaders = [];
 	}
 
 	d._onto = function(arr, obj, fn){
@@ -227,14 +227,6 @@
 		//	|	dojo.addOnLoad(object, function(){ doStuff(); });
 
 		d._onto(d._loaders, obj, functionName);
-
-		//Added for xdomain loading. dojo.addOnLoad is used to
-		//indicate callbacks after doing some dojo.require() statements.
-		//In the xdomain case, if all the requires are loaded (after initial
-		//page load), then immediately call any listeners.
-		if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){
-			d._callLoaded();
-		}
 	}
 
 	//Support calling dojo.addOnLoad via djConfig.addOnLoad. Support all the
@@ -242,33 +234,46 @@
 	//to the page after the page has loaded.
 	var dca = d.config.addOnLoad;
 	if(dca){
-		d.addOnLoad[(dca instanceof Array ? "apply" : "call")](d, dca);
+		dojo.addOnLoad[Object.prototype.toString.call(dca) == '[object Array]' ? "apply" : "call"](dojo, dca);
 	}
 
 	dojo._modulesLoaded = function(){
 		if(d._postLoad){ return; }
-		if(d._inFlightCount > 0){ 
-			console.warn("files still in flight!");
-			return;
-		}
 		d._callLoaded();
 	}
 
+	// Test for host object properties that are typically callable (e.g. document.getElementById) or known to be callable in some implementations (e.g. document.all in Safari)
+	// which may be of type function, object (IE and possibly others) or unknown (IE ActiveX methods)
+	var isHostMethod = dojo.isHostMethod;
+	var getWin = dojo._getWin;
+
+	if(isHostMethod(getWin(), 'setTimeout')){
+		dojo._setMethodTimeout = function(methodName, delay){
+			var scopeName = dojo._scopeName;
+
+			// NOTE: Why use dojo.global here?
+
+			var space = dojo.global[scopeName];
+			var fn = function(){
+				return space[methodName]();
+			};
+			fn.toString = function(){
+				return 'dojo.global["' + scopeName + '"].' + methodName + '();';
+			};		
+			getWin().setTimeout(fn, delay);
+		};
+	}
+
 	dojo._callLoaded = function(){
-
-		// The "object" check is for IE, and the other opera check fixes an
-		// issue in Opera where it could not find the body element in some
-		// widget test cases.  For 0.9, maybe route all browsers through the
-		// setTimeout (need protection still for non-browser environments
-		// though). This might also help the issue with FF 2.0 and freezing
-		// issues where we try to do sync xhr while background css images are
-		// being loaded (trac #2572)? Consider for 0.9.
-		if(typeof setTimeout == "object" || (d.config.useXDomain && d.isOpera)){
-			setTimeout(
-				d.isAIR ? function(){ d.loaded(); } : d._scopeName + ".loaded();",
-				0);
+		var doc = getWin().document;
+
+		// Make sure the parser has hit the opening body tag
+		// Non-browsers will skip this.
+
+		if(dojo._setMethodTimeout){
+			dojo._setMethodTimeout((doc && doc.body === null) ? '_callLoaded' : 'loaded', 10);
 		}else{
-			d.loaded();
+			dojo.loaded();
 		}
 	}
 
@@ -312,7 +317,19 @@
 		init();
 	}
 
-	dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
+	dojo._checkRequirements = function(modules, provided) {
+		var ready = true;
+		var checkModules = this[(provided ? '_provided' : '_loaded') + 'Modules'];
+
+		for (var i = modules.length; i--;) {
+			if (!checkModules[modules[i]]) {
+				ready = false;
+			}
+		}
+		return ready;
+	};
+
+	dojo._loadModule = dojo.require = function(/*String|Array*/moduleName, /*Function?*/callback){
 		//	summary:
 		//		loads a Javascript module from the appropriate URI
 		//	moduleName:
@@ -396,38 +413,52 @@
 		//		|	var B = dojo.require("A.B");
 		//	   	|	...
 		//	returns: the required namespace object
-		omitModuleCheck = d._global_omit_module_check || omitModuleCheck;
-
-		//Check if it is already loaded.
-		var module = d._loadedModules[moduleName];
-		if(module){
-			return module;
-		}
-
-		// convert periods to slashes
-		var relpath = d._getModuleSymbols(moduleName).join("/") + '.js';
-
-		var modArg = !omitModuleCheck ? moduleName : null;
-		var ok = d._loadPath(relpath, modArg);
-
-		if(!ok && !omitModuleCheck){
-			throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
-		}
-
-		// check that the symbol was defined
-		// Don't bother if we're doing xdomain (asynchronous) loading.
-		if(!omitModuleCheck && !d._isXDomain){
-			// pass in false so we can give better error
-			module = d._loadedModules[moduleName];
-			if(!module){
-				throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
-			}
-		}
-
-		return module;
+		var indeces = [], modules = (typeof moduleName == 'string') ? [moduleName] : moduleName;
+		var len = modules.length;
+		var requiredCallbacks = dojo._requiredCallbacks;
+
+		var requiredCallback = function() {
+			if (dojo._checkRequirements(modules, true)) {
+
+				// All modules in bundle loaded
+
+				callback && callback();				
+
+				for (var i = len; i--;) {
+					requiredCallbacks[modules[i]][indeces[i]] = null;
+				}
+			}
+		};
+
+		if(!dojo._checkRequirements(modules, true)){
+			for(var i = 0; i<len; i++){
+				var doLoad = false;
+				if(!requiredCallbacks[modules[i]]){
+					requiredCallbacks[modules[i]] = [];
+					doLoad = true;
+				}
+				indeces[i] = requiredCallbacks[modules[i]].length;
+				requiredCallbacks[modules[i]].push(requiredCallback);
+				if(doLoad){
+					var relpath = d._getModuleSymbols(modules[i]).join("/") + '.js';
+					dojo._loadPath(relpath);
+				}
+			}
+		}else if(callback){
+			callback();
+		}
 	}
 
-	dojo.provide = function(/*String*/ resourceName){
+	dojo._requiredModules = {};
+	dojo._providedModules = {};
+	dojo._requiredCallbacks = {};
+
+	dojo.module = function(
+		/*String*/ resourceName,
+		/*Array|String*/ requires,
+		/*Array*/ localeBundles,
+		/*Function*/ callback
+	){
 		//	summary:
 		//		Register a resource with the package system. Works in conjunction with `dojo.require`
 		//
@@ -465,8 +496,80 @@
 
 		//Make sure we have a string.
 		resourceName = resourceName + "";
-		return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object
-	}
+
+		if(d._loadedModules[resourceName]){
+			return d._loadedModules[resourceName];
+		}
+		var module = d._loadedModules[resourceName] = d.getObject(resourceName, true);
+
+		if(typeof requires == 'function'){
+			callback = requires;
+			requires = [];
+		}else if(typeof localeBundles == 'function'){
+			callback = localeBundles;
+			localeBundles = [];
+		}
+
+		if(typeof requires == "string"){
+			requires = [requires];
+		}
+
+		var requiredCallbacks = dojo._requiredCallbacks,
+			providedModules = dojo._providedModules;
+
+		var provided = function(){
+			var i, cb, len, result, callbacks = dojo._requiredCallbacks[resourceName];
+
+			if (dojo._providedModules[resourceName]) {
+				throw new Error(rn + " provided more than once.");
+			}
+
+			result = dojo._providedModules[resourceName] = dojo.getObject(resourceName, true);
+
+			callback && callback(result);
+
+			if (callbacks) {
+				len = callbacks.length;
+
+				for (i = 0; i < len; i++) {
+					cb = callbacks[i];
+					if (cb) {
+						cb();
+					}
+				}
+			}
+
+			return result; // Object
+		};
+
+		if(!requires.length){
+			provided();
+			return module;
+		}
+
+		for(var i=requires.length; i--;){
+			var req = requires[i];
+			if(typeof req != "string"){
+				if(typeof req[0] == "function"){
+					if(req[0]() === true){
+						requires.splice(i, 1, req[1]);
+					}else{
+						requires.splice(i, 1);
+					}
+				}else{
+					if(req[0] === true){
+						requires.splice(i, 1, req[1]);
+					}else{
+						requires.splice(i, 1);
+					}
+				}
+			}
+		}
+
+		dojo.require(requires, provided);
+
+		return module;
+	};
 
 	//Start of old bootstrap2:
 
@@ -630,8 +733,10 @@
 		//	|				...
 		//
 
-		d.require("dojo.i18n");
-		d.i18n._requireLocalization.apply(d.hostenv, arguments);
+		var args = arguments;
+		d.require("dojo.i18n", function(){
+			d.i18n._requireLocalization.apply(d.hostenv, args);
+		});
 	};
 
 

=== modified file '_base/array.js'
--- _base/array.js	2009-09-24 17:53:06 +0000
+++ _base/array.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,7 @@
-dojo.require("dojo._base.lang");
-dojo.provide("dojo._base.array");
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-(function(){
+dojo.module(
+	"dojo._base.array",
+	"dojo._base.lang",
+	function(){
 	var _getParts = function(arr, obj, cb){
 		return [ 
 			(typeof arr == "string") ? arr.split("") : arr, 
@@ -247,7 +246,8 @@
 			return outArr; // Array
 		}
 	});
-})();
+	}
+);
 //>>excludeEnd("webkitMobile");
 //>>excludeStart("webkitMobile", kwArgs.webkitMobile);
 /*

=== modified file '_base/browser.js'
--- _base/browser.js	2009-01-05 06:36:02 +0000
+++ _base/browser.js	2009-11-20 15:08:05 +0000
@@ -1,18 +1,13 @@
-dojo.provide("dojo._base.browser");
-
-dojo.require("dojo._base.window");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.event");
-dojo.require("dojo._base.html");
-dojo.require("dojo._base.NodeList");
-dojo.require("dojo._base.query");
-dojo.require("dojo._base.xhr");
-dojo.require("dojo._base.fx");
-
-//Need this to be the last code segment in base, so do not place any
-//dojo.requireIf calls in this file. Otherwise, due to how the build system
-//puts all requireIf dependencies after the current file, the require calls
-//could be called before all of base is defined.
-dojo.forEach(dojo.config.require, function(i){
-	dojo["require"](i);
-});
+dojo.module(
+	"dojo._base.browser",
+	["dojo._base.window", "dojo._base.connect", "dojo._base.event", "dojo._base.html", "dojo._base.NodeList", "dojo._base.query", "dojo._base.xhr", "dojo._base.fx"],
+	function(){
+		//Need this to be the last code segment in base, so do not place any
+		//dojo.requireIf calls in this file. Otherwise, due to how the build system
+		//puts all requireIf dependencies after the current file, the require calls
+		//could be called before all of base is defined.
+		dojo.forEach(dojo.config.require, function(i){
+			dojo["require"](i);
+		});
+	}
+);

=== modified file '_base/connect.js'
--- _base/connect.js	2009-10-03 15:19:49 +0000
+++ _base/connect.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,8 @@
-dojo.provide("dojo._base.connect");
-dojo.require("dojo._base.lang");
-
 // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
-
+dojo.module(
+	"dojo._base.connect",
+	"dojo._base.lang",
+	function(){
 // low-level delegation machinery
 dojo._listener = {
 	// create a dispatcher function
@@ -314,3 +314,5 @@
 	var pf = function(){ dojo.publish(topic, arguments); }
 	return (event) ? dojo.connect(obj, event, pf) : dojo.connect(obj, pf); //Handle
 };
+	}
+);

=== modified file '_base/declare.js'
--- _base/declare.js	2009-11-14 18:59:35 +0000
+++ _base/declare.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,7 @@
-dojo.provide("dojo._base.declare");
-
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.array");
-
-(function(){
+dojo.module(
+	"dojo._base.declare",
+	["dojo._base.lang", "dojo._base.array"],
+	function(){
 	var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString,
 		xtor = new Function, counter = 0, cname = "constructor";
 
@@ -970,4 +968,5 @@
 		//	|	});
 	};
 	=====*/
-})();
+	}
+);

=== modified file '_base/event.js'
--- _base/event.js	2009-09-30 20:59:19 +0000
+++ _base/event.js	2009-11-20 15:08:05 +0000
@@ -1,11 +1,7 @@
-dojo.provide("dojo._base.event");
-dojo.require("dojo._base.connect");
-
-// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-(function(){
-//>>excludeEnd("webkitMobile");
+dojo.module(
+	"dojo._base.event",
+	"dojo._base.connect",
+	function(){
 	// DOM event listener machinery
 	var del = (dojo._event_listener = {
 		add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){
@@ -610,14 +606,8 @@
 				return evt;
 			}
 		});
-	//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-	}
-	//>>excludeEnd("webkitMobile");
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-})();
-//>>excludeEnd("webkitMobile");
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
+//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
+}
 if(dojo.isIE){
 	// keep this out of the closure
 	// closing over 'iel' or 'ieh' b0rks leak prevention
@@ -652,3 +642,5 @@
 	}
 }
 //>>excludeEnd("webkitMobile");
+	}
+);

=== modified file '_base/fx.js'
--- _base/fx.js	2009-09-21 19:18:26 +0000
+++ _base/fx.js	2009-11-20 15:08:05 +0000
@@ -1,17 +1,12 @@
-dojo.provide("dojo._base.fx");
-dojo.require("dojo._base.Color");
-dojo.require("dojo._base.connect");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.html");
-
 /*
 	Animation loosely package based on Dan Pupius' work, contributed under CLA: 
 		http://pupius.co.uk/js/Toolkit.Drawing.js
 */
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-(function(){ 
+dojo.module(
+	"dojo._base.fx",
+	["dojo._base.Color", "dojo._base.connect", "dojo._base.lang", "dojo._base.html"],
+	function(){ 
 	var d = dojo;
-//>>excludeEnd("webkitMobile");
 	var _mixin = d._mixin;
 	
 	dojo._Line = function(/*int*/ start, /*int*/ end){
@@ -380,7 +375,7 @@
 
 		args.node = d.byId(args.node);
 		var fArgs = _mixin({ properties: {} }, args),
-		 	props = (fArgs.properties.opacity = {});
+			props = (fArgs.properties.opacity = {});
 		
 		props.start = !("start" in fArgs) ?
 			function(){ 
@@ -661,6 +656,5 @@
 			onEnd: onEnd 
 		}).play(delay || 0);
 	};
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-})();
-//>>excludeEnd("webkitMobile");
+	}
+);

=== modified file '_base/html.js'
--- _base/html.js	2009-10-18 23:02:30 +0000
+++ _base/html.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,7 @@
-dojo.require("dojo._base.lang");
-dojo.provide("dojo._base.html");
-
+dojo.module(
+	"dojo._base.html",
+	"dojo._base.lang",
+	function(){
 // FIXME: need to add unit tests for all the semi-public methods
 
 //>>excludeStart("webkitMobile", kwArgs.webkitMobile);
@@ -1086,7 +1087,7 @@
 			var r = de.getBoundingClientRect(); // works well for IE6+
 			//console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks);
 			var l = r.left,
-			    t = r.top;
+				t = r.top;
 			if(d.isIE < 7){
 				l += de.clientLeft;	// scrollbar size in strict/RTL, or,
 				t += de.clientTop;	// HTML border size in strict
@@ -1867,3 +1868,5 @@
 //>>excludeStart("webkitMobile", kwArgs.webkitMobile);
 })();
 //>>excludeEnd("webkitMobile");
+	}
+);

=== modified file '_base/json.js'
--- _base/json.js	2009-10-03 15:01:44 +0000
+++ _base/json.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo._base.json");
-
+dojo.module(
+	"dojo._base.json",
+	function(){
 dojo.fromJson = function(/*String*/ json){
 	// summary:
 	// 		Parses a [JSON](http://json.org) string to return a JavaScript object.
@@ -140,3 +141,5 @@
 	}
 	return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
 }
+	}
+);

=== modified file '_base/lang.js'
--- _base/lang.js	2009-11-03 00:17:48 +0000
+++ _base/lang.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,6 @@
-dojo.provide("dojo._base.lang");
-
-(function(){
+dojo.module(
+	"dojo._base.lang",
+	function(){
 	var d = dojo, opts = Object.prototype.toString;
 
 	// Crockford (ish) functions
@@ -384,4 +384,5 @@
 		return tmpl.replace(pattern || _pattern, d.isFunction(map) ?
 			map : function(_, k){ return d.getObject(k, false, map); });
 	};
-})();
+	}
+);

=== modified file '_base/query-sizzle.js'
--- _base/query-sizzle.js	2009-02-19 00:27:28 +0000
+++ _base/query-sizzle.js	2009-11-20 15:08:05 +0000
@@ -13,9 +13,10 @@
 
 //This file gets copied to dojo/_base/query.js, so set the provide accordingly.
 if(typeof dojo != "undefined"){
-	dojo.provide("dojo._base.query");
-	dojo.require("dojo._base.NodeList");
-
+	dojo.module(
+		"dojo._base.query",
+		"dojo._base.NodeList",
+		function(){
 	//Start Dojo mappings.
 	dojo.query = function(/*String*/ query, /*String|DOMNode?*/ root, /*Function?*/listCtor){
 		listCtor = listCtor || dojo.NodeList;
@@ -41,6 +42,8 @@
 	dojo._filterQueryResult = function(nodeList, simpleFilter){
 		return dojo.Sizzle.filter(simpleFilter, nodeList);
 	}
+		}
+	);
 }
 
 //Main Sizzle code follows...

=== modified file '_base/query.js'
--- _base/query.js	2009-11-20 00:06:47 +0000
+++ _base/query.js	2009-11-20 15:08:05 +0000
@@ -1,85 +1,3 @@
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-if(typeof dojo != "undefined"){
-//>>excludeEnd("webkitMobile");
-	dojo.provide("dojo._base.query");
-	dojo.require("dojo._base.NodeList");
-	dojo.require("dojo._base.lang");
-
-//>>excludeStart("acmeExclude", fileName.indexOf("dojo") != -1);
-
-}else if(!this["acme"] && !this["queryPortability"]){
-	// NOTE: 
-	//		the functions and properties are duplicates of things found
-	//		elsewhere in Dojo. They've been copied here to make query.js a
-	//		stand-alone system.  The "acmeExclude" ensures that it *never*
-	//		shows up in builds of Dojo.
-	(function(){
-		// a self-sufficient query impl
-		acme = {
-			trim: function(/*String*/ str){
-				// summary:
-				//		trims whitespaces from both sides of the string
-				str = str.replace(/^\s+/, '');
-				for(var i = str.length - 1; i >= 0; i--){
-					if(/\S/.test(str.charAt(i))){
-						str = str.substring(0, i + 1);
-						break;
-					}
-				}
-				return str;	// String
-			},
-			forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){
-				//	summary:
-				// 		an iterator function that passes items, indexes,
-				// 		and the array to a callback
-				if(!arr || !arr.length){ return; }
-				for(var i=0,l=arr.length; i<l; ++i){ 
-					callback.call(thisObject||window, arr[i], i, arr);
-				}
-			},
-			byId: function(id, doc){
-				// 	summary:
-				//		a function that return an element by ID, but also
-				//		accepts nodes safely
-				if(typeof id == "string"){
-					return (doc||document).getElementById(id); // DomNode
-				}else{
-					return id; // DomNode
-				}
-			},
-			// the default document to search
-			doc: document,
-			// the constructor for node list objects returned from query()
-			NodeList: Array
-		};
-
-		// define acme.isIE, acme.isSafari, acme.isOpera, etc.
-		var n = navigator;
-		var dua = n.userAgent;
-		var dav = n.appVersion;
-		var tv = parseFloat(dav);
-		acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;
-		acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;
-		acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
-		acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
-		var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
-		if(index && !acme.isChrome){
-			acme.isSafari = parseFloat(dav.split("Version/")[1]);
-			if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
-				acme.isSafari = 2;
-			}
-		}
-		if(document.all && !acme.isOpera){
-			acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
-		}
-
-		Array._wrap = function(arr){ return arr; };
-	})();
-
-//>>excludeEnd("acmeExclude");
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-}
-
 /*
 	dojo.query() architectural overview:
 
@@ -112,7 +30,7 @@
 			5.) matched nodes are pruned to ensure they are unique (if necessary)
 */
 
-;(function(d){
+var queryFunction = function(d){
 	// define everything in a closure for compressability reasons. "d" is an
 	// alias to "dojo" (or the toolkit alias object, e.g., "acme").
 
@@ -1582,8 +1500,88 @@
 		}
 		return tmpNodeList;
 	}
-})(this["queryPortability"]||this["acme"]||dojo);
-//>>excludeEnd("webkitMobile");
+};
+var acme;
+if(typeof dojo != "undefined"){
+	dojo.module(
+		"dojo._base.query",
+		"dojo._base.NodeList",
+		function(){
+			queryFunction(dojo);
+		}
+	);
+}else if(!acme && !this.queryPortability){
+	// NOTE: 
+	//		the functions and properties are duplicates of things found
+	//		elsewhere in Dojo. They've been copied here to make query.js a
+	//		stand-alone system.  The "acmeExclude" ensures that it *never*
+	//		shows up in builds of Dojo.
+	(function(){
+		// a self-sufficient query impl
+		acme = {
+			trim: function(/*String*/ str){
+				// summary:
+				//		trims whitespaces from both sides of the string
+				str = str.replace(/^\s+/, '');
+				for(var i = str.length - 1; i >= 0; i--){
+					if(/\S/.test(str.charAt(i))){
+						str = str.substring(0, i + 1);
+						break;
+					}
+				}
+				return str;	// String
+			},
+			forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){
+				//	summary:
+				// 		an iterator function that passes items, indexes,
+				// 		and the array to a callback
+				if(!arr || !arr.length){ return; }
+				for(var i=0,l=arr.length; i<l; ++i){ 
+					callback.call(thisObject||window, arr[i], i, arr);
+				}
+			},
+			byId: function(id, doc){
+				// 	summary:
+				//		a function that return an element by ID, but also
+				//		accepts nodes safely
+				if(typeof id == "string"){
+					return (doc||document).getElementById(id); // DomNode
+				}else{
+					return id; // DomNode
+				}
+			},
+			// the default document to search
+			doc: document,
+			// the constructor for node list objects returned from query()
+			NodeList: Array
+		};
+
+		// define acme.isIE, acme.isSafari, acme.isOpera, etc.
+		var n = navigator;
+		var dua = n.userAgent;
+		var dav = n.appVersion;
+		var tv = parseFloat(dav);
+		acme.isOpera = (dua.indexOf("Opera") >= 0) ? tv: undefined;
+		acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;
+		acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
+		acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
+		var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
+		if(index && !acme.isChrome){
+			acme.isSafari = parseFloat(dav.split("Version/")[1]);
+			if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
+				acme.isSafari = 2;
+			}
+		}
+		if(document.all && !acme.isOpera){
+			acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
+		}
+
+		Array._wrap = function(arr){ return arr; };
+	})();
+
+	queryFunction(this.queryPortability||this.acme);
+
+}
 
 //>>excludeStart("webkitMobile", kwArgs.webkitMobile);
 /*

=== modified file '_base/window.js'
--- _base/window.js	2009-10-06 14:51:18 +0000
+++ _base/window.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo._base.window");
-
+dojo.module(
+	"dojo._base.window",
+	function(){
 /*=====
 dojo.doc = {
 	// summary:
@@ -94,4 +95,5 @@
 		dojo.isQuirks = oldQ;
 	}
 };
-	
+	}
+);

=== modified file '_base/xhr.js'
--- _base/xhr.js	2009-11-07 23:53:54 +0000
+++ _base/xhr.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,7 @@
-dojo.provide("dojo._base.xhr");
-dojo.require("dojo._base.Deferred");
-dojo.require("dojo._base.json");
-dojo.require("dojo._base.lang");
-dojo.require("dojo._base.query");
-
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-(function(){
-//>>excludeEnd("webkitMobile");
+dojo.module(
+	"dojo._base.xhr",
+	["dojo._base.Deferred", "dojo._base.json", "dojo._base.lang", "dojo._base.query"],
+	function(){
 	var _d = dojo, cfg = _d.config;
 
 	function setValue(/*Object*/obj, /*String*/name, /*String*/value){
@@ -933,6 +928,5 @@
 		throw new Error("dojo.wrapForm not yet implemented");
 	}
 	*/
-//>>excludeStart("webkitMobile", kwArgs.webkitMobile);
-})();
-//>>excludeEnd("webkitMobile");
+	}
+);

=== modified file '_firebug/firebug.js'
--- _firebug/firebug.js	2009-11-09 04:12:49 +0000
+++ _firebug/firebug.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo._firebug.firebug");
+dojo.module("dojo._firebug.firebug", function(){
 	
 dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
 	// summary: 
@@ -61,9 +61,6 @@
 	//		|	var djConfig = {isDebug: true, debugHeight:100 }
 
 
-
-(function(){
-
 	var isNewIE = (/Trident/.test(window.navigator.userAgent));
 	if(isNewIE){
 		// Fixing IE's console
@@ -1211,5 +1208,5 @@
 	});
 }
 
-})();
+});
 

=== modified file 'back.js'
--- back.js	2009-09-15 19:50:37 +0000
+++ back.js	2009-11-20 15:08:05 +0000
@@ -1,15 +1,12 @@
-dojo.provide("dojo.back");
-
 /*=====
 dojo.back = {
 	// summary: Browser history management resources
 }
 =====*/
 
-
-(function(){ 
-	var back = dojo.back;
-
+dojo.module(
+	"dojo.back",
+	function(back){
 	// everyone deals with encoding the hash slightly differently
 
 	function getHash(){ 
@@ -103,11 +100,11 @@
 		//summary: private method. Do not call this directly.
 		var url = (dojo.config["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html")) + "?" + (new Date()).getTime();
 		moveForward = true;
-        if(historyIframe){
-		    dojo.isWebKit ? historyIframe.location = url : window.frames[historyIframe.name].location = url;
-        }else{
-            //console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a <script> block that lives inside the <body> tag.");
-        }
+		if(historyIframe){
+			dojo.isWebKit ? historyIframe.location = url : window.frames[historyIframe.name].location = url;
+		}else{
+			//console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a <script> block that lives inside the <body> tag.");
+		}
 		return url; //String
 	}
 
@@ -162,8 +159,8 @@
 		var src = dojo.config["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html");
 		if (dojo._postLoad) {
 			console.error("dojo.back.init() must be called before the DOM has loaded. "
-			            + "If using xdomain loading or djConfig.debugAtAllCosts, include dojo.back "
-			            + "in a build layer.");
+						+ "If using xdomain loading or djConfig.debugAtAllCosts, include dojo.back "
+						+ "in a build layer.");
 		} else {
 			document.write('<iframe style="border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;" name="dj_history" id="dj_history" src="' + src + '"></iframe>');
 		}
@@ -223,7 +220,7 @@
 		//		not evaluate to false, that value will be used as the fragment identifier. For example,
 		//		if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
 		//
-	 	//	example:
+		//	example:
 		//		|	dojo.back.addToHistory({
 		//		|		back: function(){ console.log('back pressed'); },
 		//		|		forward: function(){ console.log('forward pressed'); },
@@ -389,4 +386,5 @@
 			handleForwardButton();
 		}
 	};
- })();
+	}
+);

=== modified file 'behavior.js'
--- behavior.js	2009-02-10 04:36:25 +0000
+++ behavior.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo.behavior");
-
+dojo.module(
+	"dojo.behavior",
+	function(){
 dojo.behavior = new function(){
 	// summary: 
 	//		Utility for unobtrusive/progressive event binding, DOM traversal,
@@ -237,3 +238,5 @@
 }
 
 dojo.addOnLoad(dojo.behavior, "apply");
+	}
+);

=== modified file 'cache.js'
--- cache.js	2009-10-13 14:06:10 +0000
+++ cache.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,3 @@
-dojo.provide("dojo.cache");
-
 /*=====
 dojo.cache = { 
 	// summary:
@@ -7,7 +5,9 @@
 };
 =====*/
 
-(function(){
+dojo.module(
+	"dojo.cache",
+	function(){
 	var cache = {};
 	dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
 		// summary:
@@ -114,4 +114,5 @@
 		}
 		return val; //String
 	};
-})();
+	}
+);

=== modified file 'cldr/monetary.js'
--- cldr/monetary.js	2008-03-04 01:39:28 +0000
+++ cldr/monetary.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,6 @@
-dojo.provide("dojo.cldr.monetary");
+dojo.module("dojo.cldr.monetary", function(monetary){
 
-dojo.cldr.monetary.getData = function(/*String*/code){
+monetary.getData = function(/*String*/code){
 // summary: A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
 // code: an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code
 
@@ -21,3 +21,5 @@
 
 	return {places: places, round: round}; // Object
 };
+
+});

=== modified file 'cldr/supplemental.js'
--- cldr/supplemental.js	2008-07-07 20:47:43 +0000
+++ cldr/supplemental.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,4 @@
-dojo.provide("dojo.cldr.supplemental");
-
-dojo.require("dojo.i18n");
+dojo.module("dojo.cldr.supplemental", "dojo.i18n", function(){
 
 dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
 // summary: Returns a zero-based index for first day of the week
@@ -68,3 +66,5 @@
 	if(end === undefined){end=0;}
 	return {start:start, end:end}; /*Object {start,end}*/
 };
+
+});

=== modified file 'colors.js'
--- colors.js	2008-12-26 12:39:42 +0000
+++ colors.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,3 @@
-dojo.provide("dojo.colors");
-
 //TODO: this module appears to break naming conventions
 
 /*=====
@@ -8,7 +6,9 @@
 }
 =====*/
 
-(function(){
+dojo.module(
+	"dojo.colors",
+	function(){
 	// this is a standard conversion prescribed by the CSS3 Color Module
 	var hue2rgb = function(m1, m2, h){
 		if(h < 0){ ++h; }
@@ -80,8 +80,6 @@
 		t.a = confine(t.a, 0, 1);
 		return this;	// dojo.Color
 	};
-})();
-
 
 dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
 	// summary: creates a greyscale color with an optional alpha
@@ -223,3 +221,5 @@
 	whitesmoke:	[245,245,245],
 	yellowgreen:	[154,205,50]
 });
+	}
+);

=== modified file 'cookie.js'
--- cookie.js	2008-04-30 13:09:53 +0000
+++ cookie.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,7 @@
-dojo.provide("dojo.cookie");
-
-dojo.require("dojo.regexp");
-
+dojo.module(
+	"dojo.cookie",
+	"dojo.regexp",
+	function(){
 /*=====
 dojo.__cookieProps = function(){
 	//	expires: Date|String|Number?
@@ -53,7 +53,7 @@
 		return matches ? decodeURIComponent(matches[1]) : undefined; // String or undefined
 	}else{
 		props = props || {};
-// FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
+		// FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
 		var exp = props.expires;
 		if(typeof exp == "number"){ 
 			var d = new Date();
@@ -89,3 +89,5 @@
 	}
 	return navigator.cookieEnabled;
 };
+	}
+);

=== modified file 'currency.js'
--- currency.js	2008-03-07 04:26:31 +0000
+++ currency.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,6 @@
-dojo.provide("dojo.currency");
+dojo.module("dojo.currency", ["dojo.number", "dojo.i18n", "dojo.cldr.monetary"], function(currency){
 
-dojo.require("dojo.number");
-dojo.require("dojo.i18n");
 dojo.requireLocalization("dojo.cldr", "currency");
-dojo.require("dojo.cldr.monetary");
 
 /*=====
 dojo.currency = {
@@ -91,3 +88,5 @@
 
 	return dojo.number.parse(expression, dojo.currency._mixInDefaults(options));
 }
+
+});

=== modified file 'data/ItemFileReadStore.js'
--- data/ItemFileReadStore.js	2009-10-07 19:32:22 +0000
+++ data/ItemFileReadStore.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,4 @@
-dojo.provide("dojo.data.ItemFileReadStore");
-
-dojo.require("dojo.data.util.filter");
-dojo.require("dojo.data.util.simpleFetch");
-dojo.require("dojo.date.stamp");
+dojo.module("dojo.data.ItemFileReadStore", ["dojo.data.util.filter", "dojo.data.util.simpleFetch", "dojo.date.stamp"], function(){
 
 dojo.declare("dojo.data.ItemFileReadStore", null,{
 	//	summary:
@@ -935,3 +931,4 @@
 });
 //Mix in the simple fetch implementation to this class.
 dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);
+});

=== modified file 'data/ItemFileWriteStore.js'
--- data/ItemFileWriteStore.js	2009-10-07 19:32:22 +0000
+++ data/ItemFileWriteStore.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.ItemFileWriteStore");
-dojo.require("dojo.data.ItemFileReadStore");
+dojo.module("dojo.data.ItemFileWriteStore", "dojo.data.ItemFileReadStore", function(){
 
 dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, {
 	constructor: function(/* object */ keywordParameters){
@@ -804,3 +803,4 @@
 		 }
 	}
 });
+});

=== modified file 'data/api/Identity.js'
--- data/api/Identity.js	2009-10-07 19:32:22 +0000
+++ data/api/Identity.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.api.Identity");
-dojo.require("dojo.data.api.Read");
+dojo.module("dojo.data.api.Identity", "dojo.data.api.Read", function(){
 
 dojo.declare("dojo.data.api.Identity", dojo.data.api.Read, {
 	//	summary:
@@ -101,3 +100,4 @@
 		}
 	}
 });
+});

=== modified file 'data/api/Notification.js'
--- data/api/Notification.js	2007-10-27 04:54:01 +0000
+++ data/api/Notification.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.api.Notification");
-dojo.require("dojo.data.api.Read");
+dojo.module("dojo.data.api.Notification", "dojo.data.api.Read", function(){
 
 dojo.declare("dojo.data.api.Notification", dojo.data.api.Read, {
 	//	summary:
@@ -113,3 +112,4 @@
 		throw new Error('Unimplemented API: dojo.data.api.Notification.onDelete');
 	}
 });
+});

=== modified file 'data/api/Read.js'
--- data/api/Read.js	2009-10-07 19:32:22 +0000
+++ data/api/Read.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.api.Read");
-dojo.require("dojo.data.api.Request");
+dojo.module("dojo.data.api.Read", "dojo.data.api.Request", function(){
 
 dojo.declare("dojo.data.api.Read", null, {
 	//	summary:
@@ -500,3 +499,4 @@
 		return null;
 	}
 });
+});

=== modified file 'data/api/Request.js'
--- data/api/Request.js	2007-08-09 20:42:47 +0000
+++ data/api/Request.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.data.api.Request");
+dojo.module("dojo.data.api.Request", function(){
 
 dojo.declare("dojo.data.api.Request", null, {
 	//	summary:
@@ -26,3 +26,4 @@
 		throw new Error('Unimplemented API: dojo.data.api.Request.abort');
 	}
 });
+});

=== modified file 'data/api/Write.js'
--- data/api/Write.js	2007-10-27 04:54:01 +0000
+++ data/api/Write.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.api.Write");
-dojo.require("dojo.data.api.Read");
+dojo.module("dojo.data.api.Write", "dojo.data.api.Read", function(){
 
 dojo.declare("dojo.data.api.Write", dojo.data.api.Read, {
 	//	summary:
@@ -220,3 +219,4 @@
 		return false; // boolean
 	}
 });
+});

=== modified file 'data/util/filter.js'
--- data/util/filter.js	2009-10-07 19:32:22 +0000
+++ data/util/filter.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.data.util.filter");
+dojo.module("dojo.data.util.filter", function(){
 
 dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
 	//	summary:  
@@ -63,3 +63,4 @@
 	}
 	
 };
+});

=== modified file 'data/util/simpleFetch.js'
--- data/util/simpleFetch.js	2009-10-07 19:32:22 +0000
+++ data/util/simpleFetch.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.data.util.simpleFetch");
-dojo.require("dojo.data.util.sorter");
+dojo.module("dojo.data.util.simpleFetch", "dojo.data.util.sorter", function(){
 
 dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
 	//	summary:
@@ -84,3 +83,4 @@
 	this._fetchItems(request, _fetchHandler, _errorHandler);
 	return request;	// Object
 };
+});

=== modified file 'data/util/sorter.js'
--- data/util/sorter.js	2009-10-07 19:32:22 +0000
+++ data/util/sorter.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.data.util.sorter");
+dojo.module("dojo.data.util.sorter", function(){
 
 dojo.data.util.sorter.basicComparator = function(	/*anything*/ a, 
 													/*anything*/ b){
@@ -89,3 +89,4 @@
 		return 0; //int  
 	}; // Function
 };
+});

=== modified file 'date.js'
--- date.js	2009-04-13 03:13:47 +0000
+++ date.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,13 @@
-dojo.provide("dojo.date");
-
 /*=====
 dojo.date = {
 	// summary: Date manipulation utilities
 }
 =====*/
 
-dojo.date.getDaysInMonth = function(/*Date*/dateObject){
+dojo.module(
+	"dojo.date",
+	function(date){
+date.getDaysInMonth = function(/*Date*/dateObject){
 	//	summary:
 	//		Returns the number of days in the month used by dateObject
 	var month = dateObject.getMonth();
@@ -15,7 +16,7 @@
 	return days[month]; // Number
 }
 
-dojo.date.isLeapYear = function(/*Date*/dateObject){
+date.isLeapYear = function(/*Date*/dateObject){
 	//	summary:
 	//		Determines if the year of the dateObject is a leap year
 	//	description:
@@ -30,7 +31,7 @@
 }
 
 // FIXME: This is not localized
-dojo.date.getTimezoneName = function(/*Date*/dateObject){
+date.getTimezoneName = function(/*Date*/dateObject){
 	//	summary:
 	//		Get the user's time zone as provided by the browser
 	// dateObject:
@@ -76,7 +77,7 @@
 
 // Utility methods to do arithmetic calculations with Dates
 
-dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
+date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
 	//	summary:
 	//		Compare two date objects by date, time, or both.
 	//	description:
@@ -109,7 +110,7 @@
 	return 0; // int
 };
 
-dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
+date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
 	//	summary:
 	//		Add to a Date in intervals of different size, from milliseconds to years
 	//	date: Date
@@ -202,7 +203,7 @@
 	return sum; // Date
 };
 
-dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
+date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
 	//	summary:
 	//		Get the difference in a specific unit of time (e.g., number of
 	//		months, weeks, days, etc.) between two dates, rounded to the
@@ -336,3 +337,5 @@
 	// Round for fractional values and DST leaps
 	return Math.round(delta); // Number (integer)
 };
+	}
+);

=== modified file 'date/locale.js'
--- date/locale.js	2009-09-18 02:39:52 +0000
+++ date/locale.js	2009-11-20 15:08:05 +0000
@@ -1,13 +1,8 @@
-dojo.provide("dojo.date.locale");
+dojo.module("dojo.date.locale", ["dojo.date", "dojo.cldr.supplemental", "dojo.regexp", "dojo.string", "dojo.i18n"],
+function(){
 
 // Localization methods for Date.   Honor local customs using locale-dependent dojo.cldr data.
 
-dojo.require("dojo.date");
-dojo.require("dojo.cldr.supplemental");
-dojo.require("dojo.regexp");
-dojo.require("dojo.string");
-dojo.require("dojo.i18n");
-
 // Load the bundles containing localization information for
 // names and formats
 dojo.requireLocalization("dojo.cldr", "gregorian");
@@ -15,7 +10,6 @@
 //NOTE: Everything in this module assumes Gregorian calendars.
 // Other calendars will be implemented in separate modules.
 
-(function(){
 	// Format a pattern without literals
 	function formatPattern(dateObject, bundle, options, pattern){
 		return pattern.replace(/([a-z])\1*/ig, function(match){
@@ -570,9 +564,7 @@
 		return "(" + s + ")"; // add capture
 	}).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace.  Need explicit handling of \xa0 for IE.
 }
-})();
 
-(function(){
 var _customFormats = [];
 dojo.date.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
 	// summary:
@@ -597,7 +589,6 @@
 	}, this);
 	return gregorian; /*Object*/
 };
-})();
 
 dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");
 
@@ -661,3 +652,5 @@
 
 	return week; // Number
 };
+
+});

=== modified file 'date/stamp.js'
--- date/stamp.js	2009-10-06 01:39:07 +0000
+++ date/stamp.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,8 @@
-dojo.provide("dojo.date.stamp");
-
+dojo.module(
+	"dojo.date.stamp",
+	function(stamp){
 // Methods to convert dates to or from a wire (string) format using well-known conventions
-
-dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
 	//	summary:
 	//		Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
 	//
@@ -28,7 +28,7 @@
 	// 		by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
 	//		Only years between 100 and 9999 are supported.
 	//
-  	//	formattedString:
+	//	formattedString:
 	//		A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
 	//
 	//	defaultTime:
@@ -97,7 +97,7 @@
 	}
 =====*/
 
-dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
 	//	summary:
 	//		Format a Date object as a string according a subset of the ISO-8601 standard
 	//
@@ -137,3 +137,5 @@
 	}
 	return formattedDate.join('T'); // String
 }
+	}
+);

=== modified file 'dnd/Avatar.js'
--- dnd/Avatar.js	2009-06-15 03:40:58 +0000
+++ dnd/Avatar.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,7 @@
-dojo.provide("dojo.dnd.Avatar");
-
-dojo.require("dojo.dnd.common");
+dojo.module(
+	"dojo.dnd.Avatar",
+	"dojo.dnd.common",
+	function(){
 
 dojo.declare("dojo.dnd.Avatar", null, {
 	// summary:
@@ -103,3 +104,5 @@
 		return this.manager.nodes.length.toString();
 	}
 });
+	}
+);

=== modified file 'dnd/Container.js'
--- dnd/Container.js	2009-08-10 05:12:41 +0000
+++ dnd/Container.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,7 @@
-dojo.provide("dojo.dnd.Container");
-
-dojo.require("dojo.dnd.common");
-dojo.require("dojo.parser");
+dojo.module(
+	"dojo.dnd.Container",
+	["dojo.dnd.common", "dojo.parser"],
+	function(){
 
 /*
 	Container states:
@@ -424,3 +424,5 @@
 		return {node: n, data: data, type: type};
 	};
 };
+	}
+);

=== modified file 'dnd/Manager.js'
--- dnd/Manager.js	2009-06-15 03:40:58 +0000
+++ dnd/Manager.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,7 @@
-dojo.provide("dojo.dnd.Manager");
-
-dojo.require("dojo.dnd.common");
-dojo.require("dojo.dnd.autoscroll");
-dojo.require("dojo.dnd.Avatar");
-
+dojo.module(
+	"dojo.dnd.Manager",
+	["dojo.dnd.common", "dojo.dnd.autoscroll", "dojo.dnd.Avatar"],
+	function(){
 dojo.declare("dojo.dnd.Manager", null, {
 	// summary:
 	//		the manager of DnD operations (usually a singleton)
@@ -207,3 +205,6 @@
 	}
 	return dojo.dnd._manager;	// Object
 };
+
+	}
+);

=== modified file 'dnd/Moveable.js'
--- dnd/Moveable.js	2009-06-15 03:40:58 +0000
+++ dnd/Moveable.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,6 @@
-dojo.provide("dojo.dnd.Moveable");
-
-dojo.require("dojo.dnd.Mover");
+dojo.module("dojo.dnd.Moveable",
+	"dojo.dnd.Mover",
+	function(){
 
 /*=====
 dojo.declare("dojo.dnd.__MoveableArgs", [], {
@@ -165,3 +165,5 @@
 		// default implementation does nothing
 	}
 });
+	}
+);

=== modified file 'dnd/Mover.js'
--- dnd/Mover.js	2009-06-15 03:40:58 +0000
+++ dnd/Mover.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,7 @@
-dojo.provide("dojo.dnd.Mover");
+dojo.module("dojo.dnd.Mover",
 
-dojo.require("dojo.dnd.common");
-dojo.require("dojo.dnd.autoscroll");
+["dojo.dnd.common","dojo.dnd.autoscroll"],
+function(){
 
 dojo.declare("dojo.dnd.Mover", null, {
 	constructor: function(node, e, host){
@@ -104,3 +104,4 @@
 		this.events = this.node = this.host = null;
 	}
 });
+});

=== modified file 'dnd/Selector.js'
--- dnd/Selector.js	2009-08-10 01:16:09 +0000
+++ dnd/Selector.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,8 @@
-dojo.provide("dojo.dnd.Selector");
+dojo.module("dojo.dnd.Selector",
 
-dojo.require("dojo.dnd.common");
-dojo.require("dojo.dnd.Container");
+["dojo.dnd.common",
+"dojo.dnd.Container"],
+function(){
 
 /*
 	Container item states:
@@ -323,3 +324,4 @@
 		return this;	// self
 	}
 });
+});

=== modified file 'dnd/Source.js'
--- dnd/Source.js	2009-08-04 17:31:32 +0000
+++ dnd/Source.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,8 @@
-dojo.provide("dojo.dnd.Source");
+dojo.module("dojo.dnd.Source",
 
-dojo.require("dojo.dnd.Selector");
-dojo.require("dojo.dnd.Manager");
+["dojo.dnd.Selector",
+"dojo.dnd.Manager"],
+function(){
 
 /*
 	Container property:
@@ -535,3 +536,4 @@
 		return new dojo.dnd.AutoSource(node, params);
 	}
 });
+});

=== modified file 'dnd/TimedMoveable.js'
--- dnd/TimedMoveable.js	2009-06-15 03:40:58 +0000
+++ dnd/TimedMoveable.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,6 @@
-dojo.provide("dojo.dnd.TimedMoveable");
+dojo.module("dojo.dnd.TimedMoveable",
 
-dojo.require("dojo.dnd.Moveable");
+"dojo.dnd.Moveable",
 
 /*=====
 dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
@@ -11,7 +11,7 @@
 });
 =====*/
 
-(function(){
+function(){
 	// precalculate long expressions
 	var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
 		
@@ -67,4 +67,4 @@
 			}
 		}
 	});
-})();
+});

=== modified file 'dnd/autoscroll.js'
--- dnd/autoscroll.js	2009-08-04 17:31:32 +0000
+++ dnd/autoscroll.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,6 @@
-dojo.provide("dojo.dnd.autoscroll");
+dojo.module(
+	"dojo.dnd.autoscroll",
+	function(){
 
 dojo.dnd.getViewport = function(){
 	// summary:
@@ -103,3 +105,5 @@
 	}
 	dojo.dnd.autoScroll(e);
 };
+	}
+);

=== modified file 'dnd/common.js'
--- dnd/common.js	2009-06-15 03:40:58 +0000
+++ dnd/common.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo.dnd.common");
-
+dojo.module(
+	"dojo.dnd.common",
+	function(){
 dojo.dnd._uniqueId = 0;
 dojo.dnd.getUniqueId = function(){
 	// summary:
@@ -22,3 +23,5 @@
 	}
 	return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0;	// Boolean
 };
+	}
+);

=== modified file 'dnd/move.js'
--- dnd/move.js	2009-06-15 03:40:58 +0000
+++ dnd/move.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,7 @@
-dojo.provide("dojo.dnd.move");
-
-dojo.require("dojo.dnd.Mover");
-dojo.require("dojo.dnd.Moveable");
+dojo.module("dojo.dnd.move",
+["dojo.dnd.Mover",
+"dojo.dnd.Moveable"],
+function(){
 
 /*=====
 dojo.declare("dojo.dnd.move.__constrainedMoveableArgs", [dojo.dnd.__MoveableArgs], {
@@ -241,3 +241,4 @@
 dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
 dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover;
 dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover;
+});

=== modified file 'dojo.js'
--- dojo.js	2008-12-12 20:25:55 +0000
+++ dojo.js	2009-11-20 15:08:05 +0000
@@ -46,6 +46,8 @@
 //		Regards,
 //		The Dojo Team
 
+var dojo, djConfig;
+
 if(typeof dojo == "undefined"){
 	// only try to load Dojo if we don't already have one. Dojo always follows
 	// a "first Dojo wins" policy.
@@ -196,6 +198,7 @@
 			script.src = src;
 			lastRoot = script;
 		}
+
 		for(var x=0; x < tmps.length; x++){
 			if(isRhino || isSpidermonkey || (this.Jaxer && this.Jaxer.isOnServer)){
 				load(tmps[x]);

=== modified file 'fx.js'
--- fx.js	2009-10-13 14:05:11 +0000
+++ fx.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,12 @@
-dojo.provide("dojo.fx");
-dojo.require("dojo.fx.Toggler"); // FIXME: remove this back-compat require in 2.0 
 /*=====
 dojo.fx = {
 	// summary: Effects library on top of Base animations
 };
 =====*/
-(function(){
-	
+dojo.module(
+	"dojo.fx",
+	"dojo.fx.Toggler", // FIXME: remove this back-compat require in 2.0 
+	function(){
 	var d = dojo, 
 		_baseObj = {
 			_fire: function(evt, args){
@@ -390,4 +390,5 @@
 		return anim; // dojo.Animation
 	}
 
-})();
\ No newline at end of file
+	}
+);

=== modified file 'fx/Toggler.js'
--- fx/Toggler.js	2009-09-18 12:51:01 +0000
+++ fx/Toggler.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("dojo.fx.Toggler");
-
+dojo.module(
+	"dojo.fx.Toggler",
+	function(){
 dojo.declare("dojo.fx.Toggler", null, {
 	// summary:
 	//		A simple `dojo.Animation` toggler API.
@@ -94,3 +95,5 @@
 		return this.hideAnim.play(delay || 0);
 	}
 });
+	}
+);

=== modified file 'fx/easing.js'
--- fx/easing.js	2009-04-07 22:22:23 +0000
+++ fx/easing.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.fx.easing");
+dojo.module("dojo.fx.easing", function(){
 
 dojo.fx.easing = {
 	// summary: 
@@ -273,3 +273,4 @@
 		return (dojo.fx.easing.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal
 	}
 };
+});

=== modified file 'gears.js'
--- gears.js	2008-07-07 01:04:26 +0000
+++ gears.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,7 @@
-dojo.provide("dojo.gears");
-
-dojo.gears._gearsObject = function(){
+dojo.module(
+	"dojo.gears",
+	function(gears){
+gears._gearsObject = function(){
 	// summary: 
 	//		factory method to get a Google Gears plugin instance to
 	//		expose in the browser runtime environment, if present
@@ -49,4 +50,6 @@
 // see if we have Google Gears installed, and if
 // so, make it available in the runtime environment
 // and in the Google standard 'google.gears' global object
-dojo.gears.available = (!!dojo.gears._gearsObject())||0;
+gears.available = (!!dojo.gears._gearsObject())||0;
+	}
+);

=== modified file 'hash.js'
--- hash.js	2009-10-23 15:08:10 +0000
+++ hash.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,3 @@
-dojo.provide("dojo.hash");
 //TODOC: where does this go?
 // summary:
 //		Methods for monitoring and updating the hash in the browser URL.
@@ -10,7 +9,9 @@
 //			// do something based on the hash value.
 // 		}
 
-(function(){
+dojo.module(
+	"dojo.hash",
+	function(){
 	dojo.hash = function(/* String? */ hash, /* Boolean? */ replace){
 		//	summary:
 		//		Gets or sets the hash string.
@@ -220,4 +221,5 @@
 			// else non-supported browser, do nothing.
 		}
 	});
-})();
\ No newline at end of file
+	}
+);

=== modified file 'html.js'
--- html.js	2009-09-22 07:06:24 +0000
+++ html.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,8 @@
-dojo.provide("dojo.html");
-
-// the parser might be needed..
-dojo.require("dojo.parser"); 
-
-(function(){ // private scope, sort of a namespace
+dojo.module(
+	"dojo.html",
+	// the parser might be needed..
+	"dojo.parser",
+	function(){ // private scope, sort of a namespace
 
 	// idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes
 	var idCounter = 0, 
@@ -316,4 +315,5 @@
 			return op.set();
 		}
 	};
-})();
+	}
+);

=== modified file 'i18n.js'
--- i18n.js	2008-07-06 23:21:55 +0000
+++ i18n.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,11 @@
-dojo.provide("dojo.i18n");
-
+dojo.module("dojo.i18n", function(i18n){
 /*=====
 dojo.i18n = {
 	// summary: Utility classes to enable loading of resources for internationalization (i18n)
 };
 =====*/
 
-dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
 	//	summary:
 	//		Returns an Object containing the localization for a given resource
 	//		bundle in a package, matching the specified locale.
@@ -59,7 +58,7 @@
 	throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
 };
 
-dojo.i18n.normalizeLocale = function(/*String?*/locale){
+i18n.normalizeLocale = function(/*String?*/locale){
 	//	summary:
 	//		Returns canonical form of locale, as used by Dojo.
 	//
@@ -75,7 +74,7 @@
 	return result; // String
 };
 
-dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
 	//	summary:
 	//		See dojo.requireLocalization()
 	//	description:
@@ -126,7 +125,7 @@
 	}
 
 	if(!localizedBundle){
-		bundle = dojo["provide"](bundlePackage);
+		bundle = dojo._loadedModules[bundlePackage] = dojo.getObject(bundlePackage, true)
 		var syms = dojo._getModuleSymbols(moduleName);
 		var modpath = syms.concat("nls").join("/");
 		var parent;
@@ -137,18 +136,25 @@
 			var loaded = false;
 			if(!dojo._loadedModules[translationPackage]){
 				// Mark loaded whether it's found or not, so that further load attempts will not be made
-				dojo["provide"](translationPackage);
+				dojo._loadedModules[translationPackage] = dojo.getObject(translationPackage, true)
 				var module = [modpath];
 				if(loc != "ROOT"){module.push(loc);}
 				module.push(bundleName);
 				var filespec = module.join("/") + '.js';
-				loaded = dojo._loadPath(filespec, null, function(hash){
-					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
+				var uri = ((filespec.charAt(0) == '/' || filespec.match(/^\w+:/)) ? "" : dojo.baseUrl) + filespec;
+				var content = dojo._getText(uri, true);
+				if(content){
+					content = '(' + content + ')';
+					if(!dojo.isIE){ content += "\r\n//@ sourceURL=" + uri; } // debugging assist for Firebug
+					var hash = dojo["eval"](content);
 					var clazz = function(){};
 					clazz.prototype = parent;
 					bundle[jsLoc] = new clazz();
 					for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
-				});
+					loaded = true;
+				}else{
+					loaded = false;
+				}
 			}else{
 				loaded = true;
 			}
@@ -173,7 +179,6 @@
 	}
 };
 
-(function(){
 	// If other locales are used, dojo.requireLocalization should load them as
 	// well, by default. 
 	// 
@@ -196,9 +201,16 @@
 			}
 		};
 	}
-})();
-
-dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
+
+i18n.module = function(/*String*/ moduleName, /*Object?*/ hash){
+	var module = dojo.getObject(moduleName, true);
+
+	if(hash){
+		dojo.mixin(module, hash);
+	}
+};
+
+i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
 	//	summary:
 	//		A helper method to assist in searching for locale-based resources.
 	//		Will iterate through the variants of a particular locale, either up
@@ -222,7 +234,7 @@
 	}
 };
 
-dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
+i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
 	//	summary:
 	//		Load built, flattened resource bundles, if available for all
 	//		locales used in the page. Only called by built layer files.
@@ -245,3 +257,5 @@
 		preload(extra[i]);
 	}
 };
+
+});

=== modified file 'io/iframe.js'
--- io/iframe.js	2009-10-04 17:29:23 +0000
+++ io/iframe.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.io.iframe");
+dojo.module("dojo.io.iframe", function(){
 
 /*=====
 dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, {
@@ -398,3 +398,4 @@
 		ioArgs._finished = true;
 	}
 }
+});

=== modified file 'io/script.js'
--- io/script.js	2009-04-29 15:42:43 +0000
+++ io/script.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.io.script");
+dojo.module("dojo.io.script", function(){
 
 /*=====
 dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, {
@@ -34,7 +34,6 @@
 	}
 });
 =====*/
-;(function(){
 	var loadEvent = dojo.isIE ? "onreadystatechange" : "load",
 		readyRegExp = /complete|loaded/;
 
@@ -246,4 +245,4 @@
 			this.ioArgs.json = json;
 		}
 	}
-})();
\ No newline at end of file
+});

=== modified file 'jaxer.js'
--- jaxer.js	2008-03-02 07:02:14 +0000
+++ jaxer.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.jaxer");
+dojo.module("dojo.jaxer", function(){
 
 if(typeof print == "function"){
 	console.debug = Jaxer.Log.debug;
@@ -9,3 +9,5 @@
 }
 
 onserverload = dojo._loadInit;
+
+});

=== modified file 'number.js'
--- number.js	2009-09-18 00:17:13 +0000
+++ number.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,6 @@
-dojo.provide("dojo.number");
+dojo.module("dojo.number", ["dojo.i18n", "dojo.string", "dojo.regexp"], function(number){
 
-dojo.require("dojo.i18n");
 dojo.requireLocalization("dojo.cldr", "number");
-dojo.require("dojo.string");
-dojo.require("dojo.regexp");
 
 
 /*=====
@@ -564,3 +561,5 @@
 	// integer RE
 	return signRE + numberRE; // String
 }
+
+});

=== modified file 'parser.js'
--- parser.js	2009-10-24 20:26:29 +0000
+++ parser.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,7 @@
-dojo.provide("dojo.parser");
-dojo.require("dojo.date.stamp");
-
+dojo.module(
+	"dojo.parser",
+	"dojo.date.stamp",
+	function(){
 dojo.parser = new function(){
 	// summary: The Dom/Widget parsing package
 
@@ -305,7 +306,6 @@
 //Register the parser callback. It should be the first callback
 //after the a11y test.
 
-(function(){
 	var parseRunner = function(){ 
 		if(dojo.config.parseOnLoad){
 			dojo.parser.parse(); 
@@ -318,4 +318,5 @@
 	}else{
 		dojo._loaders.unshift(parseRunner);
 	}
-})();
+	}
+);

=== modified file 'regexp.js'
--- regexp.js	2009-01-03 20:55:36 +0000
+++ regexp.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,12 @@
-dojo.provide("dojo.regexp");
-
 /*=====
 dojo.regexp = {
 	// summary: Regular expressions and Builder resources
 };
 =====*/
-
-dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
+dojo.module(
+	"dojo.regexp",
+	function(regexp){
+regexp.escapeString = function(/*String*/str, /*String?*/except){
 	//	summary:
 	//		Adds escape sequences for special characters in regular expressions
 	// except:
@@ -20,7 +20,7 @@
 	}); // String
 }
 
-dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
+regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
 	//	summary:
 	//		Builds a regular expression that groups subexpressions
 	//	description:
@@ -54,7 +54,7 @@
 	return dojo.regexp.group(b.join("|"), nonCapture); // String
 }
 
-dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
+regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
 	// summary:
 	//		adds group match to expression
 	// nonCapture:
@@ -62,3 +62,5 @@
 	//		by regular expression. 
 	return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
 }
+	}
+);

=== modified file 'robot.js'
--- robot.js	2009-10-07 15:47:12 +0000
+++ robot.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,7 @@
-dojo.provide("dojo.robot");
+dojo.module("dojo.robot", "doh.robot", function(){
+
 dojo.experimental("dojo.robot");
-dojo.require("doh.robot");
 
-(function(){
 // users who use doh+dojo get the added convenience of dojo.mouseMoveAt,
 // instead of computing the absolute coordinates of their elements themselves
 dojo.mixin(doh.robot,{
@@ -97,4 +96,4 @@
 	}
 });
 
-})();
+});

=== modified file 'robotx.js'
--- robotx.js	2009-03-23 12:05:47 +0000
+++ robotx.js	2009-11-20 15:08:05 +0000
@@ -1,12 +1,11 @@
-dojo.provide("dojo.robotx");
-dojo.require("dojo.robot");
+dojo.module("dojo.robotx", "dojo.robot", function(){
+
 dojo.experimental("dojo.robotx");
 
 // loads an external app into an iframe and points dojo.doc to the iframe document, allowing the robot to control it
 // to use: set robotURL in djConfig to the URL you want to load
 // dojo.require this file
 
-(function(){
 // have to wait for test page to load before testing!
 doh.robot._runsemaphore.lock.push("dojo.robotx.lock");
 
@@ -126,4 +125,4 @@
 
 });
 
-})();
+});

=== modified file 'rpc/JsonService.js'
--- rpc/JsonService.js	2007-10-31 10:00:46 +0000
+++ rpc/JsonService.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,4 @@
-dojo.provide("dojo.rpc.JsonService");
-dojo.require("dojo.rpc.RpcService");
+dojo.module("dojo.rpc.JsonService", "dojo.rpc.RpcService", function(){
 
 dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, {
 		bustCache: false,
@@ -77,3 +76,4 @@
 		}
 	}
 );
+});

=== modified file 'rpc/JsonpService.js'
--- rpc/JsonpService.js	2008-10-01 18:35:37 +0000
+++ rpc/JsonpService.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,4 @@
-dojo.provide("dojo.rpc.JsonpService");
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.io.script");
+dojo.module("dojo.rpc.JsonpService", ["dojo.rpc.RpcService", "dojo.io.script"], function(){
 
 dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, {
 	// summary:
@@ -59,3 +57,4 @@
 		return params;
 	}
 });
+});

=== modified file 'rpc/RpcService.js'
--- rpc/RpcService.js	2009-02-10 04:36:25 +0000
+++ rpc/RpcService.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("dojo.rpc.RpcService");
+dojo.module("dojo.rpc.RpcService", function(){
 
 dojo.declare("dojo.rpc.RpcService", null, {
 	constructor: function(args){
@@ -166,3 +166,4 @@
 		this.smd = object;
 	}
 });
+});

=== modified file 'string.js'
--- string.js	2009-05-11 23:03:21 +0000
+++ string.js	2009-11-20 15:08:05 +0000
@@ -1,11 +1,12 @@
-dojo.provide("dojo.string");
-
 /*=====
 dojo.string = { 
 	// summary: String utilities for Dojo
 };
 =====*/
 
+dojo.module(
+	"dojo.string",
+	function(){
 dojo.string.rep = function(/*String*/str, /*Integer*/num){
 	//	summary:
 	//		Efficiently replicate a string `n` times.
@@ -151,3 +152,5 @@
 		}
 		return str;
 	};
+	}
+);

=== modified file 'tests/AdapterRegistry.js'
--- tests/AdapterRegistry.js	2007-05-04 06:45:43 +0000
+++ tests/AdapterRegistry.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,4 @@
-dojo.provide("tests.AdapterRegistry");
-dojo.require("dojo.AdapterRegistry");
-
-doh.register("tests.AdapterRegistry", 
-	[
+doh.module("tests.AdapterRegistry", "dojo.AdapterRegistery", [
 		function ctor(t){
 			var taa = new dojo.AdapterRegistry();
 			t.is(0, taa.pairs.length);

=== modified file 'tests/DeferredList.js'
--- tests/DeferredList.js	2008-10-01 18:35:37 +0000
+++ tests/DeferredList.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.DeferredList");
-
-dojo.require("dojo.DeferredList");
-
-doh.register("tests.DeferredList", 
-	[
+doh.module("tests.DeferredList", "dojo.DeferredList", [
 		function callback(t){
 			var d1 = new dojo.Deferred();
 			var d2 = new dojo.Deferred();
@@ -100,103 +95,3 @@
         }
 	]
 );
-dojo.provide("tests.DeferredList");
-
-dojo.require("dojo.DeferredList");
-
-doh.register("tests.DeferredList", 
-	[
-		function callback(t){
-			var d1 = new dojo.Deferred();
-			var d2 = new dojo.Deferred();
-            var dl = new dojo.DeferredList([d1, d2]);
-            var fired = false;
-			dl.addCallback(function(res){
-				doh.debug("debug from dojo.DeferredList callback");
-				return res;
-			});
-			dl.addCallback(function(res){
-                t.assertTrue(res.length == 2);
-                t.assertTrue(res[0][0]);
-                t.assertEqual(res[0][1], "foo");
-                t.assertTrue(res[1][0]);
-                t.assertEqual(res[1][1], "bar");
-                fired = true;
-				return res;
-			});
-			d1.callback("foo");
-			d2.callback("bar");
-            t.assertTrue(fired);
-		},
-
-		function errback(t){
-			var d1 = new dojo.Deferred();
-			var d2 = new dojo.Deferred();
-            var dl = new dojo.DeferredList([d1, d2]);
-            var fired = false;
-            var e1 = new Error("foo");
-            var e2 = new Error("bar");
-
-			dl.addCallback(function(res){
-				doh.debug("debug from dojo.DeferredList callback");
-				return res;
-			});
-			dl.addCallback(function(res){
-                t.assertTrue(res.length == 2);
-                t.assertTrue(!res[0][0]);
-
-                t.assertEqual(res[0][1], e1);
-                t.assertTrue(!res[1][0]);
-                t.assertEqual(res[1][1], e2);
-                fired = true;
-				return res;
-			});
-			d1.errback(e1);
-			d2.errback(e2);
-            t.assertTrue(fired);
-		},
-
-
-		function mixed(t){
-			var d1 = new dojo.Deferred();
-			var d2 = new dojo.Deferred();
-            var dl = new dojo.DeferredList([d1, d2]);
-            var fired = false;
-            var e = new Error("foo");
-
-			dl.addCallback(function(res){
-				doh.debug("debug from dojo.DeferredList callback");
-				return res;
-			});
-			dl.addCallback(function(res){
-                t.assertTrue(res.length == 2);
-                t.assertTrue(!res[0][0]);
-
-                t.assertEqual(res[0][1], e);
-                t.assertTrue(res[1][0]);
-                t.assertEqual(res[1][1], "bar");
-                fired = true;
-				return res;
-			});
-			d1.errback(e);
-			d2.callback("bar");
-            t.assertTrue(fired);
-		}, 
-
-        function gather(t){
-			var d1 = new dojo.Deferred();
-			var d2 = new dojo.Deferred();
-            var dl = dojo.DeferredList.prototype.gatherResults([d1, d2]);
-            var fired = false;
-			dl.addCallback(function(res){
-                t.assertEqual(res[0], "foo");
-                t.assertEqual(res[1], "bar");
-                fired = true;
-				return res;
-			});
-			d1.callback("foo");
-			d2.callback("bar");
-            t.assertTrue(fired);
-        }
-	]
-);

=== modified file 'tests/NodeList-manipulate.js'
--- tests/NodeList-manipulate.js	2009-09-30 15:47:23 +0000
+++ tests/NodeList-manipulate.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.NodeList-manipulate");
+doh.module("tests.NodeList-manipulate", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.NodeList-manipulate", dojo.moduleUrl("tests", "NodeList-manipulate.html"));
 }
+});

=== modified file 'tests/NodeList-traverse.js'
--- tests/NodeList-traverse.js	2009-09-30 15:47:23 +0000
+++ tests/NodeList-traverse.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.NodeList-traverse");
+doh.module("tests.NodeList-traverse", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.NodeList-traverse", dojo.moduleUrl("tests", "NodeList-traverse.html"));
 }
+});

=== modified file 'tests/_base.js'
--- tests/_base.js	2009-03-22 00:49:21 +0000
+++ tests/_base.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,5 @@
 var testGlobal = this;
 try{
-	dojo.provide("tests._base");
 	testGlobal = dojo.global;
 }catch(e){ }
 
@@ -106,29 +105,24 @@
 	}
 }
 
-try{
-	// go grab the others
-	dojo.require("tests._base._loader.bootstrap");
-	dojo.require("tests._base._loader.loader");
-	dojo.platformRequire({
-		browser: ["tests._base._loader.hostenv_browser"],
-		rhino: ["tests._base._loader.hostenv_rhino"],
-		spidermonkey: ["tests._base._loader.hostenv_spidermonkey"]
-	});
-	dojo.require("tests._base.array");
-	dojo.require("tests._base.Color");
-	dojo.require("tests._base.lang");
-	dojo.require("tests._base.declare");
-	dojo.require("tests._base.connect");
-	dojo.require("tests._base.Deferred");
-	dojo.require("tests._base.json");
-	dojo.require("tests._base.object");
+doh.module("tests._base", [
+	"tests._base._loader.bootstrap",
+	"tests._base._loader.loader",
+	[dojo.isBrowser, "tests._base._loader.hostenv_browser"],
+	[dojo.isRhino, "tests._base._loader.hostenv_rhino"],
+	[dojo.isSpidermonkey, "tests._base._loader.hostenv_spidermonkey"],
+	"tests._base.array",
+	"tests._base.Color",
+	"tests._base.lang",
+	"tests._base.declare",
+	"tests._base.connect",
+	"tests._base.Deferred",
+	"tests._base.json",
+	"tests._base.object",
 	// FIXME: add test includes for the rest of the Dojo Base groups here
-	dojo.requireIf(dojo.isBrowser, "tests._base.html");
-	dojo.requireIf(dojo.isBrowser, "tests._base.fx");
-	dojo.requireIf(dojo.isBrowser, "tests._base.query");
-	dojo.requireIf(dojo.isBrowser, "tests._base.xhr");
-	dojo.requireIf(dojo.isBrowser, "tests._base.window");
-}catch(e){
-	doh.debug(e);
-}
+	[dojo.isBrowser, "tests._base.html"],
+	[dojo.isBrowser, "tests._base.fx"],
+	[dojo.isBrowser, "tests._base.query"],
+	[dojo.isBrowser, "tests._base.xhr"],
+	[dojo.isBrowser, "tests._base.window"]
+]);

=== modified file 'tests/_base/Color.js'
--- tests/_base/Color.js	2007-07-18 01:11:12 +0000
+++ tests/_base/Color.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,5 @@
-dojo.provide("tests._base.Color");
+doh.module("tests._base.Color", function(){
 
-(function(){
 	var white  = dojo.colorFromString("white").toRgba();
 	var maroon = dojo.colorFromString("maroon").toRgba();
 	var verifyColor = function(t, source, expected){
@@ -25,4 +24,4 @@
 			function testColor12(t){ verifyColor(t, dojo.blendColors(new dojo.Color("black"), new dojo.Color("white"), 0.5), [128, 128, 128, 1]); }
 		]
 	);
-})();
+});

=== modified file 'tests/_base/Deferred.js'
--- tests/_base/Deferred.js	2009-10-11 03:06:36 +0000
+++ tests/_base/Deferred.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,4 @@
-dojo.provide("tests._base.Deferred");
-
-doh.register("tests._base.Deferred", 
-	[
-
+doh.module("tests._base.Deferred", [
 		function callback(t){
 			var nd = new dojo.Deferred();
 			var cnt = 0;

=== modified file 'tests/_base/_loader/bootstrap.js'
--- tests/_base/_loader/bootstrap.js	2009-08-22 01:58:38 +0000
+++ tests/_base/_loader/bootstrap.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base._loader.bootstrap");
-
-tests.register("tests._base._loader.bootstrap", 
-	[
+doh.module("tests._base._loader.bootstrap", [
 
 		function hasConsole(t){
 			t.assertTrue("console" in dojo.global);

=== modified file 'tests/_base/_loader/hostenv_browser.js'
--- tests/_base/_loader/hostenv_browser.js	2007-04-08 04:53:58 +0000
+++ tests/_base/_loader/hostenv_browser.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base._loader.hostenv_browser");
-
-tests.register("tests._base._loader.hostenv_browser", 
-	[
+doh.module("tests._base._loader.hostenv_browser", [
 		function getText(t){
 			var filePath = dojo.moduleUrl("tests._base._loader", "getText.txt");
 			var text = dojo._getText(filePath);

=== modified file 'tests/_base/_loader/loader.js'
--- tests/_base/_loader/loader.js	2008-04-08 04:51:53 +0000
+++ tests/_base/_loader/loader.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base._loader.loader");
-
-tests.register("tests._base._loader.loader", 
-	[
+doh.module("tests._base._loader.loader", [
 		function baseUrl(t){
 			var originalBaseUrl = dojo.config["baseUrl"] || "./";
 

=== modified file 'tests/_base/array.js'
--- tests/_base/array.js	2008-06-18 00:29:26 +0000
+++ tests/_base/array.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base.array");
-
-tests.register("tests._base.array", 
-	[
+doh.module("tests._base.array", [
 		function testIndexOf(t){
 			var foo = [128, 256, 512];
 			var bar = ["aaa", "bbb", "ccc"];

=== modified file 'tests/_base/connect.js'
--- tests/_base/connect.js	2007-08-18 23:43:00 +0000
+++ tests/_base/connect.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("tests._base.connect");
+doh.module("tests._base.connect", function(){
 
 hub = function(){
 }
@@ -219,3 +219,4 @@
 		}
 	]
 );
+});

=== modified file 'tests/_base/declare.js'
--- tests/_base/declare.js	2009-09-27 18:54:51 +0000
+++ tests/_base/declare.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base.declare");
-
-tests.register("tests._base.declare",
-	[
+doh.module("tests._base.declare", [
 		function smokeTest(t){
 			dojo.declare("tests._base.declare.tmp");
 			var tmp = new tests._base.declare.tmp();

=== modified file 'tests/_base/fx.js'
--- tests/_base/fx.js	2007-05-24 20:16:13 +0000
+++ tests/_base/fx.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests._base.fx");
+doh.module("tests._base.fx", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests._base.fx", dojo.moduleUrl("tests", "_base/fx.html"), 15000);
 }
+});

=== modified file 'tests/_base/html.js'
--- tests/_base/html.js	2009-07-28 22:14:01 +0000
+++ tests/_base/html.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("tests._base.html");
+doh.module("tests._base.html", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests._base.html", dojo.moduleUrl("tests", "_base/html.html"), 15000);
 	doh.registerUrl("tests._base.html_id", dojo.moduleUrl("tests", "_base/html_id.html"), 15000);
@@ -10,3 +10,4 @@
 	doh.registerUrl("tests._base.html_isBodyLtr", dojo.moduleUrl("tests", "_base/html_isBodyLtr.html"), 35000);
 	doh.registerUrl("tests._base.html_docScroll", dojo.moduleUrl("tests", "_base/html_docScroll.html"), 35000);
 }
+});

=== modified file 'tests/_base/json.js'
--- tests/_base/json.js	2008-02-02 04:47:41 +0000
+++ tests/_base/json.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base.json");
-
-tests.register("tests._base.json", 
-	[
+doh.module("tests._base.json", [
 		//Not testing dojo.toJson() on its own since Rhino will output the object properties in a different order.
 		//Still valid json, but just in a different order than the source string.
 

=== modified file 'tests/_base/lang.js'
--- tests/_base/lang.js	2009-10-26 05:19:24 +0000
+++ tests/_base/lang.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base.lang");
-
-tests.register("tests._base.lang", 
-	[
+doh.module("tests._base.lang", [
 		function mixin(t){
 			t.assertEqual("object", typeof dojo.mixin());
 			t.assertEqual("object", typeof dojo.mixin(undefined));
@@ -276,4 +273,4 @@
 			t.is("Hello, Robert Cringely!", s4);
 		}
 	]
-);
\ No newline at end of file
+);

=== modified file 'tests/_base/object.js'
--- tests/_base/object.js	2009-09-30 15:47:23 +0000
+++ tests/_base/object.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,4 @@
-dojo.provide("tests._base.object");
+doh.module("tests._base.object", function(){
 
 // setup the test object
 dojo.zoo = { a:1, c: { d:1 } };
@@ -40,3 +40,5 @@
 
 	]
 );
+
+});

=== modified file 'tests/_base/query.js'
--- tests/_base/query.js	2007-04-26 17:18:37 +0000
+++ tests/_base/query.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("tests._base.query");
+doh.module("tests._base.query", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests._base.query", dojo.moduleUrl("tests", "_base/query.html"));
 	doh.registerUrl("tests._base.NodeList", dojo.moduleUrl("tests", "_base/NodeList.html"));
 }
+});

=== modified file 'tests/_base/window.js'
--- tests/_base/window.js	2009-03-03 00:09:57 +0000
+++ tests/_base/window.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests._base.window");
-
-tests.register("tests._base.window", 
-	[
+doh.module("tests._base.window", [
 		function withGlobal(t){
 			var arg1, arg2, innerThis, innerGlobal, innerDoc, finished,
 				globalObj = {test: "myGlobal", document: {test: "myDoc"}},

=== modified file 'tests/_base/xhr.js'
--- tests/_base/xhr.js	2007-04-26 17:18:37 +0000
+++ tests/_base/xhr.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests._base.xhr");
+doh.module("tests._base.xhr", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests._base.xhr", dojo.moduleUrl("tests", "_base/xhr.html"));
 }
+});

=== modified file 'tests/back-hash.js'
--- tests/back-hash.js	2008-10-01 18:35:37 +0000
+++ tests/back-hash.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.back-hash");
-
-dojo.require("dojo.back");
-
-(function(){
-	tests.register("tests.back.hash", [
+doh.module("tests.back-hash", "dojo.back", [
 		function getAndSet(t) {
 			var cases = [
 				"test",
@@ -26,4 +21,3 @@
 			dojo.forEach(cases, verify);
 		}
 	]);
-})();

=== modified file 'tests/behavior.html'
--- tests/behavior.html	2008-03-17 13:05:26 +0000
+++ tests/behavior.html	2009-11-20 15:08:05 +0000
@@ -12,6 +12,8 @@
 			dojo.require("doh.runner");
 			dojo.require("dojo.behavior");
 
+			// no behaviors should be executed when onload fires
+			dojo.addOnLoad(function(){
 			var applyCount = 0;
 
 			var behaviorObj = {
@@ -28,8 +30,6 @@
 			topicCount = 0;
 			dojo.subscribe("/foo", function(){ topicCount++; });
 
-			// no behaviors should be executed when onload fires
-			dojo.addOnLoad(function(){
 				doh.register("t", 
 					[
 						function add(t){

=== modified file 'tests/behavior.js'
--- tests/behavior.js	2007-05-20 00:39:21 +0000
+++ tests/behavior.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.behavior");
+doh.module("tests.behavior", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.behavior", dojo.moduleUrl("tests", "behavior.html"));
 }
+});

=== modified file 'tests/cache.js'
--- tests/cache.js	2009-09-30 15:47:23 +0000
+++ tests/cache.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.cache");
-
-dojo.require("dojo.cache");
-
-tests.register("tests.cache", 
-	[
+doh.module("tests.cache", "dojo.cache", [
 		{
 			runTest: function(t){
 				var expected = "<h1>Hello World</h1>";

=== modified file 'tests/cldr.js'
--- tests/cldr.js	2007-05-28 01:51:40 +0000
+++ tests/cldr.js	2009-11-20 15:08:05 +0000
@@ -1,10 +1,4 @@
-dojo.provide("tests.cldr");
-
-dojo.require("dojo.cldr.supplemental");
-dojo.require("dojo.cldr.monetary");
-
-tests.register("tests.cldr", 
-	[
+doh.module("tests.cldr", ["dojo.cldr.supplemental", "dojo.cldr.monetary"], [
 		function test_date_getWeekend(t){
 			t.is(6, dojo.cldr.supplemental.getWeekend('en-us').start);
 			t.is(0, dojo.cldr.supplemental.getWeekend('en-us').end);

=== modified file 'tests/colors.js'
--- tests/colors.js	2007-07-18 01:11:12 +0000
+++ tests/colors.js	2009-11-20 15:08:05 +0000
@@ -1,7 +1,4 @@
-dojo.provide("tests.colors");
-dojo.require("dojo.colors");
-
-(function(){
+doh.module("tests.colors", "dojo.colors", function(){
 	var verifyColor = function(t, source, expected){
 		var source   = new dojo.Color(source);
 		var expected = new dojo.Color(expected);
@@ -41,4 +38,4 @@
 			function testColorEx26(t){ verifyColor(t, dojo.colors.makeGrey(2, 0.3), [2, 2, 2, 0.3]); }
 		]
 	);
-})();
+});

=== modified file 'tests/cookie.js'
--- tests/cookie.js	2007-04-25 01:16:52 +0000
+++ tests/cookie.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.cookie");
+doh.module("tests.cookie", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.cookie", dojo.moduleUrl("tests", "cookie.html"));
 }
+});

=== modified file 'tests/currency.js'
--- tests/currency.js	2008-07-25 02:19:29 +0000
+++ tests/currency.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.currency");
-
-dojo.require("dojo.currency");
-
-tests.register("tests.currency", 
-	[
+doh.module("tests.currency", "dojo.currency", [
 		{
 			// Test formatting and parsing of currencies in various locales pre-built in dojo.cldr
 			// NOTE: we can't set djConfig.extraLocale before bootstrapping unit tests, so directly

=== modified file 'tests/data.js'
--- tests/data.js	2008-01-22 06:03:07 +0000
+++ tests/data.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,9 @@
-dojo.provide("tests.data");
 //Squelch any json comment messages for now, since the UT allows for both.
 dojo.config.usePlainJson = true;
-dojo.require("tests.data.utils");
-dojo.require("tests.data.ItemFileReadStore");
-dojo.require("tests.data.ItemFileWriteStore");
+doh.module("tests.data", [
+"tests.data.utils",
+"tests.data.ItemFileReadStore",
+"tests.data.ItemFileWriteStore"
+]);
 
 

=== modified file 'tests/data/ItemFileReadStore.js'
--- tests/data/ItemFileReadStore.js	2007-07-09 23:44:16 +0000
+++ tests/data/ItemFileReadStore.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,4 @@
-dojo.provide("tests.data.ItemFileReadStore");
-dojo.require("tests.data.readOnlyItemFileTestTemplates");
-dojo.require("dojo.data.ItemFileReadStore");
+doh.module("tests.data.ItemFileReadStore", ["tests.data.readOnlyItemFileTestTemplates", "dojo.data.ItemFileReadStore"], function(){
 
 tests.data.readOnlyItemFileTestTemplates.registerTestsForDatastore("dojo.data.ItemFileReadStore");
-
+});

=== modified file 'tests/data/ItemFileWriteStore.js'
--- tests/data/ItemFileWriteStore.js	2009-04-07 17:36:51 +0000
+++ tests/data/ItemFileWriteStore.js	2009-11-20 15:08:05 +0000
@@ -1,11 +1,12 @@
-dojo.provide("tests.data.ItemFileWriteStore");
-dojo.require("tests.data.readOnlyItemFileTestTemplates");
+doh.module("tests.data.ItemFileWriteStore", [
+"tests.data.readOnlyItemFileTestTemplates",
 
-dojo.require("dojo.data.ItemFileWriteStore");
-dojo.require("dojo.data.api.Read");
-dojo.require("dojo.data.api.Identity");
-dojo.require("dojo.data.api.Write");
-dojo.require("dojo.data.api.Notification");
+"dojo.data.ItemFileWriteStore",
+"dojo.data.api.Read",
+"dojo.data.api.Identity",
+"dojo.data.api.Write",
+"dojo.data.api.Notification"
+],function(){
 
 
 // First, make sure ItemFileWriteStore can still pass all the same unit tests 
@@ -1583,4 +1584,4 @@
 	]
 );
 
-
+});

=== modified file 'tests/data/readOnlyItemFileTestTemplates.js'
--- tests/data/readOnlyItemFileTestTemplates.js	2009-08-31 14:50:43 +0000
+++ tests/data/readOnlyItemFileTestTemplates.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,9 @@
-dojo.provide("tests.data.readOnlyItemFileTestTemplates");
-dojo.require("dojo.data.api.Read");
-dojo.require("dojo.data.api.Identity");
-dojo.require("dojo.date");
-dojo.require("dojo.date.stamp");
+doh.module("tests.data.readOnlyItemFileTestTemplates", [
+"dojo.data.api.Read",
+"dojo.data.api.Identity",
+"dojo.date",
+"dojo.date.stamp"
+],function(){
 
 dojo.declare("tests.data.Wrapper", null, {
 	//	summary:
@@ -3103,3 +3104,4 @@
 	}
 ];
 
+});

=== modified file 'tests/data/utils.js'
--- tests/data/utils.js	2007-05-02 18:06:00 +0000
+++ tests/data/utils.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.data.utils");
-dojo.require("dojo.data.util.filter");
-dojo.require("dojo.data.util.sorter");
-
-tests.register("tests.data.utils", 
-	[
+doh.module("tests.data.utils", ["dojo.data.util.filter", "dojo.data.util.sorter"], [
 		function testWildcardFilter_1(t){
 			var pattern = "ca*";
 			var values = ["ca", "california", "Macca", "Macca*b", "Macca\\b"];
@@ -196,4 +191,3 @@
 		}
 	]
 );
-

=== modified file 'tests/date.js'
--- tests/date.js	2008-03-11 20:10:41 +0000
+++ tests/date.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,4 @@
-dojo.provide("tests.date");
-
-dojo.require("dojo.date");
+doh.module("tests.date", ["dojo.date", "tests.date.locale", "tests.date.stamp"], function(){
 
 tests.register("tests.date.util", 
 	[
@@ -708,5 +706,4 @@
 	]
 );
 
-dojo.require("tests.date.locale");
-dojo.require("tests.date.stamp");
+});

=== modified file 'tests/date/locale.js'
--- tests/date/locale.js	2009-07-06 13:38:48 +0000
+++ tests/date/locale.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.date.locale");
-
-dojo.require("dojo.date.locale");
-
-tests.register("tests.date.locale", 
-	[
+doh.module("tests.date.locale", "dojo.date.locale", [
 		{
 			// Test formatting and parsing of dates in various locales pre-built in dojo.cldr
 			// NOTE: we can't set djConfig.extraLocale before bootstrapping unit tests, so directly

=== modified file 'tests/date/stamp.js'
--- tests/date/stamp.js	2009-10-06 01:39:07 +0000
+++ tests/date/stamp.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.date.stamp");
-
-dojo.require("dojo.date.stamp");
-
-tests.register("tests.date.stamp", 
-	[
+doh.module("tests.date.stamp", "dojo.date.stamp", [
 function test_date_iso(t){
 	var rfc  = "2005-06-29T08:05:00-07:00";
 	var date = dojo.date.stamp.fromISOString(rfc);

=== modified file 'tests/fx.js'
--- tests/fx.js	2008-03-26 11:05:19 +0000
+++ tests/fx.js	2009-11-20 15:08:05 +0000
@@ -1,5 +1,6 @@
-dojo.provide("tests.fx");
+doh.module("tests.fx", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.fx", dojo.moduleUrl("tests", "fx.html"), 30000);
 	doh.registerUrl("tests.NodeList-fx", dojo.moduleUrl("tests", "NodeList-fx.html"));
 }
+});

=== modified file 'tests/hash.js'
--- tests/hash.js	2009-11-16 21:15:04 +0000
+++ tests/hash.js	2009-11-20 15:14:02 +0000
@@ -1,8 +1,4 @@
-dojo.provide("tests.hash");
-dojo.require("dojo.hash");
-
-;(function(){
-
+doh.module("tests.hash", "dojo.hash", function(){
 // utilities for the tests:
 	function setHash(h){
 		h = h || "";
@@ -284,7 +280,6 @@
 						d.callback(true);
 					} catch(e){
 						d.errback(e);
-					}
 				});
 				
 				dojo.hash('test');
@@ -296,4 +291,4 @@
 			}
 		}	
 	]);
-})();
+});

=== modified file 'tests/html.js'
--- tests/html.js	2008-04-03 00:10:23 +0000
+++ tests/html.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.html");
+doh.module("tests.html", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.html", dojo.moduleUrl("tests", "html/test_set.html"));
 }
+});

=== modified file 'tests/i18n.js'
--- tests/i18n.js	2007-05-04 06:41:52 +0000
+++ tests/i18n.js	2009-11-20 15:08:05 +0000
@@ -1,8 +1,4 @@
-dojo.provide("tests.i18n");
-
-dojo.require("dojo.i18n");
-
-(function(){
+doh.module("tests.i18n", "dojo.i18n", function(){
 	var setUp = function(locale){
 		return function(){
 			dojo.requireLocalization("tests","salutations",locale);
@@ -81,4 +77,4 @@
 		delete tests.nls.salutations;
 	};
 	tests.register("tests.i18n", testSet);
-})();
+});

=== modified file 'tests/io/iframe.js'
--- tests/io/iframe.js	2007-06-15 04:52:31 +0000
+++ tests/io/iframe.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.io.iframe");
+doh.module("tests.io.iframe", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.io.iframe", dojo.moduleUrl("tests.io", "iframe.html"));
 }
+});

=== modified file 'tests/io/script.js'
--- tests/io/script.js	2007-05-09 00:13:37 +0000
+++ tests/io/script.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.io.script");
+doh.module("tests.io.script", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.io.script", dojo.moduleUrl("tests.io", "script.html"));
 }
+});

=== modified file 'tests/module.js'
--- tests/module.js	2009-09-17 15:35:42 +0000
+++ tests/module.js	2009-11-20 15:08:05 +0000
@@ -1,31 +1,27 @@
-dojo.provide("dojo.tests.module");
-
-try{
-	dojo.require("tests._base");
-	dojo.require("tests.i18n"); 
-	dojo.requireIf(dojo.isBrowser, "tests.back-hash");
-	dojo.requireIf(dojo.isBrowser, "tests.hash");
-	dojo.require("tests.cldr");
-	dojo.require("tests.data");
-	dojo.require("tests.date");
-	dojo.require("tests.number");
-	dojo.require("tests.currency");
-	dojo.require("tests.AdapterRegistry");
-	dojo.require("tests.io.script");
-	dojo.require("tests.io.iframe");
-	dojo.requireIf(dojo.isBrowser, "tests.rpc");
-	dojo.require("tests.regexp");
-	dojo.require("tests.string");
-	dojo.require("tests.behavior");
-	dojo.require("tests.parser");
-	dojo.require("tests.colors");
-	dojo.requireIf(dojo.isBrowser,"tests.cookie");
-	dojo.require("tests.fx");
-	dojo.require("tests.DeferredList");
-	dojo.require("tests.html");
-	dojo.requireIf(dojo.isBrowser,"tests.NodeList-traverse");
-	dojo.requireIf(dojo.isBrowser,"tests.NodeList-manipulate");
-	dojo.require("tests.cache");
-}catch(e){
-	doh.debug(e);
-}
+doh.module("dojo.tests.module", [
+	"tests._base",
+	"tests.i18n",
+	[dojo.isBrowser, "tests.back-hash"],
+	[dojo.isBrowser, "tests.hash"],
+	"tests.cldr",
+	"tests.data",
+	"tests.date",
+	"tests.number",
+	"tests.currency",
+	"tests.AdapterRegistry",
+	"tests.io.script",
+	"tests.io.iframe",
+	[dojo.isBrowser, "tests.rpc"],
+	"tests.regexp",
+	"tests.string",
+	"tests.behavior",
+	"tests.parser",
+	"tests.colors",
+	[dojo.isBrowser,"tests.cookie"],
+	"tests.fx",
+	"tests.DeferredList",
+	"tests.html",
+	[dojo.isBrowser,"tests.NodeList-traverse"],
+	[dojo.isBrowser,"tests.NodeList-manipulate"],
+	"tests.cache"
+]);

=== modified file 'tests/number.js'
--- tests/number.js	2009-04-07 03:35:23 +0000
+++ tests/number.js	2009-11-20 15:08:05 +0000
@@ -1,6 +1,4 @@
-dojo.provide("tests.number");
-
-dojo.require("dojo.number");
+doh.module("tests.number", "dojo.number", function(){
 
 /**
  * Refer to ICU4J's NumberFormatTest.expect(...) 
@@ -1110,3 +1108,4 @@
 		}
 	]
 );
+});

=== modified file 'tests/parser.html'
--- tests/parser.html	2009-09-16 06:29:27 +0000
+++ tests/parser.html	2009-11-20 15:08:05 +0000
@@ -6,11 +6,11 @@
 		</style>
 		<script type="text/javascript"
 			src="../dojo.js"
-			djConfig="isDebug: true, parseOnLoad: true"></script>
+			djConfig="isDebug: true, parseOnLoad: false"></script>
 		<script type="text/javascript">
-			dojo.require("dojo.parser");
-			dojo.require("doh.runner");
+			dojo.require(["dojo.parser", "doh.runner"]);
 
+			dojo.addOnLoad(function(){
 			dojo.declare("tests.parser.Class1", null, {
 				constructor: function(args, node){
 					this.params = args;
@@ -79,7 +79,6 @@
 				}
 			};
 
-			dojo.addOnLoad(function(){
 				doh.register("t",
 					[
 						function testJsId(t){
@@ -278,6 +277,7 @@
 						}
 					]
 				);
+				dojo.parser.parse();
 				doh.run();
 			})
 		</script>

=== modified file 'tests/parser.js'
--- tests/parser.js	2007-06-26 22:56:16 +0000
+++ tests/parser.js	2009-11-20 15:08:05 +0000
@@ -1,4 +1,5 @@
-dojo.provide("tests.parser");
+doh.module("tests.parser", function(){
 if(dojo.isBrowser){
 	doh.registerUrl("tests.parser", dojo.moduleUrl("tests", "parser.html"));
 }
+});

=== modified file 'tests/regexp.js'
--- tests/regexp.js	2009-03-03 00:09:57 +0000
+++ tests/regexp.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.regexp");
-
-dojo.require("dojo.regexp");
-
-tests.register("tests.regexp", 
-	[
+doh.module("tests.regexp", "dojo.regexp", [
 		function test_regexp_escape(t){
 			t.assertTrue(new RegExp(dojo.regexp.escapeString("\f\b\n\t\r+.$?*|{}()[]\\/^")).test("TEST\f\b\n\t\r+.$?*|{}()[]\\/^TEST"));
 			t.assertTrue(new RegExp(dojo.regexp.escapeString("\f\b\n\t\r+.$?*|{}()[]\\/^", ".")).test("TEST\f\b\n\t\r+X$?*|{}()[]\\/^TEST"));

=== modified file 'tests/rpc.js'
--- tests/rpc.js	2008-02-28 06:39:35 +0000
+++ tests/rpc.js	2009-11-20 15:08:05 +0000
@@ -1,11 +1,4 @@
-dojo.provide("tests.rpc");
-
-dojo.require("dojo.rpc.RpcService");
-dojo.require("dojo.rpc.JsonService");
-dojo.require("dojo.rpc.JsonpService");
-
-doh.register("tests.rpc", 
-	[ 
+doh.module("tests.rpc", ["dojo.rpc.RpcService", "dojo.rpc.JsonService", "dojo.rpc.JsonpService"], [ 
 
 		{
 			name: "JsonRPC-EchoTest",
@@ -143,5 +136,3 @@
 		}
 	]
 );
-
-

=== modified file 'tests/string.js'
--- tests/string.js	2008-06-18 00:29:26 +0000
+++ tests/string.js	2009-11-20 15:08:05 +0000
@@ -1,9 +1,4 @@
-dojo.provide("tests.string");
-
-dojo.require("dojo.string");
-
-tests.register("tests.string", 
-	[
+doh.module("tests.string", "dojo.string", [
 		function test_string_pad(t){
 			t.is("00001", dojo.string.pad("1", 5));
 			t.is("000001", dojo.string.pad("000001", 5));

