diff --git a/lib/assets.js b/lib/assets.js
index <HASH>..<HASH> 100644
--- a/lib/assets.js
+++ b/lib/assets.js
@@ -289,12 +289,20 @@ module.exports = {
           _.each(self._assetPaths, function(fsPath, web) {
             var from = self.options.rootDir + '/public' + web;
             var to = fsPath + '/public';
-            // Always recreate the links so we're not befuddled by links
-            // deployed from a dev environment
-            if (fs.existsSync(from)) {
-              fs.unlinkSync(from);
-            }
-            if (fs.existsSync(to) && (!fs.existsSync(from))) {
+            if (fs.existsSync(to)) {
+              // Always recreate the links so we're not befuddled by links
+              // deployed from a dev environment
+              try {
+                // Check whether there is an existing symbolic link
+                // (must use lstat so it doesn't resolve the target instead)
+                // and if so, remove it
+                var stat = fs.lstatSync(from);
+                // Symbolic link exists, remove it so we can replace it with
+                // a valid one
+                fs.unlinkSync(from);
+              } catch (e) {
+                // Old symbolic link does not exist, that's fine
+              }
               // Pass type option for Windows compatibility, hopefully
               fs.symlinkSync(to, from, 'dir');
             }
Better symbolic link recreation, not confused by existing, invalid links