diff --git a/Gruntfile.js b/Gruntfile.js
index 9b33935112..94e91eb50a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1024,6 +1024,7 @@ var _              = require('lodash'),
         grunt.registerTask('buildAboutPage', 'Compile assets for the About Ghost page', function () {
             var done = this.async(),
                 templatePath = 'core/client/templates/-contributors.hbs',
+                imagePath = 'core/client/assets/img/contributors/',
                 ninetyDaysAgo = Date.now() - (1000 * 60 * 60 * 24 * 90);
 
             if (fs.existsSync(templatePath) && !grunt.option('force')) {
@@ -1033,15 +1034,29 @@ var _              = require('lodash'),
             }
 
             grunt.verbose.writeln('Downloading release and contributor information from GitHub');
-            getTopContribs({
-                user: 'tryghost',
-                repo: 'ghost',
-                releaseDate: ninetyDaysAgo,
-                count: 20
-            }).then(function makeContributorTemplate(contributors) {
-                var contributorTemplate = '<li>\n    <a href="<%githubUrl%>" title="<%name%>">\n' +
+
+            return Promise.join(
+                Promise.promisify(fs.mkdirs)(imagePath),
+                getTopContribs({
+                    user: 'tryghost',
+                    repo: 'ghost',
+                    releaseDate: ninetyDaysAgo,
+                    count: 20
+                })
+            ).then(function (results) {
+                var contributors = results[1],
+                    contributorTemplate = '<li>\n    <a href="<%githubUrl%>" title="<%name%>">\n' +
                     '        <img src="{{gh-path "admin" "/img/contributors"}}/<%name%>" alt="<%name%>">\n' +
-                    '    </a>\n</li>';
+                    '    </a>\n</li>',
+
+                    downloadImagePromise = function (url, name) {
+                        return new Promise(function (resolve, reject) {
+                            request(url)
+                            .pipe(fs.createWriteStream(imagePath + name))
+                            .on('close', resolve)
+                            .on('error', reject);
+                        });
+                    };
 
                 grunt.verbose.writeln('Creating contributors template.');
                 grunt.file.write(templatePath,
@@ -1052,25 +1067,15 @@ var _              = require('lodash'),
                             .replace(/<%name%>/g, contributor.name);
                     }).join('\n')
                 );
+
                 grunt.verbose.writeln('Downloading images for top contributors');
-                return Promise.promisify(fs.mkdirs)('core/client/assets/img/contributors').then(function () {
-                    return contributors;
-                });
-            }).then(function downloadContributorImages(contributors) {
-                var downloadImagePromise = function (url, name) {
-                    return new Promise(function (resolve, reject) {
-                        request(url)
-                        .pipe(fs.createWriteStream('core/client/assets/img/contributors/' + name))
-                        .on('close', resolve)
-                        .on('error', reject);
-                    });
-                };
                 return Promise.all(_.map(contributors, function (contributor) {
                     return downloadImagePromise(contributor.avatarUrl + '&s=60', contributor.name);
                 }));
-            }).catch(function (error) {
-                grunt.log.error(error);
-            }).finally(done);
+            }).then(done).catch(function (error) {
+                grunt.log.error(error.stack || error);
+                done(false);
+            });
         });
         // ### Init assets
         // `grunt init` - will run an initial asset build for you