diff --git a/src/lib/project-fetcher-hoc.jsx b/src/lib/project-fetcher-hoc.jsx
index 751339ba1a37fa859cca673689bff82a03bdbb33..861a0ad55cb3bc6eb40a3b8de24c6b036e742997 100644
--- a/src/lib/project-fetcher-hoc.jsx
+++ b/src/lib/project-fetcher-hoc.jsx
@@ -112,7 +112,6 @@ const ProjectFetcherHOC = function (WrappedComponent) {
         setInitialProjectId: PropTypes.func
     };
     ProjectFetcherComponent.defaultProps = {
-        // NOTE: shouldn't these settings be moved into webpack, like API_HOST?
         assetHost: 'https://assets.scratch.mit.edu',
         projectHost: 'https://projects.scratch.mit.edu'
     };
diff --git a/src/lib/project-saver-hoc.jsx b/src/lib/project-saver-hoc.jsx
index 20fdee849b157445fd3f53cd413246ad6e1667d5..188313fffe49833f95fcc8ab7f092264dc2ba4e8 100644
--- a/src/lib/project-saver-hoc.jsx
+++ b/src/lib/project-saver-hoc.jsx
@@ -1,6 +1,5 @@
 import React from 'react';
 import PropTypes from 'prop-types';
-import bindAll from 'lodash.bindall';
 import {connect} from 'react-redux';
 import VM from 'scratch-vm';
 
