diff --git a/src/containers/costume-tab.jsx b/src/containers/costume-tab.jsx
index 2c6c04a7e65e777d575a9e009555a5543ecbce10..24f54bc7832152757c7b0cfb9fcccc2050729d2c 100644
--- a/src/containers/costume-tab.jsx
+++ b/src/containers/costume-tab.jsx
@@ -38,7 +38,7 @@ class CostumeTab extends React.Component {
         editingTarget.sprite.costumes = editingTarget.sprite.costumes
             .slice(0, costumeIndex)
             .concat(editingTarget.sprite.costumes.slice(costumeIndex + 1));
-        this.props.vm.runtime.spriteInfoReport(editingTarget);
+        this.props.vm.runtime.requestTargetsUpdate(editingTarget);
         // @todo not sure if this is getting redrawn correctly
         this.props.vm.runtime.requestRedraw();
 
diff --git a/src/lib/vm-listener-hoc.jsx b/src/lib/vm-listener-hoc.jsx
index 58ea1ca716b83195733d946c452c5eece51bfc8c..d2a7b0ca572967f990df5356073f35c8f0935f1f 100644
--- a/src/lib/vm-listener-hoc.jsx
+++ b/src/lib/vm-listener-hoc.jsx
@@ -27,7 +27,6 @@ const vmListenerHOC = function (WrappedComponent) {
             // If the wrapped component uses the vm in componentDidMount, then
             // we need to start listening before mounting the wrapped component.
             this.props.vm.on('targetsUpdate', this.props.onTargetsUpdate);
-            this.props.vm.on('SPRITE_INFO_REPORT', this.props.onSpriteInfoReport);
         }
         componentDidMount () {
             if (this.props.attachKeyboardEvents) {
@@ -100,9 +99,6 @@ const vmListenerHOC = function (WrappedComponent) {
         onTargetsUpdate: data => {
             dispatch(targets.updateEditingTarget(data.editingTarget));
             dispatch(targets.updateTargets(data.targetList));
-        },
-        onSpriteInfoReport: spriteInfo => {
-            dispatch(targets.updateTarget(spriteInfo));
         }
     });
     return connect(
diff --git a/src/reducers/targets.js b/src/reducers/targets.js
index c2f6219acea9de791eedbbe496bc0926448fe48f..0ed67cf2de94ceadf32e143037321458c5347a68 100644
--- a/src/reducers/targets.js
+++ b/src/reducers/targets.js
@@ -1,8 +1,5 @@
-const defaultsDeep = require('lodash.defaultsdeep');
-
 const UPDATE_EDITING_TARGET = 'scratch-gui/targets/UPDATE_EDITING_TARGET';
 const UPDATE_TARGET_LIST = 'scratch-gui/targets/UPDATE_TARGET_LIST';
-const UPDATE_TARGET = 'scratch/targets/UPDATE_TARGET';
 
 const initialState = {
     sprites: {},
@@ -12,39 +9,19 @@ const initialState = {
 const reducer = function (state, action) {
     if (typeof state === 'undefined') state = initialState;
     switch (action.type) {
-    case UPDATE_TARGET:
-        if (action.target.id === state.stage.id) {
-            return Object.assign({}, state, {
-                stage: Object.assign({}, state.stage, action.target)
-            });
-        }
-        return Object.assign({}, state, {
-            sprites: defaultsDeep(
-                {[action.target.id]: action.target},
-                state.sprites
-            )
-        });
     case UPDATE_TARGET_LIST:
         return Object.assign({}, state, {
             sprites: action.targets
                 .filter(target => !target.isStage)
                 .reduce(
-                    (targets, target, listId) => defaultsDeep(
-                        {[target.id]: {order: listId, ...target}},
-                        {[target.id]: state.sprites[target.id]},
-                        targets
+                    (targets, target, listId) => Object.assign(
+                        targets,
+                        {[target.id]: {order: listId, ...target}}
                     ),
                     {}
                 ),
             stage: action.targets
-                .filter(target => target.isStage)
-                .reduce(
-                    (stage, target) => {
-                        if (target.id !== stage.id) return target;
-                        return defaultsDeep(target, stage);
-                    },
-                    state.stage
-                )
+                .filter(target => target.isStage)[0] || {}
         });
     case UPDATE_EDITING_TARGET:
         return Object.assign({}, state, {editingTarget: action.target});
@@ -52,15 +29,6 @@ const reducer = function (state, action) {
         return state;
     }
 };
-reducer.updateTarget = function (target) {
-    return {
-        type: UPDATE_TARGET,
-        target: target,
-        meta: {
-            throttle: 30
-        }
-    };
-};
 reducer.updateTargets = function (targetList) {
     return {
         type: UPDATE_TARGET_LIST,