diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee
index fcefb97fe..e832a9495 100644
--- a/app/lib/LevelLoader.coffee
+++ b/app/lib/LevelLoader.coffee
@@ -89,6 +89,8 @@ module.exports = class LevelLoader extends CocoClass
         @listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
 
   loadDependenciesForSession: (session) ->
+    if session is @session
+      Backbone.Mediator.publish 'level:session-loaded', level: @level, session: @session
     return unless @level.get('type', true) is 'hero'
     heroConfig = session.get('heroConfig')
     heroConfig ?= me.get('heroConfig')
@@ -101,8 +103,6 @@ module.exports = class LevelLoader extends CocoClass
       url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
       @worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
 
-    if session is @session
-      Backbone.Mediator.publish 'level:session-loaded', level: @level, session: @session
 
   # Grabbing the rest of the required data for the level
 
diff --git a/app/views/game-menu/GameMenuModal.coffee b/app/views/game-menu/GameMenuModal.coffee
index 87bc66af0..514f1e486 100644
--- a/app/views/game-menu/GameMenuModal.coffee
+++ b/app/views/game-menu/GameMenuModal.coffee
@@ -53,10 +53,12 @@ module.exports = class GameMenuModal extends ModalView
   updateConfig: ->
     sessionHeroConfig = $.extend {}, true, (@options.session.get('heroConfig') ? {})
     lastHeroConfig = me.get('heroConfig') ? {}
-    thangType = @subviews.choose_hero_view.selectedHero.get 'original'
+    thangType = @subviews.choose_hero_view.selectedHero?.get 'original'
     inventory = @subviews.inventory_view.getCurrentEquipmentConfig()
     patchSession = patchMe = false
-    props = thangType: thangType, inventory: inventory
+    props = {}
+    props.thangType = thangType if thangType
+    props.inventory = inventory if _.size inventory
     for key, val of props when val
       patchSession ||= not _.isEqual val, sessionHeroConfig[key]
       patchMe ||= not _.isEqual val, lastHeroConfig[key]
@@ -69,6 +71,7 @@ module.exports = class GameMenuModal extends ModalView
       aceConfig = me.get('aceConfig', true) ? {}
       aceConfig.language = codeLanguage
       me.set 'aceConfig', aceConfig
+    console.log 'update config from game menu modal; props:', props, 'patch session?', patchSession, 'patch me?', patchMe
     if patchSession
       @options.session.set 'heroConfig', sessionHeroConfig
       success = ->
diff --git a/app/views/game-menu/InventoryView.coffee b/app/views/game-menu/InventoryView.coffee
index db80333cf..ea35d572d 100644
--- a/app/views/game-menu/InventoryView.coffee
+++ b/app/views/game-menu/InventoryView.coffee
@@ -295,7 +295,7 @@ module.exports = class InventoryView extends CocoView
       'simple-boots': '53e237bf53457600003e3f05'
       'longsword': '53e218d853457600003e3ebe'
       'leather-tunic': '53e22eac53457600003e3efc'
-      'leather-boots': '53e2384453457600003e3f07'
+      #'leather-boots': '53e2384453457600003e3f07'
       'programmaticon-i': '53e4108204c00d4607a89f78'
       'crude-glasses': '53e238df53457600003e3f0b'
       'builders-hammer': '53f4e6e3d822c23505b74f42'
@@ -305,14 +305,14 @@ module.exports = class InventoryView extends CocoView
       'shadow-guard': {feet: 'simple-boots'}
       'true-names': {feet: 'simple-boots', 'right-hand': 'longsword'}
       'the-raised-sword': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic'}
-      'the-first-kithmaze': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
-      'the-second-kithmaze': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
-      'new-sight': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
-      'lowly-kithmen': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
-      'a-bolt-in-the-dark': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
-      'the-final-kithmaze': {feet: 'leather-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
-      'kithgard-gates': {feet: 'leather-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
-      'defence-of-plainswood': {feet: 'leather-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
+      'the-first-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
+      'the-second-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
+      'new-sight': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i'}
+      'lowly-kithmen': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
+      'a-bolt-in-the-dark': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
+      'the-final-kithmaze': {feet: 'simple-boots', 'right-hand': 'longsword', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
+      'kithgard-gates': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
+      'defence-of-plainswood': {feet: 'simple-boots', 'right-hand': 'builders-hammer', torso: 'leather-tunic', 'programming-book': 'programmaticon-i', eyes: 'crude-glasses'}
     necessaryGear = gearByLevel[@options.levelID]
     for slot, item of necessaryGear ? {}
       @equipment[slot] ?= gear[item]
diff --git a/app/views/play/level/PlayLevelView.coffee b/app/views/play/level/PlayLevelView.coffee
index a3ef21d75..891cc4862 100644
--- a/app/views/play/level/PlayLevelView.coffee
+++ b/app/views/play/level/PlayLevelView.coffee
@@ -362,7 +362,8 @@ module.exports = class PlayLevelView extends RootView
       AudioPlayer.preloadSound src
       Backbone.Mediator.subscribeOnce 'audio-player:loaded', @playAmbientSound, @
       return
-    @ambientSound = createjs.Sound.play src, loop: -1
+    @ambientSound = createjs.Sound.play src, loop: -1, volume: 0.1
+    createjs.Tween.get(@ambientSound).to({volume: 1.0}, 10000)
 
   restoreSessionState: ->
     return if @alreadyLoadedState
@@ -618,7 +619,7 @@ module.exports = class PlayLevelView extends RootView
 
   onSubmissionComplete: =>
     return if @destroyed
-    @showVictory() if @goalManager.checkOverallStatus() is 'success'
+    Backbone.Mediator.publish 'level:show-victory', showModal: true if @goalManager.checkOverallStatus() is 'success'
 
   destroy: ->
     @levelLoader?.destroy()
@@ -626,7 +627,9 @@ module.exports = class PlayLevelView extends RootView
     @god?.destroy()
     @goalManager?.destroy()
     @scriptManager?.destroy()
-    @ambientSound?.stop()
+    if ambientSound = @ambientSound
+      # Doesn't seem to work; stops immediately.
+      createjs.Tween.get(ambientSound).to({volume: 0.0}, 1500).call -> ambientSound.stop()
     $(window).off 'resize', @onWindowResize
     delete window.world # not sure where this is set, but this is one way to clean it up
     clearInterval(@pointerInterval)
diff --git a/server/plugins/achievements.coffee b/server/plugins/achievements.coffee
index 23b1aba56..040ecd2db 100644
--- a/server/plugins/achievements.coffee
+++ b/server/plugins/achievements.coffee
@@ -51,7 +51,7 @@ AchievablePlugin = (schema, options) ->
             achievement: achievement._id.toHexString()
             achievementName: achievement.get 'name'
 
-          worth = achievement.get('worth')
+          worth = achievement.get('worth') ? 10
           earnedPoints = 0
           wrapUp = ->
             # Update user's experience points