diff --git a/src/lib/cloud-manager-hoc.jsx b/src/lib/cloud-manager-hoc.jsx
index 6ca6b7500fc22cb4e27b8ee8c741d81b80e35f13..73a66b8f482779ce28cf108dc9d2e2abc9526e8f 100644
--- a/src/lib/cloud-manager-hoc.jsx
+++ b/src/lib/cloud-manager-hoc.jsx
@@ -46,18 +46,22 @@ const cloudManagerHOC = function (WrappedComponent) {
             // This should cover info about the website specifically, like scrather status
             return !!(props.cloudHost && props.username && props.vm && props.projectId);
         }
+        shouldNotModifyCloudData (props) {
+            return (props.hasEverEnteredEditor && !props.canSave);
+        }
         shouldConnect (props) {
-            return !this.isConnected() && this.canUseCloud(props) && props.isShowingWithId;
+            return !this.isConnected() && this.canUseCloud(props) &&
+                props.isShowingWithId && !this.shouldNotModifyCloudData(props);
         }
         shouldDisconnect (props, prevProps) {
             return this.isConnected() &&
                 ( // Can no longer use cloud or cloud provider info is now stale
                     !this.canUseCloud(this.props) ||
                     (props.projectId !== prevProps.projectId) ||
-                    (props.username !== prevProps.username)
+                    (props.username !== prevProps.username) ||
+                    // Editing someone else's project
+                    this.shouldNotModifyCloudData(props)
                 );
-            // TODO need to add provisions for viewing someone
-            // else's project in editor mode
         }
         isConnected () {
             return this.cloudProvider && !!this.cloudProvider.connection;
@@ -83,6 +87,7 @@ const cloudManagerHOC = function (WrappedComponent) {
                 cloudHost,
                 projectId,
                 username,
+                hasEverEnteredEditor,
                 isShowingWithId,
                 /* eslint-enable no-unused-vars */
                 vm,
@@ -99,7 +104,9 @@ const cloudManagerHOC = function (WrappedComponent) {
     }
 
     CloudManager.propTypes = {
+        canSave: PropTypes.bool.isRequired,
         cloudHost: PropTypes.string,
+        hasEverEnteredEditor: PropTypes.bool,
         isShowingWithId: PropTypes.bool,
         projectId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
         username: PropTypes.string,
@@ -109,6 +116,7 @@ const cloudManagerHOC = function (WrappedComponent) {
     const mapStateToProps = state => {
         const loadingState = state.scratchGui.projectState.loadingState;
         return {
+            hasEverEnteredEditor: state.scratchGui.mode.hasEverEnteredEditor,
             isShowingWithId: getIsShowingWithId(loadingState),
             projectId: state.scratchGui.projectState.projectId
         };
diff --git a/src/reducers/gui.js b/src/reducers/gui.js
index 6ae91b95a6d986e1630a879c9f17d54e3e565c29..35046b343ad3d8ac19c8ecec5d2d659b1474cd25 100644
--- a/src/reducers/gui.js
+++ b/src/reducers/gui.js
@@ -60,7 +60,10 @@ const initPlayer = function (currentState) {
         currentState,
         {mode: {
             isFullScreen: currentState.mode.isFullScreen,
-            isPlayerOnly: true
+            isPlayerOnly: true,
+            // When initializing in player mode, make sure to reset
+            // hasEverEnteredEditorMode
+            hasEverEnteredEditor: false
         }}
     );
 };
@@ -70,7 +73,8 @@ const initFullScreen = function (currentState) {
         currentState,
         {mode: {
             isFullScreen: true,
-            isPlayerOnly: currentState.mode.isPlayerOnly
+            isPlayerOnly: currentState.mode.isPlayerOnly,
+            hasEverEnteredEditor: currentState.mode.hasEverEnteredEditor
         }}
     );
 };
diff --git a/src/reducers/mode.js b/src/reducers/mode.js
index d95cb1f9905c95befaa7673484e0d6d26235da2b..739ae163d93f7221c59387b4c2b57da0524e2230 100644
--- a/src/reducers/mode.js
+++ b/src/reducers/mode.js
@@ -3,7 +3,8 @@ const SET_PLAYER = 'scratch-gui/mode/SET_PLAYER';
 
 const initialState = {
     isFullScreen: false,
-    isPlayerOnly: false
+    isPlayerOnly: false,
+    hasEverEnteredEditor: true
 };
 
 const reducer = function (state, action) {
@@ -17,7 +18,8 @@ const reducer = function (state, action) {
     case SET_PLAYER:
         return {
             isFullScreen: state.isFullScreen,
-            isPlayerOnly: action.isPlayerOnly
+            isPlayerOnly: action.isPlayerOnly,
+            hasEverEnteredEditor: state.hasEverEnteredEditor || !action.isPlayerOnly
         };
     default:
         return state;