diff --git a/test/fixtures/extension_monitors_deserialization.sb3 b/test/fixtures/extension_monitors_deserialization.sb3
new file mode 100644
index 000000000..b15c37d5e
Binary files /dev/null and b/test/fixtures/extension_monitors_deserialization.sb3 differ
diff --git a/test/integration/extension_monitors_deserialization.js b/test/integration/extension_monitors_deserialization.js
new file mode 100644
index 000000000..916cca2ff
--- /dev/null
+++ b/test/integration/extension_monitors_deserialization.js
@@ -0,0 +1,41 @@
+const path = require('path');
+const test = require('tap').test;
+const makeTestStorage = require('../fixtures/make-test-storage');
+const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer;
+const VirtualMachine = require('../../src/index');
+
+const uri = path.resolve(__dirname, '../fixtures/extension_monitors_deserialization.sb3');
+const project = readFileToBuffer(uri);
+
+test('hidden extension monitors should not be deserialized', t => {
+    const vm = new VirtualMachine();
+    vm.attachStorage(makeTestStorage());
+
+    // Evaluate playground data and exit
+    vm.on('playgroundData', () => {
+        const monitors = vm.runtime.getMonitorState();
+        // Variable monitor should be deserialized, as it is not extension monitor
+        t.ok(monitors.some(monitor => monitor.mode === 'large' && monitor.opcode === 'data_variable'));
+        // Tempo monitor should be deserialized, as it is visible
+        t.ok(monitors.some(monitor => monitor.opcode === 'music_getTempo'));
+        // Language monitor should NOT be deserialized
+        t.notOk(monitors.some(monitor => monitor.opcode === 'translate_getViewerLanguage'));
+        t.end();
+        process.nextTick(process.exit);
+    });
+
+    // Start VM, load project, and run
+    t.doesNotThrow(() => {
+        vm.start();
+        vm.clear();
+        vm.setCompatibilityMode(false);
+        vm.setTurboMode(false);
+        vm.loadProject(project).then(() => {
+            vm.greenFlag();
+            setTimeout(() => {
+                vm.getPlaygroundData();
+                vm.stopAll();
+            }, 100);
+        });
+    });
+});