diff --git a/src/containers/target-pane.jsx b/src/containers/target-pane.jsx
index 53c0973a9ce09709263386cb3f44b30dab890a8f..5cc156a87058098a0a7b1a6a01d36dc3d4cc01ac 100644
--- a/src/containers/target-pane.jsx
+++ b/src/containers/target-pane.jsx
@@ -9,6 +9,8 @@ import {
     closeSpriteLibrary
 } from '../reducers/modals';
 
+import {setHoveredSprite} from '../reducers/hovered-target-sprite';
+
 import TargetPaneComponent from '../components/target-pane/target-pane.jsx';
 
 class TargetPane extends React.Component {
@@ -53,10 +55,10 @@ class TargetPane extends React.Component {
         this.props.vm.duplicateSprite(id);
     }
     handleMouseOutSprite () {
-        this.props.vm.setHoveredSprite(null);
+        this.props.setHoveredSprite(null);
     }
     handleMouseOverSprite (id) {
-        this.props.vm.setHoveredSprite(id);
+        this.props.setHoveredSprite(id);
     }
     handleSelectSprite (id) {
         this.props.vm.setEditingTarget(id);
@@ -102,7 +104,7 @@ const mapStateToProps = state => ({
         return sprites;
     }, {}),
     stage: state.targets.stage,
-    raiseSprites: state.blockdrag,
+    raiseSprites: state.blockDrag,
     spriteLibraryVisible: state.modals.spriteLibrary,
     backdropLibraryVisible: state.modals.backdropLibrary
 });
@@ -116,6 +118,9 @@ const mapDispatchToProps = dispatch => ({
     },
     onRequestCloseBackdropLibrary: () => {
         dispatch(closeBackdropLibrary());
+    },
+    setHoveredSprite: spriteId => {
+        dispatch(setHoveredSprite(spriteId));
     }
 });
 
diff --git a/src/lib/vm-listener-hoc.jsx b/src/lib/vm-listener-hoc.jsx
index 707a631b6e7f18c79f464ec6282d2343fb45807d..5583fad2fef9b149a473efcdf5176a5144004205 100644
--- a/src/lib/vm-listener-hoc.jsx
+++ b/src/lib/vm-listener-hoc.jsx
@@ -6,7 +6,7 @@ import VM from 'scratch-vm';
 import {connect} from 'react-redux';
 
 import {updateEditingTarget, updateTargets} from '../reducers/targets';
-import {updateBlockDrag} from '../reducers/blockdrag';
+import {updateBlockDrag} from '../reducers/block-drag';
 import {updateMonitors} from '../reducers/monitors';
 
 /*
diff --git a/src/reducers/blockdrag.js b/src/reducers/block-drag.js
similarity index 88%
rename from src/reducers/blockdrag.js
rename to src/reducers/block-drag.js
index cd424ea570b29dd2618ba51b6f6f08c00eafb6ce..5a261ceaa93459575a41046dc87b664c3af7c6b1 100644
--- a/src/reducers/blockdrag.js
+++ b/src/reducers/block-drag.js
@@ -1,4 +1,4 @@
-const BLOCK_DRAG_UPDATE = 'scratch-gui/blockdrag/BLOCK_DRAG_UPDATE';
+const BLOCK_DRAG_UPDATE = 'scratch-gui/block-drag/BLOCK_DRAG_UPDATE';
 
 const initialState = false;
 
diff --git a/src/reducers/gui.js b/src/reducers/gui.js
index 92cdab550dc53fac3fbd702cf373fac138762aa6..61ffa550189b3d320d0d1beda8e3ece07dd1ff92 100644
--- a/src/reducers/gui.js
+++ b/src/reducers/gui.js
@@ -1,7 +1,8 @@
 import {combineReducers} from 'redux';
 import colorPickerReducer from './color-picker';
 import customProceduresReducer from './custom-procedures';
-import blockDragReducer from './blockdrag';
+import blockDragReducer from './block-drag';
+import hoveredTargetSpriteReducer from './hovered-target-sprite';
 import intlReducer from './intl';
 import modalReducer from './modals';
 import monitorReducer from './monitors';
@@ -13,9 +14,10 @@ import stageSizeReducer from './stage-size';
 import {ScratchPaintReducer} from 'scratch-paint';
 
 export default combineReducers({
-    blockdrag: blockDragReducer,
+    blockDrag: blockDragReducer,
     colorPicker: colorPickerReducer,
     customProcedures: customProceduresReducer,
+    hoveredTargetSprite: hoveredTargetSpriteReducer,
     intl: intlReducer,
     stageSize: stageSizeReducer,
     modals: modalReducer,
diff --git a/src/reducers/hovered-target-sprite.js b/src/reducers/hovered-target-sprite.js
new file mode 100644
index 0000000000000000000000000000000000000000..38da69ca13129a889238f528f8d16d59b962153b
--- /dev/null
+++ b/src/reducers/hovered-target-sprite.js
@@ -0,0 +1,28 @@
+const SET_HOVERED_SPRITE = 'scratch-gui/hovered-target-sprite/SET_HOVERED_SPRITE';
+
+const initialState = null;
+
+const reducer = function (state, action) {
+    if (typeof state === 'undefined') state = initialState;
+    switch (action.type) {
+    case SET_HOVERED_SPRITE:
+        return action.spriteId;
+    default:
+        return state;
+    }
+};
+
+const setHoveredSprite = function (spriteId) {
+    return {
+        type: SET_HOVERED_SPRITE,
+        spriteId: spriteId,
+        meta: {
+            throttle: 30
+        }
+    };
+};
+
+export {
+    reducer as default,
+    setHoveredSprite
+};