@@ -17,12 +16,6 @@ import {
  */
 const ProjectSaverHOC = function (WrappedComponent) {
     class ProjectSaverComponent extends React.Component {
-        constructor (props) {
-            super(props);
-            bindAll(this, [
-                'storeProject' // NOTE: do i need to bind this?
-            ]);
-        }
         componentDidUpdate (prevProps) {
             if (this.props.isSavingWithId && !prevProps.isSavingWithId) {
                 this.storeProject({
diff --git a/src/lib/storage.js b/src/lib/storage.js
index f98c21e880b96ddff0f03cdb9ccbf04313fc10fb..451919af0121d11d88665fb211bca37dd2ccd9e3 100644
--- a/src/lib/storage.js
+++ b/src/lib/storage.js
@@ -71,540 +71,3 @@ class Storage extends ScratchStorage {
 const storage = new Storage();
 
 export default storage;
-
-
-
-
-// ===good===
-// IncomingMessage {_readableState: ReadableState, readable: true, domain: null, _events: {…}, _eventsCount: 5, …}
-// auth:
-// cookie: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// scratchcsrftoken: "NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes"
-// __proto__: Object
-// body:
-// __proto__: Object
-// client: Socket
-// allowHalfOpen: true
-// bytesRead: (...)
-// bytesWritten: (...)
-// connecting: false
-// domain: null
-// localAddress: (...)
-// localPort: (...)
-// on: Æ’ socketOnWrap(ev, fn)
-// parser: HTTPParser {0: ƒ, 1: ƒ, 2: ƒ, 3: ƒ, 4: ƒ, _headers: Array(0), _url: "", _consumed: true, socket: Socket, incoming: IncomingMessage, …}
-// readable: true
-// remoteAddress: (...)
-// remoteFamily: (...)
-// remotePort: (...)
-// server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// writable: true
-// Symbol(asyncId): 5525
-// Symbol(asyncId): 5526
-// Symbol(bytesRead): 0
-// Symbol(triggerAsyncId): 5525
-// _bytesDispatched: 0
-// _destroyed: false
-// _events: {end: Array(2), finish: ƒ, _socketEnd: ƒ, drain: Array(2), timeout: ƒ, …}
-// _eventsCount: 10
-// _hadError: false
-// _handle: TCP {reading: true, owner: Socket, onread: ƒ, onconnection: null, writeQueueSize: 0, …}
-// _host: null
-// _httpMessage: ServerResponse {domain: null, _events: {…}, _eventsCount: 2, _maxListeners: undefined, output: Array(0), …}
-// _idleNext: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idlePrev: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idleStart: 21353611
-// _idleTimeout: 120000
-// _maxListeners: undefined
-// _parent: null
-// _paused: false
-// _peername: {address: "::ffff:172.19.0.1", family: "IPv6", port: 59242}
-// _pendingData: null
-// _pendingEncoding: ""
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// _sockname: null
-// _writableState: WritableState {objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, …}
-// bufferSize: (...)
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// readyState: (...)
-// writableHighWaterMark: (...)
-// _connecting: (...)
-// __proto__: Duplex
-// complete: true
-// connection: Socket
-// allowHalfOpen: true
-// bytesRead: (...)
-// bytesWritten: (...)
-// connecting: false
-// domain: null
-// localAddress: (...)
-// localPort: (...)
-// on: Æ’ socketOnWrap(ev, fn)
-// parser: HTTPParser {0: ƒ, 1: ƒ, 2: ƒ, 3: ƒ, 4: ƒ, _headers: Array(0), _url: "", _consumed: true, socket: Socket, incoming: IncomingMessage, …}
-// readable: true
-// remoteAddress: (...)
-// remoteFamily: (...)
-// remotePort: (...)
-// server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// writable: true
-// Symbol(asyncId): 5525
-// Symbol(asyncId): 5526
-// Symbol(bytesRead): 0
-// Symbol(triggerAsyncId): 5525
-// _bytesDispatched: 0
-// _destroyed: false
-// _events: {end: Array(2), finish: ƒ, _socketEnd: ƒ, drain: Array(2), timeout: ƒ, …}
-// _eventsCount: 10
-// _hadError: false
-// _handle: TCP {reading: true, owner: Socket, onread: ƒ, onconnection: null, writeQueueSize: 0, …}
-// _host: null
-// _httpMessage: ServerResponse {domain: null, _events: {…}, _eventsCount: 2, _maxListeners: undefined, output: Array(0), …}
-// _idleNext: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idlePrev: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idleStart: 21353611
-// _idleTimeout: 120000
-// _maxListeners: undefined
-// _parent: null
-// _paused: false
-// _peername: {address: "::ffff:172.19.0.1", family: "IPv6", port: 59242}
-// _pendingData: null
-// _pendingEncoding: ""
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// _sockname: null
-// _writableState: WritableState {objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, …}
-// bufferSize: (...)
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// readyState: (...)
-// writableHighWaterMark: (...)
-// _connecting: (...)
-// __proto__: Duplex
-// context:
-// id: "2000000008"
-// __proto__: Object
-// cookies:
-// gsScrollPos-2817: ""
-// gsScrollPos-10179: ""
-// gsScrollPos-1635031678: "0"
-// gsScrollPos-1635031685: ""
-// gsScrollPos-1635032454: ""
-// permissions: "{"admin":false,"social":true,"educator":false,"educator_invitee":false,"student":false}"
-// scratchcsrftoken: "NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes"
-// scratchlanguage: "en"
-// scratchsessionsid: ".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"
-// __utma: "111872281.696823194.1531177281.1537845990.1537895890.36"
-// __utmc: "111872281"
-// __utmz: "111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
-// _ga: "GA1.1.696823194.1531177281"
-// _gid: "GA1.1.55047185.1538366069"
-// __proto__: Object
-// domain: null
-// files:
-// sb3_file: File {domain: null, _events: {…}, _eventsCount: 0, _maxListeners: undefined, size: 42823, …}
-// __proto__: Object
-// headers:
-// accept: "*/*"
-// accept-encoding: "gzip, deflate, br"
-// accept-language: "en-US,en;q=0.9"
-// connection: "keep-alive"
-// content-length: "43014"
-// content-type: "multipart/form-data; boundary=----WebKitFormBoundary6Ce60BrLnBVSYaaA"
-// cookie: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// host: "localhost:8444"
-// origin: "http://localhost:8333"
-// referer: "http://localhost:8333/preview/2000000008/editor/"
-// user-agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
-// __proto__: Object
-// httpVersion: "1.1"
-// httpVersionMajor: 1
-// httpVersionMinor: 1
-// log: Logger {domain: null, _events: {…}, _eventsCount: 0, _maxListeners: undefined, _level: 30, …}
-// method: "PUT"
-// params:
-// id: "2000000008"
-// __proto__: Object
-// query:
-// __proto__: Object
-// rawBody: undefined
-// rawHeaders: Array(22)
-// 0: "Host"
-// 1: "localhost:8444"
-// 2: "Connection"
-// 3: "keep-alive"
-// 4: "Content-Length"
-// 5: "43014"
-// 6: "Origin"
-// 7: "http://localhost:8333"
-// 8: "User-Agent"
-// 9: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
-// 10: "Content-Type"
-// 11: "multipart/form-data; boundary=----WebKitFormBoundary6Ce60BrLnBVSYaaA"
-// 12: "Accept"
-// 13: "*/*"
-// 14: "Referer"
-// 15: "http://localhost:8333/preview/2000000008/editor/"
-// 16: "Accept-Encoding"
-// 17: "gzip, deflate, br"
-// 18: "Accept-Language"
-// 19: "en-US,en;q=0.9"
-// 20: "Cookie"
-// 21: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// length: 22
-// __proto__: Array(0)
-// rawTrailers: []
-// read: Æ’ (n)
-// readable: true
-// route:
-// method: "PUT"
-// name: "putid"
-// path: "/:id"
-// versions: []
-// __proto__: Object
-// serverName: "restify"
-// socket: Socket {connecting: false, _hadError: false, _handle: TCP, _parent: null, _host: null, …}
-// statusCode: null
-// statusMessage: null
-// timers: (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
-// trailers: {}
-// upgrade: false
-// url: "/2000000008"
-// _anonFuncCount: 5
-// _body: undefined
-// _cacheURL: "/2000000008"
-// _clen: 43014
-// _consuming: true
-// _contentType: "multipart/form-data"
-// _currentHandler: "handler-4"
-// _currentRoute: "putid"
-// _dtraceId: 231
-// _dumped: false
-// _events:
-// aborted: (3) [Æ’, Æ’, Æ’]
-// close: (2) [Æ’, Æ’]
-// data: Æ’ (buffer)
-// end: Æ’ ()
-// error: Æ’ (err)
-// _eventsCount: 5
-// _maxListeners: undefined
-// _parsedBody: true
-// _readBody: true
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _time: (2) [138053, 50816556]
-// _timerMap: {_sanitizePath: Array(2), handler-0: Array(2), handler-1: Array(2), parseCookies: Array(2), readBody: Array(2), …}
-// _url: Url
-// auth: null
-// hash: null
-// host: null
-// hostname: null
-// href: "/2000000008"
-// path: "/2000000008"
-// pathname: "/2000000008"
-// port: null
-// protocol: null
-// query: null
-// search: null
-// slashes: null
-// __proto__: Object
-// _version: "*"
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// __proto__: Readable
-//
-//
-// ===bad===
-// IncomingMessage {_readableState: ReadableState, readable: false, domain: null, _events: {…}, _eventsCount: 4, …}
-// auth:
-// cookie: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// scratchcsrftoken: "NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes"
-// __proto__: Object
-// body:
-// __proto__: Object
-// client: Socket
-// allowHalfOpen: true
-// bytesRead: (...)
-// bytesWritten: (...)
-// connecting: false
-// domain: null
-// localAddress: (...)
-// localPort: (...)
-// on: Æ’ socketOnWrap(ev, fn)
-// parser: HTTPParser {0: ƒ, 1: ƒ, 2: ƒ, 3: ƒ, 4: ƒ, _headers: Array(0), _url: "", _consumed: true, socket: Socket, incoming: IncomingMessage, …}
-// readable: true
-// remoteAddress: (...)
-// remoteFamily: (...)
-// remotePort: (...)
-// server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// writable: true
-// Symbol(asyncId): 5829
-// Symbol(asyncId): 5830
-// Symbol(bytesRead): 0
-// Symbol(triggerAsyncId): 5829
-// _bytesDispatched: 0
-// _destroyed: false
-// _events: {end: Array(2), finish: ƒ, _socketEnd: ƒ, drain: Array(2), timeout: ƒ, …}
-// _eventsCount: 10
-// _hadError: false
-// _handle: TCP {reading: true, owner: Socket, onread: ƒ, onconnection: null, writeQueueSize: 0, …}
-// _host: null
-// _httpMessage: ServerResponse {domain: null, _events: {…}, _eventsCount: 2, _maxListeners: undefined, output: Array(0), …}
-// _idleNext: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idlePrev: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idleStart: 21726357
-// _idleTimeout: 120000
-// _maxListeners: undefined
-// _parent: null
-// _paused: false
-// _peername: {address: "::ffff:172.19.0.1", family: "IPv6", port: 37098}
-// _pendingData: null
-// _pendingEncoding: ""
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// _sockname: null
-// _writableState: WritableState {objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, …}
-// bufferSize: (...)
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// readyState: (...)
-// writableHighWaterMark: (...)
-// _connecting: (...)
-// __proto__: Duplex
-// complete: true
-// connection: Socket
-// allowHalfOpen: true
-// bytesRead: (...)
-// bytesWritten: (...)
-// connecting: false
-// domain: null
-// localAddress: (...)
-// localPort: (...)
-// on: Æ’ socketOnWrap(ev, fn)
-// parser: HTTPParser {0: ƒ, 1: ƒ, 2: ƒ, 3: ƒ, 4: ƒ, _headers: Array(0), _url: "", _consumed: true, socket: Socket, incoming: IncomingMessage, …}
-// readable: true
-// remoteAddress: (...)
-// remoteFamily: (...)
-// remotePort: (...)
-// server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// writable: true
-// Symbol(asyncId): 5829
-// Symbol(asyncId): 5830
-// Symbol(bytesRead): 0
-// Symbol(triggerAsyncId): 5829
-// _bytesDispatched: 0
-// _destroyed: false
-// _events: {end: Array(2), finish: ƒ, _socketEnd: ƒ, drain: Array(2), timeout: ƒ, …}
-// _eventsCount: 10
-// _hadError: false
-// _handle: TCP {reading: true, owner: Socket, onread: ƒ, onconnection: null, writeQueueSize: 0, …}
-// _host: null
-// _httpMessage: ServerResponse {domain: null, _events: {…}, _eventsCount: 2, _maxListeners: undefined, output: Array(0), …}
-// _idleNext: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idlePrev: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idleStart: 21726357
-// _idleTimeout: 120000
-// _maxListeners: undefined
-// _parent: null
-// _paused: false
-// _peername: {address: "::ffff:172.19.0.1", family: "IPv6", port: 37098}
-// _pendingData: null
-// _pendingEncoding: ""
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// _sockname: null
-// _writableState: WritableState {objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, …}
-// bufferSize: (...)
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// readyState: (...)
-// writableHighWaterMark: (...)
-// _connecting: (...)
-// __proto__: Duplex
-// context:
-// id: "2000000008"
-// __proto__: Object
-// cookies:
-// gsScrollPos-2817: ""
-// gsScrollPos-10179: ""
-// gsScrollPos-1635031678: "0"
-// gsScrollPos-1635031685: ""
-// gsScrollPos-1635032454: ""
-// permissions: "{"admin":false,"social":true,"educator":false,"educator_invitee":false,"student":false}"
-// scratchcsrftoken: "NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes"
-// scratchlanguage: "en"
-// scratchsessionsid: ".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"
-// __utma: "111872281.696823194.1531177281.1537845990.1537895890.36"
-// __utmc: "111872281"
-// __utmz: "111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
-// _ga: "GA1.1.696823194.1531177281"
-// _gid: "GA1.1.55047185.1538366069"
-// __proto__: Object
-// domain: null
-// headers:
-// accept: "application/json"
-// accept-encoding: "gzip, deflate, br"
-// accept-language: "en-US,en;q=0.9"
-// connection: "keep-alive"
-// content-length: "2"
-// content-type: "application/json"
-// cookie: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// host: "localhost:8444"
-// origin: "http://localhost:8333"
-// referer: "http://localhost:8333/preview/2000000008/editor/"
-// user-agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
-// __proto__: Object
-// httpVersion: "1.1"
-// httpVersionMajor: 1
-// httpVersionMinor: 1
-// log: Logger {domain: null, _events: {…}, _eventsCount: 0, _maxListeners: undefined, _level: 30, …}
-// method: "PUT"
-// params:
-// id: "2000000008"
-// __proto__: Object
-// query:
-// __proto__: Object
-// rawBody: "{}"
-// rawHeaders: Array(22)
-// 0: "Host"
-// 1: "localhost:8444"
-// 2: "Connection"
-// 3: "keep-alive"
-// 4: "Content-Length"
-// 5: "2"
-// 6: "Accept"
-// 7: "application/json"
-// 8: "Origin"
-// 9: "http://localhost:8333"
-// 10: "User-Agent"
-// 11: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
-// 12: "Content-Type"
-// 13: "application/json"
-// 14: "Referer"
-// 15: "http://localhost:8333/preview/2000000008/editor/"
-// 16: "Accept-Encoding"
-// 17: "gzip, deflate, br"
-// 18: "Accept-Language"
-// 19: "en-US,en;q=0.9"
-// 20: "Cookie"
-// 21: "_ga=GA1.1.696823194.1531177281; __utmc=111872281; __utmz=111872281.1531504515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); gsScrollPos-10179=; gsScrollPos-2817=; scratchlanguage=en; gsScrollPos-1635031678=0; scratchsessionsid=".eJxVj09PhDAQxb9Lz7vI0JbC3vSkF42bGN0Tmf4BKtBuoEii8bvbGi6bTJrJe_Omv_kh62Jmh5MhJyLnDYr_hxxIg2vom-Q2VkcTuMiZqOtoBbME5f1gU2jz82D0bUCiGoxLqaQZF6zCYL3LdmPJzuY67uLDPhz3-tgkDuCFLoGWHJBR0FJwzTi0DAFbqejpqMq-hk1NT-uiX-szfXnnX48fTbi8xTWj76w72muCFkUGVZZnkABHdN2KXaKO_xyI_oyCb4KdzLd3Sb6fzByx7p7N1lziYbdn9bj0cUjlhZAt1QVvlZFKY8U0MKRIa1MxziWNVYIgv3_9K3Di:1g4qyD:THRZJ-mFgkO-KtGMzS-sP3KX5JA"; scratchcsrftoken=NjVKLOxdSPWCrBZDaPf89oyNWwKvEoes; permissions=%7B%22admin%22%3Afalse%2C%22social%22%3Atrue%2C%22educator%22%3Afalse%2C%22educator_invitee%22%3Afalse%2C%22student%22%3Afalse%7D; __utma=111872281.696823194.1531177281.1537845990.1537895890.36; gsScrollPos-1635032454=; gsScrollPos-1635031685=; _gid=GA1.1.55047185.1538366069"
-// length: 22
-// __proto__: Array(0)
-// rawTrailers: []
-// read: Æ’ (n)
-// arguments: (...)
-// caller: (...)
-// length: 1
-// name: ""
-// prototype: {constructor: Æ’}
-// __proto__: Æ’ ()
-// [[FunctionLocation]]: _stream_readable.js:365
-// [[Scopes]]: Scopes[2]
-// readable: false
-// route:
-// method: "PUT"
-// name: "putid"
-// path: "/:id"
-// versions: []
-// __proto__: Object
-// sb3:
-// project: null
-// tmpPath: null
-// zipData: null
-// __proto__: Object
-// serverName: "restify"
-// socket: Socket
-// allowHalfOpen: true
-// bytesRead: (...)
-// bytesWritten: (...)
-// connecting: false
-// domain: null
-// localAddress: (...)
-// localPort: (...)
-// on: Æ’ socketOnWrap(ev, fn)
-// parser: HTTPParser {0: ƒ, 1: ƒ, 2: ƒ, 3: ƒ, 4: ƒ, _headers: Array(0), _url: "", _consumed: true, socket: Socket, incoming: IncomingMessage, …}
-// readable: true
-// remoteAddress: (...)
-// remoteFamily: (...)
-// remotePort: (...)
-// server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// writable: true
-// Symbol(asyncId): 5829
-// Symbol(asyncId): 5830
-// Symbol(bytesRead): 0
-// Symbol(triggerAsyncId): 5829
-// _bytesDispatched: 0
-// _destroyed: false
-// _events: {end: Array(2), finish: ƒ, _socketEnd: ƒ, drain: Array(2), timeout: ƒ, …}
-// _eventsCount: 10
-// _hadError: false
-// _handle: TCP {reading: true, owner: Socket, onread: ƒ, onconnection: null, writeQueueSize: 0, …}
-// _host: null
-// _httpMessage: ServerResponse {domain: null, _events: {…}, _eventsCount: 2, _maxListeners: undefined, output: Array(0), …}
-// _idleNext: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idlePrev: TimersList {_idleNext: Socket, _idlePrev: Socket, _timer: Timer, _unrefed: true, msecs: 120000, …}
-// _idleStart: 21726357
-// _idleTimeout: 120000
-// _maxListeners: undefined
-// _parent: null
-// _paused: false
-// _peername: {address: "::ffff:172.19.0.1", family: "IPv6", port: 37098}
-// _pendingData: null
-// _pendingEncoding: ""
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _server: Server {domain: null, _events: {…}, _eventsCount: 9, _maxListeners: undefined, _connections: 2, …}
-// _sockname: null
-// _writableState: WritableState {objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, …}
-// bufferSize: (...)
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// readyState: (...)
-// writableHighWaterMark: (...)
-// _connecting: (...)
-// __proto__: Duplex
-// statusCode: null
-// statusMessage: null
-// timers: (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
-// trailers: {}
-// upgrade: false
-// url: "/2000000008"
-// _anonFuncCount: 5
-// _body: "{}"
-// _cacheURL: "/2000000008"
-// _clen: 2
-// _consuming: true
-// _contentType: "application/json"
-// _currentHandler: "handler-4"
-// _currentRoute: "putid"
-// _dtraceId: 243
-// _dumped: false
-// _events:
-// aborted: (3) [Æ’, Æ’, Æ’]
-// close: (3) [Æ’, Æ’, Æ’]
-// data: Æ’ onRequestData(chunk)
-// error: Æ’ ()
-// _eventsCount: 4
-// _maxListeners: undefined
-// _parsedBody: true
-// _readBody: true
-// _readableState: ReadableState {objectMode: false, highWaterMark: 16384, buffer: BufferList, length: 0, pipes: null, …}
-// _time: (2) [138425, 796848456]
-// _timerMap: {_sanitizePath: Array(2), handler-0: Array(2), handler-1: Array(2), parseCookies: Array(2), readBody: Array(2), …}
-// _url: Url
-// auth: null
-// hash: null
-// host: null
-// hostname: null
-// href: "/2000000008"
-// path: "/2000000008"
-// pathname: "/2000000008"
-// port: null
-// protocol: null
-// query: null
-// search: null
-// slashes: null
-// __proto__: Object
-// _version: "*"
-// destroyed: (...)
-// readableHighWaterMark: (...)
-// __proto__: Readable
diff --git a/src/playground/render-gui.jsx b/src/playground/render-gui.jsx
index a7df02ca2ae6e2da7c9e1db61ce794f0ad42dad7..920e5cd892479f9d9cfd460b088d02ee2a1891b7 100644
--- a/src/playground/render-gui.jsx
+++ b/src/playground/render-gui.jsx
@@ -21,7 +21,7 @@ export default appTarget => {
     // ability to compose reducers.
     const WrappedGui = compose(
         AppStateHOC,
-        HashParserHOC, // NOTE: IMPORTANT: ok that i've reordered this?
+        HashParserHOC,
         TitledHOC,
         ProjectMetaDataHOC
     )(GUI);
diff --git a/src/reducers/project-id.js b/src/reducers/project-id.js
index c425d3387268916f9bd130c162c77471b801ccb0..e0067cab14891582c0a64defad674d1f1fe0381b 100644
--- a/src/reducers/project-id.js
+++ b/src/reducers/project-id.js
@@ -188,7 +188,6 @@ const reducer = function (state, action) {
         }
         // if we were already showing something, only fetch project if the
         // project id has changed
-        // NOTE: test this to see if it works when switching between project page and editor.
         if (state.projectState === ProjectState.SHOWING_WITH_ID && state.projectId !== action.id) {
             return Object.assign({}, state, {
                 projectId: action.id,