diff --git a/.DS_Store b/.DS_Store
index 1281aad..0dacb72 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/shared/.DS_Store b/shared/.DS_Store
index 36f3b43..6aa5def 100644
Binary files a/shared/.DS_Store and b/shared/.DS_Store differ
diff --git a/shared/js/html5Forms.js b/shared/js/html5Forms.js
index 0e452d0..9d4a072 100644
--- a/shared/js/html5Forms.js
+++ b/shared/js/html5Forms.js
@@ -3,9 +3,10 @@ var html5Forms = new function () {
 	
 	var scriptNode = null,
 		scriptDir = null,
-		hasBadValidationImplementation = false; //navigator.userAgent.indexOf('WebKit') > 0,
+		
 		// WebKit less than 534 doesn't show validation UI - we need to check for this (from http://stackoverflow.com/questions/6030522/html5-form-validation-modernizr-safari)
-		hasNativeBubbles = navigator.userAgent.indexOf('WebKit') < 0 || parseInt(navigator.userAgent.match(/AppleWebKit\/([^ ]*)/)[1].split('.')[0])  > 533;
+		hasNativeBubbles = navigator.userAgent.indexOf('WebKit') < 0 || parseInt(navigator.userAgent.match(/AppleWebKit\/([^ ]*)/)[1].split('.')[0])  > 534,
+		hasBadValidationImplementation = !hasNativeBubbles;  // making another var for this in case we have more criteria in the future.
 		
 	
 	var globalEvent = document.addEventListener?document.createEvent("HTMLEvents"):null;
@@ -243,6 +244,11 @@ var html5Forms = new function () {
 		}
 		
 		function clearMessageIfValid(node) {
+			if (!node.setCustomValidity) {
+				// this happens when webforms2 is not loaded yet.  Bail.
+				return; 
+			}
+			
 			node.setCustomValidity(''); 
 			if (!node.checkValidity()) {
 				showCustomMessage(node);
@@ -304,4 +310,343 @@ var html5Forms = new function () {
 
 }
 
+/*******************************************************************************
+ * This notice must be untouched at all times.
+ *
+ * This javascript library contains helper routines to assist with event 
+ * handling consistently among browsers
+ *
+ * EventHelpers.js v.1.4 available at http://www.useragentman.com/
+ *
+ * released under the MIT License:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   
+ * Chagelog: 1.4: fix fireEvent to work correctly for IE9.
+ *
+ *******************************************************************************/
+var EventHelpers = new function(){
+    var me = this;
+    
+    var safariTimer;
+    var isSafari = /WebKit/i.test(navigator.userAgent);
+    var isIEPolling = false;
+    var globalEvent;
+	var safariVer = navigator.userAgent.match(/Version\/([^\s]*)/);
+	
+	if (safariVer != null && safariVer.length == 2) {
+		safariVer = parseFloat(safariVer[1]);
+	}
+	
+	me.init = function () {
+		if (me.hasPageLoadHappened(arguments)) {
+			return;	
+		}
+		
+		/* This is for fireEvent */
+		if (document.createEvent) {
+			globalEvent = document.createEvent("HTMLEvents");
+		} else if (document.createEventObject){
+	        // dispatch for IE8 and lower.
+	        globalEvent = document.createEventObject();
+	    } 	
+		
+		me.docIsLoaded = true;
+	}
+	
+    /**
+     * Adds an event to the document.  Examples of usage:
+     * me.addEvent(window, "load", myFunction);
+     * me.addEvent(docunent, "keydown", keyPressedFunc);
+     * me.addEvent(document, "keyup", keyPressFunc);
+     *
+     * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
+     * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
+     * @param {Object} obj - a javascript object.
+     * @param {String} evType - an event to attach to the object.
+     * @param {Function} fn - the function that is attached to the event.
+     */
+    me.addEvent = function(obj, evType, fn){
+    
+        if (obj.addEventListener) {
+            obj.addEventListener(evType, fn, false);
+        } else if (obj.attachEvent) {
+            obj['e' + evType + fn] = fn;
+            obj[evType + fn] = function(){
+                obj["e" + evType + fn](self.event);
+            }
+            obj.attachEvent("on" + evType, obj[evType + fn]);
+        }
+    }
+    
+    
+    /**
+     * Removes an event that is attached to a javascript object.
+     *
+     * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
+     * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/	 * @param {Object} obj - a javascript object.
+     * @param {String} evType - an event attached to the object.
+     * @param {Function} fn - the function that is called when the event fires.
+     */
+    me.removeEvent = function(obj, evType, fn){
+    
+        if (obj.removeEventListener) {
+            obj.removeEventListener(evType, fn, false);
+        } else if (obj.detachEvent) {
+            try {
+                obj.detachEvent("on" + evType, obj[evType + fn]);
+                obj[evType + fn] = null;
+                obj["e" + evType + fn] = null;
+            } 
+            catch (ex) {
+                // do nothing;
+            }
+        }
+    }
+    
+   
+    /** 
+     * Find the HTML object that fired an Event.
+     *
+     * @param {Object} e - an HTML object
+     * @return {Object} - the HTML object that fired the event.
+     */
+    me.getEventTarget = function(e){
+        // first, IE method for mouse events(also supported by Safari and Opera)
+        if (e.toElement) {
+            return e.toElement;
+            // W3C
+        } else if (e.currentTarget) {
+            return e.currentTarget;
+            
+            // MS way
+        } else if (e.srcElement) {
+            return e.srcElement;
+        } else {
+            return null;
+        }
+    }
+    
+    
+    
+    
+    /**
+     * Given an event fired by the keyboard, find the key associated with that event.
+     *
+     * @param {Object} e - an event object.
+     * @return {String} - the ASCII character code representing the key associated with the event.
+     */
+    me.getKey = function(e){
+        if (e.keyCode) {
+            return e.keyCode;
+        } else if (e.event && e.event.keyCode) {
+            return window.event.keyCode;
+        } else if (e.which) {
+            return e.which;
+        }
+    }
+    
+    function mylog(s) {
+    	if (window.console && window.console.log) {
+    		console.log(s);
+    	} 
+    	
+    }
+    /** 
+     *  Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes,
+     *  etc., are).
+     *
+     *  Usage:
+     *
+     *  EventHelpers.addPageLoadEvent('init');
+     *
+     *  where the function init() has this code at the beginning:
+     *
+     *  function init() {
+     *
+     *  if (EventHelpers.hasPageLoadHappened(arguments)) return;
+     *
+     *	// rest of code
+     *   ....
+     *  }
+     *
+     * @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean
+     * Edwards, with a modification by me.
+     *
+     * @param {String} funcName - a string containing the function to be called.
+     */
+    me.addPageLoadEvent = function(funcName, timerForIE){
+    
+        var func = eval(funcName);
+       
+        // if document is already loaded, then just execute.
+        if (/loaded|complete|interactive/.test(document.readyState)) {
+        	mylog('execute immediately')
+        	func();
+        	return;
+       	}
+        
+        
+        // for Internet Explorer < 9 (using conditional comments)
+        /*@cc_on @*/
+        /*@if (@_win32 && @_jscript_version == 10)
+		 if (timerForIE) {
+		 	isIEPolling = true;
+		 } else {
+	      	pageLoadEventArray.push(func);
+	     	return;
+		 }
+         /*@end @*/
+        
+        if ((isSafari && safariVer < 3.1) || isIEPolling) { // sniff
+        	mylog('polling')
+            pageLoadEventArray.push(func);
+            
+            if (!safariTimer) {
+            
+                safariTimer = setInterval(function(){
+                    if (/loaded|complete/.test(document.readyState)) {
+                        clearInterval(safariTimer);
+                        
+                        /*
+                         * call the onload handler
+                         * func();
+                         */
+                        me.runPageLoadEvents();
+                        return;
+                    }
+                    set = true;
+                }, 10);
+            }
+            /* for Mozilla */
+        } else if (document.addEventListener) {
+        	
+            document.addEventListener("DOMContentLoaded", func, null);
+            mylog("DOMContentLoaded " + document.readyState);
+            /* Others */
+        } else {
+        	mylog('window.load')
+            me.addEvent(window, 'load', func);
+        }
+    }
+    
+    var pageLoadEventArray = new Array();
+    
+    me.runPageLoadEvents = function(e){
+        if (isSafari || isIEPolling || e.srcElement.readyState == "complete") {
+        
+            for (var i = 0; i < pageLoadEventArray.length; i++) {
+                pageLoadEventArray[i]();
+            }
+        }
+    }
+    /**
+     * Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName)
+     * has been executed.
+     *
+     * @see addPageLoadEvent
+     * @param {Function} funcArgs - the arguments of the containing. function
+     */
+    me.hasPageLoadHappened = function(funcArgs){
+        // If the function already been called, return true;
+        if (funcArgs.callee.done) 
+            return true;
+        
+        // flag this function so we don't do the same thing twice
+        funcArgs.callee.done = true;
+    }
+    
+    
+    
+    /**
+     * Used in an event method/function to indicate that the default behaviour of the event
+     * should *not* happen.
+     *
+     * @param {Object} e - an event object.
+     * @return {Boolean} - always false
+     */
+    me.preventDefault = function(e){
+    
+        if (e.preventDefault) {
+            e.preventDefault();
+        }
+        
+        try {
+            e.returnValue = false;
+        } 
+        catch (ex) {
+            // do nothing
+        }
+        
+    }
+    
+	
+	/* 
+	 * Fires an event manually.
+	 * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
+	 * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/	 
+	 * @param {Object} obj - a javascript object.
+	 * @param {String} evType - an event attached to the object.
+	 * @param {Function} fn - the function that is called when the event fires.
+	 * 
+	 */
+	me.fireEvent = function (element,event, options){
+		
+		if(!element) {
+			return;
+		}
+		
+		if (element.dispatchEvent) {
+	        // dispatch for firefox + ie9 + others
+	        globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable
+	        return !element.dispatchEvent(globalEvent);
+	    } else if (document.createEventObject){
+			return element.fireEvent('on' + event, globalEvent)	
+		} else {
+			return false;
+		}
+	}
+	
+	/*
+	 * Detects whether the event "eventName" is supported on a tag with name 
+	 * "nodeName".  Based on code from 
+	 * http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+	 */
+	me.isSupported = function (eventName, nodeName) {
+      var el = document.createElement(nodeName);
+      eventName = 'on' + eventName;
+      var isSupported = (eventName in el);
+      if (!isSupported) {
+        el.setAttribute(eventName, 'return;');
+        isSupported = typeof el[eventName] == 'function';
+      }
+      el = null;
+      return isSupported;
+    }
+    
+    
+    /* EventHelpers.init () */
+    function init(){
+        // Conditional comment alert: Do not remove comments.  Leave intact.
+        // The detection if the page is secure or not is important. If 
+        // this logic is removed, Internet Explorer will give security
+        // alerts.
+        /*@cc_on @*/
+        /*@if (@_win32)
+        
+         document.write('<script id="__ie_onload" defer src="' +
+        
+         ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
+        
+         var script = document.getElementById("__ie_onload");
+        
+         me.addEvent(script, 'readystatechange', me.runPageLoadEvents);
+        
+         /*@end @*/
+        
+    }
+    if (!window.html5Forms) {
+    	init();
+    }
+}
+
 html5Forms.init();
diff --git a/shared/js/html5Widgets.js b/shared/js/html5Widgets.js
index 9f9e1a0..9768f15 100644
--- a/shared/js/html5Widgets.js
+++ b/shared/js/html5Widgets.js
@@ -1397,319 +1397,7 @@ var html5Widgets = new function(){
 	}
 }
 
-/*******************************************************************************
- * This notice must be untouched at all times.
- *
- * This javascript library contains helper routines to assist with event 
- * handling consistently among browsers
- *
- * EventHelpers.js v.1.4 available at http://www.useragentman.com/
- *
- * released under the MIT License:
- *   http://www.opensource.org/licenses/mit-license.php
- *   
- * Chagelog: 1.4: fix fireEvent to work correctly for IE9.
- *
- *******************************************************************************/
-var EventHelpers = new function(){
-    var me = this;
-    
-    var safariTimer;
-    var isSafari = /WebKit/i.test(navigator.userAgent);
-    var globalEvent;
-	
-	me.init = function () {
-		if (me.hasPageLoadHappened(arguments)) {
-			return;	
-		}
-		
-		/* This is for fireEvent */
-		if (document.createEvent) {
-			globalEvent = document.createEvent("HTMLEvents");
-		} else if (document.createEventObject){
-	        // dispatch for IE8 and lower.
-	        globalEvent = document.createEventObject();
-	    } 	
-		
-		me.docIsLoaded = true;
-	}
-	
-    /**
-     * Adds an event to the document.  Examples of usage:
-     * me.addEvent(window, "load", myFunction);
-     * me.addEvent(docunent, "keydown", keyPressedFunc);
-     * me.addEvent(document, "keyup", keyPressFunc);
-     *
-     * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
-     * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
-     * @param {Object} obj - a javascript object.
-     * @param {String} evType - an event to attach to the object.
-     * @param {Function} fn - the function that is attached to the event.
-     */
-    me.addEvent = function(obj, evType, fn){
-    
-        if (obj.addEventListener) {
-            obj.addEventListener(evType, fn, false);
-        } else if (obj.attachEvent) {
-            obj['e' + evType + fn] = fn;
-            obj[evType + fn] = function(){
-                obj["e" + evType + fn](self.event);
-            }
-            obj.attachEvent("on" + evType, obj[evType + fn]);
-        }
-    }
-    
-    
-    /**
-     * Removes an event that is attached to a javascript object.
-     *
-     * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
-     * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/	 * @param {Object} obj - a javascript object.
-     * @param {String} evType - an event attached to the object.
-     * @param {Function} fn - the function that is called when the event fires.
-     */
-    me.removeEvent = function(obj, evType, fn){
-    
-        if (obj.removeEventListener) {
-            obj.removeEventListener(evType, fn, false);
-        } else if (obj.detachEvent) {
-            try {
-                obj.detachEvent("on" + evType, obj[evType + fn]);
-                obj[evType + fn] = null;
-                obj["e" + evType + fn] = null;
-            } 
-            catch (ex) {
-                // do nothing;
-            }
-        }
-    }
-    
-   
-    /** 
-     * Find the HTML object that fired an Event.
-     *
-     * @param {Object} e - an HTML object
-     * @return {Object} - the HTML object that fired the event.
-     */
-    me.getEventTarget = function(e){
-        // first, IE method for mouse events(also supported by Safari and Opera)
-        if (e.toElement) {
-            return e.toElement;
-            // W3C
-        } else if (e.currentTarget) {
-            return e.currentTarget;
-            
-            // MS way
-        } else if (e.srcElement) {
-            return e.srcElement;
-        } else {
-            return null;
-        }
-    }
-    
-    
-    
-    
-    /**
-     * Given an event fired by the keyboard, find the key associated with that event.
-     *
-     * @param {Object} e - an event object.
-     * @return {String} - the ASCII character code representing the key associated with the event.
-     */
-    me.getKey = function(e){
-        if (e.keyCode) {
-            return e.keyCode;
-        } else if (e.event && e.event.keyCode) {
-            return window.event.keyCode;
-        } else if (e.which) {
-            return e.which;
-        }
-    }
-    
-    
-    /** 
-     *  Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes,
-     *  etc., are).
-     *
-     *  Usage:
-     *
-     *  EventHelpers.addPageLoadEvent('init');
-     *
-     *  where the function init() has this code at the beginning:
-     *
-     *  function init() {
-     *
-     *  if (EventHelpers.hasPageLoadHappened(arguments)) return;
-     *
-     *	// rest of code
-     *   ....
-     *  }
-     *
-     * @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean
-     * Edwards, with a modification by me.
-     *
-     * @param {String} funcName - a string containing the function to be called.
-     */
-    me.addPageLoadEvent = function(funcName){
-    
-        var func = eval(funcName);
-        
-        // for Internet Explorer (using conditional comments)
-        /*@cc_on @*/
-        /*@if (@_win32)
-         pageLoadEventArray.push(func);
-         return;
-         /*@end @*/
-        if (isSafari) { // sniff
-            pageLoadEventArray.push(func);
-            
-            if (!safariTimer) {
-            
-                safariTimer = setInterval(function(){
-                    if (/loaded|complete/.test(document.readyState)) {
-                        clearInterval(safariTimer);
-                        
-                        /*
-                         * call the onload handler
-                         * func();
-                         */
-                        me.runPageLoadEvents();
-                        return;
-                    }
-                    set = true;
-                }, 10);
-            }
-            /* for Mozilla */
-        } else if (document.addEventListener) {
-            var x = document.addEventListener("DOMContentLoaded", func, null);
-            
-            /* Others */
-        } else {
-            me.addEvent(window, 'load', func);
-        }
-    }
-    
-    var pageLoadEventArray = new Array();
-    
-    me.runPageLoadEvents = function(e){
-        if (isSafari || e.srcElement.readyState == "complete") {
-        
-            for (var i = 0; i < pageLoadEventArray.length; i++) {
-                pageLoadEventArray[i]();
-            }
-        }
-    }
-    /**
-     * Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName)
-     * has been executed.
-     *
-     * @see addPageLoadEvent
-     * @param {Function} funcArgs - the arguments of the containing. function
-     */
-    me.hasPageLoadHappened = function(funcArgs){
-        // If the function already been called, return true;
-        if (funcArgs.callee.done) 
-            return true;
-        
-        // flag this function so we don't do the same thing twice
-        funcArgs.callee.done = true;
-    }
-    
-    
-    
-    /**
-     * Used in an event method/function to indicate that the default behaviour of the event
-     * should *not* happen.
-     *
-     * @param {Object} e - an event object.
-     * @return {Boolean} - always false
-     */
-    me.preventDefault = function(e){
-    
-        if (e.preventDefault) {
-            e.preventDefault();
-        }
-        
-        try {
-            e.returnValue = false;
-        } 
-        catch (ex) {
-            // do nothing
-        }
-        
-    }
-    
-	
-	/* 
-	 * Fires an event manually.
-	 * @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
-	 * @author John Resig - http://ejohn.org/projects/flexible-javascript-events/	 
-	 * @param {Object} obj - a javascript object.
-	 * @param {String} evType - an event attached to the object.
-	 * @param {Function} fn - the function that is called when the event fires.
-	 * 
-	 */
-	me.fireEvent = function (element,event, options){
-		
-		if(!element) {
-			return;
-		}
-		
-		if (element.dispatchEvent) {
-	        // dispatch for firefox + ie9 + others
-	        globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable
-	        return !element.dispatchEvent(globalEvent);
-	    } else if (document.createEventObject){
-			return element.fireEvent('on' + event, globalEvent)	
-		} else {
-			return false;
-		}
-	}
-	
-	/*
-	 * Detects whether the event "eventName" is supported on a tag with name 
-	 * "nodeName".  Based on code from 
-	 * http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-	 */
-	me.isSupported = function (eventName, nodeName) {
-      var el = document.createElement(nodeName);
-      eventName = 'on' + eventName;
-      var isSupported = (eventName in el);
-      if (!isSupported) {
-        el.setAttribute(eventName, 'return;');
-        isSupported = typeof el[eventName] == 'function';
-      }
-      el = null;
-      return isSupported;
-    }
-    
-    
-    /* EventHelpers.init () */
-    function init(){
-        // Conditional comment alert: Do not remove comments.  Leave intact.
-        // The detection if the page is secure or not is important. If 
-        // this logic is removed, Internet Explorer will give security
-        // alerts.
-        /*@cc_on @*/
-        /*@if (@_win32)
-        
-         document.write('<script id="__ie_onload" defer src="' +
-        
-         ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
-        
-         var script = document.getElementById("__ie_onload");
-        
-         me.addEvent(script, 'readystatechange', me.runPageLoadEvents);
-        
-         /*@end @*/
-        
-    }
-    if (!window.html5Forms) {
-    	init();
-    }
-}
 
-if (!window.html5Forms) {
-	EventHelpers.addPageLoadEvent('EventHelpers.init');
-	EventHelpers.addPageLoadEvent('html5Widgets.init');
-}
+
+EventHelpers.addPageLoadEvent('html5Widgets.init');
+
diff --git a/shared/js/weston.ruter.net/webforms2/webforms2.css b/shared/js/weston.ruter.net/webforms2/webforms2.css
index f1d4b27..355089c 100644
--- a/shared/js/weston.ruter.net/webforms2/webforms2.css
+++ b/shared/js/weston.ruter.net/webforms2/webforms2.css
@@ -71,9 +71,16 @@ xh|*[|repeat="template"] {
 	
 }
 
+/* IE7 cannot use :before, so let's move the container up since it doesn't have the pointer */
+*:first-child+html .wf2_errorMsg{
+	margin-top: 0 !important;
+}
+
+
 .wf2_errorMsgContainer {
 	padding: 20px 10px !important;
 	filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr='#535353', endColorstr='#2c2d2e', GradientType=0);
+	zoom: 1;
 }
 
 
diff --git a/shared/js/weston.ruter.net/webforms2/webforms2_src.js b/shared/js/weston.ruter.net/webforms2/webforms2_src.js
index 18f99aa..98b9b91 100644
--- a/shared/js/weston.ruter.net/webforms2/webforms2_src.js
+++ b/shared/js/weston.ruter.net/webforms2/webforms2_src.js
@@ -16,10 +16,11 @@
  * version 0.5.4  - initial release by Weston Ruter
  * version 0.6    - refactored for use with HTML5Widgets by Zoltan Hawryluk (July 27th, 2010)
  * version 0.6.1  - updated to deal with WebKit's half-implemented WebForms 2 Implementation (Sept 10, 2010)
- * version 0.7    - bug fixes with nested repetition models by Zoltan Hawryluk.
+ * version 0.7    - abug fixes with nested repetition models by Zoltan Hawryluk.
  * version 0.7.1  - updated to dual MIT/GPL 2.0 license.
  * version 1.0    - Updated to mimic CSS validation pseudo-classes, support for newer browsers
- *                  native support (IE10, Firefox 4, Webkit, Opera 11.11)
+ *                  native support (IE10, Firefox 4, Webkit, Opera 11.11).  This version does rely on 
+ *                  the WebForms.js framework.
  */
 
 if(!window.$wf2){
@@ -48,8 +49,10 @@ $wf2 = {
 	
 	
 	onDOMContentLoaded : function(){
+		
 		if($wf2.isInitialized)
 			return;
+		
 		$wf2.isInitialized = true;  //Safari needs this here for some reason
 		
 		var i,j,k,node;
@@ -460,9 +463,11 @@ $wf2 = {
 		parent = (parent || document.documentElement);
 		var i,j, frm, frms = parent.getElementsByTagName('form');
 		for(i = 0; frm = frms[i]; i++){
+			
 			if(frm.checkValidity && !$wf2.hasBadImplementation && $wf2.getAttributeValue(frm, 'data-webforms2-force-js-validation') != 'true') {
 				continue;
 			}
+			
 			frm.checkValidity = $wf2.formCheckValidity;
 			
 			if(frm.addEventListener)
@@ -1173,7 +1178,7 @@ $wf2 = {
 	},
 
 	applyValidityInterface : function(node){
-		
+		//console.log('applying ' + node.name)
 		/* Webkit browsers need this */
 		if (!$wf2.hasNativeBubbles || (node.form && $wf2.getAttributeValue(node.form, 'data-webforms2-force-js-validation') == 'true')) {
 			//console.log(node.name)
@@ -1387,10 +1392,21 @@ $wf2 = {
 		var msg = document.createElement('div');
 		msg.className = 'wf2_errorMsg wf2_fromForm_' + (target.form.id || target.form.name);
 		
-		/* Let's put in a container in here so IE9- can put a gradient filter in here. */
+		//Let's put in a container in here so IE9- can put a gradient filter in here.
+		/* var msgContainer = document.createElement('div');
+		msgContainer.className = 'wf2_errorMsgContainer';
+		msg.appendChild(msgContainer);  */
+		
+		
+		
+		var IEmsgContainer = document.createElement('div');
+		IEmsgContainer.className = 'wf2_IEerrorMsgContainer';
+		msg.appendChild(IEmsgContainer); 
+		
 		var msgContainer = document.createElement('div');
 		msgContainer.className = 'wf2_errorMsgContainer';
-		msg.appendChild(msgContainer);
+		IEmsgContainer.appendChild(msgContainer); 
+		
 		
 		
 		//msg.title = "Close";
@@ -1427,6 +1443,9 @@ $wf2 = {
 			ol.className = 'single';
 		
 		msgContainer.appendChild(ol);
+		
+		
+		
 		////remove existing error message
 		//if(document.getElementById(msg.id))
 		//	document.documentElement.removeChild(document.getElementById(msg.id));
@@ -1449,6 +1468,14 @@ $wf2 = {
 		//	if(prevEl && prevCount > nextCount)
 		//	
 		//}
+		
+		// this allows a border radius on the msg to play well with IE9 and lower's Gradient filter on the msgContainer.
+		if (msg.currentStyle && msg.currentStyle.borderRadius && msgContainer.currentStyle.filter.indexOf('Gradient') > -1) {
+			
+			IEmsgContainer.style.borderRadius = msg.currentStyle.borderRadius;
+			IEmsgContainer.style.overflow = 'hidden';
+		}
+		
 		var el = target;
 		while(el && (el.nodeType != 1 || (el.style.display == 'none' || el.style.visibility == 'hidden' || !el.offsetParent)))
 			el = el.parentNode;
@@ -2355,11 +2382,6 @@ if(document.addEventListener){
 	}, false);
 }
 
-/*##################################################################################
- # Execute WF2 code onDOMContentLoaded
- # Some of the following code was borrowed from Dean Edwards, John Resig, et al <http://dean.edwards.name/weblog/2006/06/again/>
- ##################################################################################*/
-
 (function(){
 //Get the path to the library base directory
 var match;
@@ -2371,85 +2393,8 @@ for(var i = 0; i < scripts.length; i++){
 		$wf2.libpath = match[1];
 }
 
-//The script has been included after the DOM has loaded (perhaps via Greasemonkey), so fire immediately
-//NOTE: This does not work with XHTML documents in Gecko
-if(document.body){
-	$wf2.onDOMContentLoaded();
-	return;
-}
+EventHelpers.addPageLoadEvent('$wf2.onDOMContentLoaded', true)
 
-var eventSet = 0;
-if(document.addEventListener){
-	//for Gecko and Opera
-	document.addEventListener('DOMContentLoaded', function(){
-		$wf2.onDOMContentLoaded();
-	}, false);
-
-	//for other browsers which do not support DOMContentLoaded use the following as a fallback to be called hopefully before all other onload handlers
-	window.addEventListener('load', function(){
-		$wf2.onDOMContentLoaded();
-	}, false);
-	
-	eventSet = 1;
-}
-
-//for Safari
-if (/WebKit/i.test(navigator.userAgent)) { //sniff
-	var _timer = setInterval(function() {
-		if (/loaded|complete/.test(document.readyState)) {
-			clearInterval(_timer);
-			delete _timer;
-			$wf2.onDOMContentLoaded();
-		}
-	}, 10);
-	eventSet = 1;
-}
-//for Internet Explorer (formerly using conditional comments) //sniff
-else if(/MSIE/i.test(navigator.userAgent) && !document.addEventListener && window.attachEvent){
-	//This following attached onload handler will attempt to be the first onload handler to be called and thus
-	//  initiate the repetition model as early as possible if the DOMContentLoaded substitute fails.
-	window.attachEvent('onload', function(){
-		$wf2.onDOMContentLoaded();
-	});
-	
-	//Dean Edward's first solution: http://dean.edwards.name/weblog/2005/09/busted/
-	//document.getElementsByTagName('*')[0].addBehavior(dirname + 'repetition-model.htc'); //use this if Behaviors are employed in 0.9
-	document.write("<script defer src='" + $wf2.libpath + "webforms2-msie.js'><"+"/script>");
-
-	//Dean Edward's revisited solution <http://dean.edwards.name/weblog/2005/09/busted/> (via Matthias Miller with insights from jQuery)
-	//  Note that this solution will not result in its code firing before onload if there are no external images in the page; in this case, first solution above is used.
-	document.write("<scr" + "ipt id='__wf2_ie_onload' defer src='//:'><\/script>"); //MSIE memory leak according to Drip
-	var script = document.getElementById('__wf2_ie_onload');
-	script.onreadystatechange = function(){
-		if(this.readyState == 'complete'){
-			this.parentNode.removeChild(this);
-			$wf2.onDOMContentLoaded();
-			
-			//See issue #3 <http://code.google.com/p/repetitionmodel/issues/detail?id=3>
-			//Sometimes cssQuery doesn't find all repetition templates from here within this DOMContentLoaded substitute
-			if (window.$wf2Rep) {
-				if($wf2.repetitionTemplates.length == 0)
-					$wf2.isInitialized = false;
-			}
-		}
-	};
-	script = null;
-	eventSet = 1;
-}
-
-//old event model used as a last-resort fallback
-if(!eventSet){
-	if(window.onload){ //if(window.onload != RepetitionElement._init_document)
-		var oldonload = window.onload;
-		window.onload = function(){
-			$wf2.onDOMContentLoaded();
-			oldonload();
-		};
-	}
-	else window.onload = function(){
-		$wf2.onDOMContentLoaded();
-	};
-}
 })();
 } //End If(!document.implementation...
 
