diff --git a/package.json b/package.json
index 3b7c7e967bc90027c1662e2ac1d3a5610266a2db..5ce6baf4f8d5b7b252ebdbcf0a34c4b1f9278f3c 100644
--- a/package.json
+++ b/package.json
@@ -53,6 +53,7 @@
     "react-redux": "5.0.2",
     "react-style-proptype": "2.0.1",
     "redux": "3.6.0",
+    "redux-throttle": "0.1.1",
     "scratch-audio": "latest",
     "scratch-blocks": "latest",
     "scratch-render": "latest",
diff --git a/src/index.jsx b/src/index.jsx
index a91c27b1d1b3665ebdff91233d5f8a79104c1e63..a7ba6255e0d9c9c11bfceb68d92d489b99082c45 100644
--- a/src/index.jsx
+++ b/src/index.jsx
@@ -1,7 +1,8 @@
 const React = require('react');
 const ReactDOM = require('react-dom');
 const {Provider} = require('react-redux');
-const {createStore} = require('redux');
+const {createStore, applyMiddleware} = require('redux');
+const throttle = require('redux-throttle').default;
 
 const GUI = require('./containers/gui.jsx');
 const log = require('./lib/log');
@@ -63,7 +64,9 @@ App.propTypes = {
 const appTarget = document.createElement('div');
 appTarget.className = styles.app;
 document.body.appendChild(appTarget);
-const store = createStore(
+const store = applyMiddleware(
+    throttle(300, {leading: true, trailing: true})
+)(createStore)(
     reducer,
     window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
 );
diff --git a/src/reducers/targets.js b/src/reducers/targets.js
index 2320698a424970ea5b083180ae42132c418e5255..c2f6219acea9de791eedbbe496bc0926448fe48f 100644
--- a/src/reducers/targets.js
+++ b/src/reducers/targets.js
@@ -55,19 +55,28 @@ const reducer = function (state, action) {
 reducer.updateTarget = function (target) {
     return {
         type: UPDATE_TARGET,
-        target: target
+        target: target,
+        meta: {
+            throttle: 30
+        }
     };
 };
 reducer.updateTargets = function (targetList) {
     return {
         type: UPDATE_TARGET_LIST,
-        targets: targetList
+        targets: targetList,
+        meta: {
+            throttle: 30
+        }
     };
 };
 reducer.updateEditingTarget = function (editingTarget) {
     return {
         type: UPDATE_EDITING_TARGET,
-        target: editingTarget
+        target: editingTarget,
+        meta: {
+            throttle: 30
+        }
     };
 };
 module.exports = reducer;