     $http.post('/game-versions', gameConverter.convertGameVersionToEmbeddedJson(currentGame.version))
       .then (savedGameVersion) -> currentGame.version = gameConverter.convertGameVersionFromEmbeddedJson(savedGameVersion.data)
 
-  # TODO: shouldn't this just define an object rather than returning an object? What's the role of the names?
   saveActions:
     none:
       name: 'No Action'
       execute: -> console.log 'games.saveActions.none executed'
-    createFromScratch:
-      name: 'Create'
-      execute: -> saveInfo().then(saveVersion)
     saveNewVersion:
       name: 'Save'
       execute: -> updateInfo().then(saveVersion)
     fork:
       name: 'Fork'
       execute: ->
+        # Removing the game ID will make the server provide a new one
         delete currentGame.info.id
-        saveInfo().then(saveVersion)
+        saveInfo().then -> 
+          $location.path("/game/#{currentGame.version.gameId}/edit")
+          saveVersion()
 
   loadJson: (gameName) ->
     deferred = $q.defer()

      return @saveActions.none
    if currentGame.info.id and currentGame.info.ownerId is loggedUser.profile.id
      return @saveActions.saveNewVersion
    else if currentGame.info.ownerId
      return @saveActions.fork
    else
      return @saveActions.createFromScratch

  loadAll: ->
    allGames = []

    return keys


.factory 'games', ($http, $q, $location, loggedUser, currentGame, gameConverter, gameHistory, gameTime) ->

  saveInfo = ->
    $http.post('/games', currentGame.info)
      .then (savedGame) ->
        currentGame.info = savedGame.data
        currentGame.version.gameId = currentGame.info.id
        $http.get("/users?id=#{currentGame.info.ownerId}")
      .then (creator) ->
        currentGame.creator = creator.data.username

  updateInfo = ->
    $http.put('/games', currentGame.info)
