diff --git a/app/lib/surface/Surface.coffee b/app/lib/surface/Surface.coffee
index 865d512e0..878f92995 100644
--- a/app/lib/surface/Surface.coffee
+++ b/app/lib/surface/Surface.coffee
@@ -536,6 +536,9 @@ module.exports = Surface = class Surface extends CocoClass
     @onResize()
     @spriteBoss.selfWizardSprite?.toggle false
     @playing = false  # Will start when countdown is done.
+    if @heroSprite
+      @previousCameraZoom = @camera.zoom
+      @camera.zoomTo @heroSprite.imageObject, 4, 3000
 
   onRealTimePlaybackEnded: (e) ->
     return unless @realTime
@@ -543,6 +546,8 @@ module.exports = Surface = class Surface extends CocoClass
     @onResize()
     @spriteBoss.selfWizardSprite?.toggle true
     @canvas.removeClass 'flag-color-selected'
+    if @previousCameraZoom
+      @camera.zoomTo @camera.newTarget or @camera.target, @previousCameraZoom, 3000
 
   onFlagColorSelected: (e) ->
     @canvas.toggleClass 'flag-color-selected', Boolean(e.color)
diff --git a/app/templates/play/world-map-view.jade b/app/templates/play/world-map-view.jade
index 1d510edc6..f40b67fa2 100644
--- a/app/templates/play/world-map-view.jade
+++ b/app/templates/play/world-map-view.jade
@@ -6,7 +6,7 @@
     each level in campaign.levels
       - var next = !seenNext && levelStatusMap[level.id] != "complete";
       - seenNext = seenNext || next;
-      div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id)
+      div(style="left: #{level.x}%; bottom: #{level.y}%; background-color: #{campaign.color}", class="level" + (next ? " next" : "") + (level.disabled ? " disabled" : "") + " " + levelStatusMap[level.id] || "", data-level-id=level.id, title=level.name)
         a(href=level.type == 'hero' ? '#' : level.disabled ? "/play" : "/play/#{level.levelPath || 'level'}/#{level.id}", disabled=level.disabled, data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
       div(style="left: #{level.x}%; bottom: #{level.y}%", class="level-shadow" + (next ? " next" : "") + " " + levelStatusMap[level.id] || "")
       .level-info-container(data-level-id=level.id, data-level-path=level.levelPath || 'level', data-level-name=level.name)
diff --git a/app/views/play/WorldMapView.coffee b/app/views/play/WorldMapView.coffee
index b0a1b900e..01d0ae359 100644
--- a/app/views/play/WorldMapView.coffee
+++ b/app/views/play/WorldMapView.coffee
@@ -72,6 +72,7 @@ module.exports = class WorldMapView extends RootView
     super()
     @onWindowResize()
     _.defer => @$el.find('.game-controls button').tooltip()  # Have to defer or i18n doesn't take effect.
+    @$el.find('.level').tooltip()
 
   onSessionsLoaded: (e) ->
     for session in @sessions.models