diff --git a/package.json b/package.json
index 246d5ddb212ed54d5055b26765b7c9ce398470e7..6959e770d6ff15f87b2ac0dad792c2cd81a2409d 100644
--- a/package.json
+++ b/package.json
@@ -95,7 +95,7 @@
     "redux-throttle": "0.1.1",
     "rimraf": "^2.6.1",
     "scratch-audio": "0.1.0-prerelease.20180625202813",
-    "scratch-blocks": "0.1.0-prerelease.1531144787",
+    "scratch-blocks": "0.1.0-prerelease.1531338038",
     "scratch-l10n": "3.0.20180703181510",
     "scratch-paint": "0.2.0-prerelease.20180711151847",
     "scratch-render": "0.1.0-prerelease.20180618173030",
diff --git a/src/containers/blocks.jsx b/src/containers/blocks.jsx
index 20c6d482ff5c9a927d731d84200192b514fe2269..4c849837570a5871794cab5f961c3cb647cfd187 100644
--- a/src/containers/blocks.jsx
+++ b/src/containers/blocks.jsx
@@ -212,6 +212,8 @@ class Blocks extends React.Component {
         this.props.vm.addListener('targetsUpdate', this.onTargetsUpdate);
         this.props.vm.addListener('EXTENSION_ADDED', this.handleExtensionAdded);
         this.props.vm.addListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate);
+        this.props.vm.addListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate);
+        this.props.vm.addListener('PERIPHERAL_ERROR', this.handleStatusButtonUpdate);
     }
     detachVM () {
         this.props.vm.removeListener('SCRIPT_GLOW_ON', this.onScriptGlowOn);
@@ -223,6 +225,8 @@ class Blocks extends React.Component {
         this.props.vm.removeListener('targetsUpdate', this.onTargetsUpdate);
         this.props.vm.removeListener('EXTENSION_ADDED', this.handleExtensionAdded);
         this.props.vm.removeListener('BLOCKSINFO_UPDATE', this.handleBlocksInfoUpdate);
+        this.props.vm.removeListener('PERIPHERAL_CONNECTED', this.handleStatusButtonUpdate);
+        this.props.vm.removeListener('PERIPHERAL_ERROR', this.handleStatusButtonUpdate);
     }
 
     updateToolboxBlockValue (id, value) {
@@ -357,8 +361,8 @@ class Blocks extends React.Component {
     handleConnectionModalClose () {
         this.setState({connectionModal: null});
     }
-    handleStatusButtonUpdate (extensionId, status) {
-        this.ScratchBlocks.updateStatusButton(this.workspace, extensionId, status);
+    handleStatusButtonUpdate () {
+        this.ScratchBlocks.refreshStatusButtons(this.workspace);
     }
     handlePromptCallback (input, optionSelection) {
         this.state.prompt.callback(input, optionSelection,
diff --git a/src/containers/connection-modal.jsx b/src/containers/connection-modal.jsx
index b256b03095835eca16d1d33520a8185fbe6b7461..ffb5c6ddf5c3b4ec05d61d1cbca8b7c05ac13d3d 100644
--- a/src/containers/connection-modal.jsx
+++ b/src/containers/connection-modal.jsx
@@ -56,13 +56,13 @@ class ConnectionModal extends React.Component {
         this.props.onCancel();
     }
     handleError () {
-        this.props.onStatusButtonUpdate(this.props.extensionId, 'not ready');
+        this.props.onStatusButtonUpdate();
         this.setState({
             phase: PHASES.error
         });
     }
     handleConnected () {
-        this.props.onStatusButtonUpdate(this.props.extensionId, 'ready');
+        this.props.onStatusButtonUpdate();
         this.setState({
             phase: PHASES.connected
         });
diff --git a/src/lib/blocks.js b/src/lib/blocks.js
index c1bde0ff2e69c310977c84308cd73c802655d28f..f6b78b68ee4a325c5d03701e8d484466ba856f0c 100644
--- a/src/lib/blocks.js
+++ b/src/lib/blocks.js
@@ -208,5 +208,12 @@ export default function (vm) {
         return monitoredBlock ? monitoredBlock.isMonitored : false;
     };
 
+    ScratchBlocks.FlyoutExtensionCategoryHeader.getExtensionState = function (extensionId) {
+        if (vm.getPeripheralIsConnected(extensionId)) {
+            return ScratchBlocks.StatusButtonState.READY;
+        }
+        return ScratchBlocks.StatusButtonState.NOT_READY;
+    };
+
     return ScratchBlocks;
 }