diff --git a/angularFiles.js b/angularFiles.js
index 0233722adfc4..55c22e6342cb 100644
--- a/angularFiles.js
+++ b/angularFiles.js
@@ -64,6 +64,7 @@ var angularFiles = {
'src/ng/directive/ngCloak.js',
'src/ng/directive/ngController.js',
'src/ng/directive/ngCsp.js',
+ 'src/ng/directive/ngDefer.js',
'src/ng/directive/ngEventDirs.js',
'src/ng/directive/ngIf.js',
'src/ng/directive/ngInclude.js',
diff --git a/src/AngularPublic.js b/src/AngularPublic.js
index c18889911a50..c6d0954ece26 100644
--- a/src/AngularPublic.js
+++ b/src/AngularPublic.js
@@ -20,6 +20,7 @@
ngClassOddDirective,
ngCloakDirective,
ngControllerDirective,
+ ngDeferDirective,
ngFormDirective,
ngHideDirective,
ngIfDirective,
@@ -187,6 +188,7 @@ function publishExternalAPI(angular) {
ngClassOdd: ngClassOddDirective,
ngCloak: ngCloakDirective,
ngController: ngControllerDirective,
+ ngDefer: ngDeferDirective,
ngForm: ngFormDirective,
ngHide: ngHideDirective,
ngIf: ngIfDirective,
diff --git a/src/ng/directive/ngDefer.js b/src/ng/directive/ngDefer.js
new file mode 100644
index 000000000000..463713164c1a
--- /dev/null
+++ b/src/ng/directive/ngDefer.js
@@ -0,0 +1,56 @@
+'use strict';
+
+/**
+ * @ngdoc directive
+ * @name ngDefer
+ * @restrict A
+ * @priority 600
+ * @element ANY
+ *
+ * @description
+ * The `ngDefer` directive pauses AngularJS compilation at the current DOM element,
+ * including directives on the element itself that have a lower priority than
+ * `ngDefer`.
+ * It will continue the process at the very same element for any directives with lower
+ * priority once the condition provided to the `tiDefer` attribute evalutes to a trueish
+ * value.
+ * This is useful to defer compilation of entire sub-trees of HTML to when it is really
+ * needed, e.g. when the sub-tree becomes visible. This can be very useful in progressive
+ * enhancement context and generally to improve page initialization time by splitting
+ * compilation into smaller chunks that get executed on an as-needed basis.
+ *
+ * @example
+ *
+