diff --git a/src/import/load-costume.js b/src/import/load-costume.js
index d76e8b912..4a523449e 100644
--- a/src/import/load-costume.js
+++ b/src/import/load-costume.js
@@ -280,11 +280,25 @@ const loadCostumeFromAsset = function (costume, runtime, optVersion) {
         return loadVector_(costume, runtime, rotationCenter, optVersion)
             .catch(error => {
                 log.warn(`Error loading vector image: ${error.name}: ${error.message}`);
+                
+                // Keep track of the old assetId until we're done loading the default costume
+                const oldAssetId = costume.assetId;
+                const oldRotationX = costume.rotationCenterX;
+                const oldRotationY = costume.rotationCenterY;
+                
                 // Use default asset if original fails to load
                 costume.assetId = runtime.storage.defaultAssetId.ImageVector;
                 costume.asset = runtime.storage.get(costume.assetId);
                 costume.md5 = `${costume.assetId}.${AssetType.ImageVector.runtimeFormat}`;
-                return loadVector_(costume, runtime);
+                return loadVector_(costume, runtime).then(loadedCostume => {
+                    loadedCostume.broken = {};
+                    loadedCostume.broken.assetId = oldAssetId;
+                    loadedCostume.broken.md5 = `${oldAssetId}.${AssetType.ImageVector.runtimeFormat}`;
+                    loadedCostume.broken.asset = runtime.storage.get(oldAssetId);
+                    loadedCostume.broken.rotationCenterX = oldRotationX;
+                    loadedCostume.broken.rotationCenterY = oldRotationY;
+                    return loadedCostume;
+                });
             });
     }
     return loadBitmap_(costume, runtime, rotationCenter, optVersion);
diff --git a/src/serialization/sb3.js b/src/serialization/sb3.js
index 6989229c9..da31ab807 100644
--- a/src/serialization/sb3.js
+++ b/src/serialization/sb3.js
@@ -345,7 +345,7 @@ const serializeBlocks = function (blocks) {
  */
 const serializeCostume = function (costume) {
     const obj = Object.create(null);
-    obj.assetId = costume.assetId;
+    obj.assetId = (costume.broken && costume.broken.assetId) || costume.assetId;
     obj.name = costume.name;
     obj.bitmapResolution = costume.bitmapResolution;
     // serialize this property with the name 'md5ext' because that's
@@ -353,10 +353,11 @@ const serializeCostume = function (costume) {
     // updated to actually refer to this as 'md5ext' instead of 'md5'
     // but that change should be made carefully since it is very
     // pervasive
-    obj.md5ext = costume.md5;
+    obj.md5ext = (costume.broken && costume.broken.md5) || costume.md5;
     obj.dataFormat = costume.dataFormat.toLowerCase();
-    obj.rotationCenterX = costume.rotationCenterX;
-    obj.rotationCenterY = costume.rotationCenterY;
+    // TODO: WATCH OUT FOR ZEROs HERE
+    obj.rotationCenterX = (costume.broken && costume.broken.rotationCenterX) || costume.rotationCenterX;
+    obj.rotationCenterY = (costume.broken && costume.broken.rotationCenterY) || costume.rotationCenterY;
     return obj;
 };
 
diff --git a/src/serialization/serialize-assets.js b/src/serialization/serialize-assets.js
index c1d063949..041f7d0d3 100644
--- a/src/serialization/serialize-assets.js
+++ b/src/serialization/serialize-assets.js
@@ -16,10 +16,18 @@ const serializeAssets = function (runtime, assetType, optTargetId) {
         const currAssets = currTarget.sprite[assetType];
         for (let j = 0; j < currAssets.length; j++) {
             const currAsset = currAssets[j];
-            const asset = currAsset.asset;
+            let asset = currAsset.asset;
+            if (currAsset.broken) {
+                if (currAsset.broken.asset) {
+                    asset = currAsset.broken.asset;
+                } else {
+                    continue;
+                }
+            }
             assetDescs.push({
                 fileName: `${asset.assetId}.${asset.dataFormat}`,
-                fileContent: asset.data});
+                fileContent: asset.data
+            });
         }
     }
     return assetDescs;
diff --git a/src/virtual-machine.js b/src/virtual-machine.js
index 131c421c2..9abbf6791 100644
--- a/src/virtual-machine.js
+++ b/src/virtual-machine.js
@@ -932,6 +932,7 @@ class VirtualMachine extends EventEmitter {
      */
     updateSvg (costumeIndex, svg, rotationCenterX, rotationCenterY) {
         const costume = this.editingTarget.getCostumes()[costumeIndex];
+        if (costume && costume.broken) costume.broken = null;
         if (costume && this.runtime && this.runtime.renderer) {
             costume.rotationCenterX = rotationCenterX;
             costume.rotationCenterY = rotationCenterY;