diff --git a/src/containers/backpack.jsx b/src/containers/backpack.jsx
index 1a22a185e956db246d371aa8e1a10eb5ca883e6c..b4f33ab43a1eae95ac082767b79fe801f5ee970f 100644
--- a/src/containers/backpack.jsx
+++ b/src/containers/backpack.jsx
@@ -83,12 +83,15 @@ class Backpack extends React.Component {
     }
     handleDrop (dragInfo) {
         let payloader = null;
+        let presaveAsset = null;
         switch (dragInfo.dragType) {
         case DragConstants.COSTUME:
             payloader = costumePayload;
+            presaveAsset = dragInfo.payload.asset;
             break;
         case DragConstants.SOUND:
             payloader = soundPayload;
+            presaveAsset = dragInfo.payload.asset;
             break;
         case DragConstants.SPRITE:
             payloader = spritePayload;
@@ -102,6 +105,19 @@ class Backpack extends React.Component {
         // Creating the payload is async, so set loading before starting
         this.setState({loading: true}, () => {
             payloader(dragInfo.payload, this.props.vm)
+                .then(payload => {
+                    // Force the asset to save to the asset server before storing in backpack
+                    // Ensures any asset present in the backpack is also on the asset server
+                    if (presaveAsset && !presaveAsset.clean) {
+                        return storage.store(
+                            presaveAsset.assetType,
+                            presaveAsset.dataFormat,
+                            presaveAsset.data,
+                            presaveAsset.assetId
+                        ).then(() => payload);
+                    }
+                    return payload;
+                })
                 .then(payload => saveBackpackObject({
                     host: this.props.host,
                     token: this.props.token,