diff --git a/package.json b/package.json
index 6b32d44f06fddb1794c7cc6897e0ed2c1f68afde..f83f826fe736b0b758daa025e018a9fda572dfd2 100644
--- a/package.json
+++ b/package.json
@@ -105,12 +105,12 @@
     "rimraf": "^2.6.1",
     "scratch-audio": "0.1.0-prerelease.20190114210212",
     "scratch-blocks": "0.1.0-prerelease.1549643185",
-    "scratch-l10n": "3.1.20190206143031",
+    "scratch-l10n": "3.1.20190207224638",
     "scratch-paint": "0.2.0-prerelease.20190114205252",
-    "scratch-render": "0.1.0-prerelease.20190128154859",
+    "scratch-render": "0.1.0-prerelease.20190208165820",
     "scratch-storage": "1.2.2",
     "scratch-svg-renderer": "0.2.0-prerelease.20190125192231",
-    "scratch-vm": "0.2.0-prerelease.20190207191220",
+    "scratch-vm": "0.2.0-prerelease.20190207224121",
     "selenium-webdriver": "3.6.0",
     "startaudiocontext": "1.2.1",
     "style-loader": "^0.23.0",
diff --git a/src/components/loader/loader.jsx b/src/components/loader/loader.jsx
index 6f4b9658a9ab90a2617b3b3f140010781a2c1ba9..c51621fc41ad8d52596284ace87bff81be1af8e2 100644
--- a/src/components/loader/loader.jsx
+++ b/src/components/loader/loader.jsx
@@ -120,15 +120,13 @@ class LoaderComponent extends React.Component {
     constructor (props) {
         super(props);
         this.state = {
-            messageNumber: 0
+            messageNumber: this.chooseRandomMessage()
         };
     }
     componentDidMount () {
-        this.chooseRandomMessage();
-
         // Start an interval to choose a new message every 5 seconds
         this.intervalId = setInterval(() => {
-            this.chooseRandomMessage();
+            this.setState({messageNumber: this.chooseRandomMessage()});
         }, 5000);
     }
     componentWillUnmount () {
@@ -145,7 +143,7 @@ class LoaderComponent extends React.Component {
                 break;
             }
         }
-        this.setState({messageNumber});
+        return messageNumber;
     }
     render () {
         return (
diff --git a/src/lib/blocks.js b/src/lib/blocks.js
index eadf6d6fff6ec22e75f019178aef53e262bf4b9a..9ca3c6d7ed7b3a33cb83d65992f56f7e9f1cecfe 100644
--- a/src/lib/blocks.js
+++ b/src/lib/blocks.js
@@ -245,8 +245,15 @@ export default function (vm) {
                     // The block was in the flyout so look up future block info there.
                     lookupBlocks = vm.runtime.flyoutBlocks;
                 }
+                const sort = function (options) {
+                    options.sort((str1, str2) => str1.localeCompare(str2, [], {
+                        sensitivity: 'base',
+                        numeric: true
+                    }));
+                };
                 // Get all the stage variables (no lists) so we can add them to menu when the stage is selected.
                 const stageVariableOptions = vm.runtime.getTargetForStage().getAllVariableNamesInScopeByType('');
+                sort(stageVariableOptions);
                 const stageVariableMenuItems = stageVariableOptions.map(variable => [variable, variable]);
                 if (sensingOfBlock.inputs.OBJECT.shadow !== sensingOfBlock.inputs.OBJECT.block) {
                     // There's a block dropped on top of the menu. It'd be nice to evaluate it and
@@ -265,6 +272,7 @@ export default function (vm) {
                 // The target should exist, but there are ways for it not to (e.g. #4203).
                 if (target) {
                     spriteVariableOptions = target.getAllVariableNamesInScopeByType('', true);
+                    sort(spriteVariableOptions);
                 }
                 const spriteVariableMenuItems = spriteVariableOptions.map(variable => [variable, variable]);
                 return spriteOptions.concat(spriteVariableMenuItems);
diff --git a/src/lib/default-project/index.js b/src/lib/default-project/index.js
index df1154b6e8a7b34534c5370790164edcb375a408..92f01c908c1b3dfd05a71636fc71cd0eddfb3181 100644
--- a/src/lib/default-project/index.js
+++ b/src/lib/default-project/index.js
@@ -1,4 +1,3 @@
-import {TextEncoder} from 'text-encoding';
 import projectData from './project-data';
 
 /* eslint-disable import/no-unresolved */
@@ -9,8 +8,16 @@ import costume1 from '!raw-loader!./09dc888b0b7df19f70d81588ae73420e.svg';
 import costume2 from '!raw-loader!./3696356a03a8d938318876a593572843.svg';
 /* eslint-enable import/no-unresolved */
 
-const encoder = new TextEncoder();
 const defaultProject = translator => {
+    let _TextEncoder;
+    if (typeof TextEncoder === 'undefined') {
+        _TextEncoder = require('text-encoding').TextEncoder;
+    } else {
+        /* global TextEncoder */
+        _TextEncoder = TextEncoder;
+    }
+    const encoder = new _TextEncoder();
+
     const projectJson = projectData(translator);
     return [{
         id: 0,