diff --git a/js/reveal.js b/js/reveal.js
index 410b390d77b254bc901ece6450e25818b2eb6a8d..e87a9cfaaff73ba0672a2cad2de856409416613b 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -242,58 +242,67 @@ var Reveal = (function(){
 
 	}
 
-	/**
-	 * Loads the dependencies of reveal.js. Dependencies are
-	 * defined via the configuration option 'dependencies'
-	 * and will be loaded prior to starting/binding reveal.js.
-	 * Some dependencies may have an 'async' flag, if so they
-	 * will load after reveal.js has been started up.
-	 */
-	function load() {
-
-		var scripts = [],
-			scriptsAsync = [];
-
-		for( var i = 0, len = config.dependencies.length; i < len; i++ ) {
-			var s = config.dependencies[i];
-
-			// Load if there's no condition or the condition is truthy
-			if( !s.condition || s.condition() ) {
-				if( s.async ) {
-					scriptsAsync.push( s.src );
-				}
-				else {
-					scripts.push( s.src );
-				}
-
-				// Extension may contain callback functions
-				if( typeof s.callback === 'function' ) {
-					head.ready( s.src.match( /([\w\d_\-]*)\.?js$|[^\\\/]*$/i )[0], s.callback );
-				}
-			}
-		}
-
-		// Called once synchronous scripts finish loading
-		function proceed() {
-			if( scriptsAsync.length ) {
-				// Load asynchronous scripts
-				head.js.apply( null, scriptsAsync );
-			}
-
-			start();
-		}
-
-		if( scripts.length ) {
-            scripts.push(proceed);
-
-			// Load synchronous scripts
-			head.js.apply( null, scripts );
-		}
-		else {
-			proceed();
-		}
-
-	}
+    /**
+     * Loads the dependencies of reveal.js. Dependencies are
+     * defined via the configuration option 'dependencies'
+     * and will be loaded prior to starting/binding reveal.js.
+     * Some dependencies may have an 'async' flag, if so they
+     * will load after reveal.js has been started up.
+     */
+    function load() {
+        var scripts = [],
+            scriptsAsync = [],
+            scriptsToApply = 0;
+
+        // Called once synchronous scripts finish loading
+        function proceed() {
+            if( scriptsAsync.length ) {
+                // Load asynchronous scripts
+                head.js.apply( null, scriptsAsync );
+            }
+
+            start();
+        }
+
+        for( var i = 0, len = config.dependencies.length; i < len; i++ ) {
+            var s = config.dependencies[i];
+
+            // Load if there's no condition or the condition is truthy
+            if( !s.condition || s.condition() ) {
+                if( s.async ) {
+                    scriptsAsync.push( s.src );
+                }
+                else {
+                    scripts.push( s.src );
+                }
+
+                // Extension may contain callback functions
+                (function(s) {
+                    head.ready( s.src.match( /([\w\d_\-]*)\.?js$|[^\\\/]*$/i )[0], function() {
+                        if( typeof s.callback === 'function' ) {
+                            s.callback.apply(this);
+                        }
+
+                        scriptsToApply--;
+                        if (scriptsToApply === 0) {
+                            proceed();
+                        }
+                    });
+                })(s);
+            }
+        }
+
+        if( scripts.length ) {
+            scriptsToApply = scripts.length;
+
+            // Load synchronous scripts
+            head.js.apply( null, scripts );
+        }
+        else {
+            proceed();
+        }
+
+    }
 
 	/**
 	 * Starts up reveal.js by binding input events and navigating