Index: Gruntfile.js
===================================================================
--- Gruntfile.js	(revision 25242)
+++ Gruntfile.js	(working copy)
@@ -4,6 +4,9 @@
 	var SOURCE_DIR = 'src/';
 	var BUILD_DIR = 'build/';
 
+	// Load tasks. 
+	require('matchdep').filterDev('grunt-*').forEach( grunt.loadNpmTasks );
+
 	// Project configuration.
 	grunt.initConfig({
 		clean: {
@@ -154,16 +157,6 @@
 		}
 	});
 
-	// Load tasks.
-	grunt.loadNpmTasks('grunt-contrib-clean');
-	grunt.loadNpmTasks('grunt-contrib-copy');
-	grunt.loadNpmTasks('grunt-contrib-cssmin');
-	grunt.loadNpmTasks('grunt-contrib-qunit');
-	grunt.loadNpmTasks('grunt-contrib-uglify');
-	grunt.loadNpmTasks('grunt-contrib-watch');
-	grunt.loadNpmTasks('grunt-contrib-compress');
-	grunt.loadNpmTasks('grunt-contrib-concat');
-
 	// Register tasks.
 	grunt.registerTask('build', ['clean:all', 'copy:all', 'cssmin:core', 'uglify:core',
 		'uglify:tinymce', 'concat:tinymce', 'compress:tinymce', 'clean:tinymce']);
Index: package.json
===================================================================
--- package.json	(revision 25242)
+++ package.json	(working copy)
@@ -17,6 +17,7 @@
     "grunt-contrib-uglify": "~0.2.2",
     "grunt-contrib-watch": "~0.5.1",
     "grunt-contrib-compress": "~0.5.2",
-    "grunt-contrib-concat": "~0.3.0"
+    "grunt-contrib-concat": "~0.3.0",
+    "matchdep": "~0.1.2"
   }
 }
