diff --git a/app/lib/God.coffee b/app/lib/God.coffee
index d09be3408..4cd1afe00 100644
--- a/app/lib/God.coffee
+++ b/app/lib/God.coffee
@@ -103,7 +103,7 @@ module.exports = class God
     window.BOX2D_ENABLED = true
     @lastSerializedWorldFrames = serialized.frames
 
-  finishBeholdingWorld: (newWorld) =>
+  finishBeholdingWorld: (newWorld) ->
     newWorld.findFirstChangedFrame @world
     @world = newWorld
     errorCount = (t for t in @world.thangs when t.errorsOut).length
diff --git a/app/lib/scripts/ScriptManager.coffee b/app/lib/scripts/ScriptManager.coffee
index 5ed0680ee..dee228362 100644
--- a/app/lib/scripts/ScriptManager.coffee
+++ b/app/lib/scripts/ScriptManager.coffee
@@ -182,7 +182,7 @@ module.exports = ScriptManager = class ScriptManager extends CocoClass
 
   # STARTING NOTES
 
-  run: =>
+  run: ->
     # catch all for analyzing the current state and doing whatever needs to happen next
     return if @scriptInProgress
     @skipAhead()
diff --git a/app/lib/surface/Surface.coffee b/app/lib/surface/Surface.coffee
index 251971109..81688a099 100644
--- a/app/lib/surface/Surface.coffee
+++ b/app/lib/surface/Surface.coffee
@@ -92,6 +92,10 @@ module.exports = Surface = class Surface extends CocoClass
     @stage.removeEventListener 'stagemousemove', @onMouseMove
     @stage.removeEventListener 'stagemousedown', @onMouseDown
     @stage.removeAllEventListeners()
+    @playScrubbedSounds = null
+    @onMouseMove = null
+    @onMouseDown = null
+    @tick = null
     
   setWorld: (@world) ->
     @worldLoaded = true
diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee
index b4bdd69d3..b1ea0e2d3 100644
--- a/app/views/kinds/CocoView.coffee
+++ b/app/views/kinds/CocoView.coffee
@@ -11,7 +11,7 @@ makeScopeName = -> "view-scope-#{classCount++}"
 module.exports = class CocoView extends Backbone.View
   startsLoading: false
   cache: true # signals to the router to keep this view around
-  template: => ''
+  template: -> ''
 
   events:
     'click a': 'toggleModal'
@@ -41,6 +41,7 @@ module.exports = class CocoView extends Backbone.View
     @stopListeningToShortcuts()
     @undelegateEvents() # removes both events and subs
     view.destroy() for id, view of @subviews
+    @modalClosed = null
 
   afterInsert: ->
 
@@ -60,7 +61,7 @@ module.exports = class CocoView extends Backbone.View
 
   # View Rendering
 
-  render: =>
+  render: ->
     return @ unless me
     super()
     return @template if _.isString(@template)
@@ -70,7 +71,7 @@ module.exports = class CocoView extends Backbone.View
     @$el.i18n()
     @
 
-  getRenderData: (context) =>
+  getRenderData: (context) ->
     context ?= {}
     context.isProduction = document.location.href.search(/codecombat.com/) isnt -1
     context.me = me
@@ -81,7 +82,6 @@ module.exports = class CocoView extends Backbone.View
     context
 
   afterRender: ->
-    @registerModalsWithin()
 
   # Modals
 
@@ -95,12 +95,6 @@ module.exports = class CocoView extends Backbone.View
     view = application.router.getView(target, '_modal') # could set up a system for loading cached modals, if told to    
     @openModalView(view)
 
-  registerModalsWithin: (e...) ->
-    # TODO: Get rid of this part
-    for modal in $('.modal', @$el)      
-#      console.warn 'Registered modal to get rid of...', modal
-      $(modal).on('show.bs.modal', @clearModals)
-
   openModalView: (modalView) ->
     return if @waitingModal # can only have one waiting at once
     if visibleModal
@@ -112,11 +106,11 @@ module.exports = class CocoView extends Backbone.View
     modalView.afterInsert()
     visibleModal = modalView
     modalOptions = {show: true, backdrop: if modalView.closesOnClickOutside then true else 'static'}
-    $('#modal-wrapper .modal').modal(modalOptions).on('hidden.bs.modal', => @modalClosed())
+    $('#modal-wrapper .modal').modal(modalOptions).on('hidden.bs.modal', @modalClosed)
     window.currentModal = modalView
     @getRootView().stopListeningToShortcuts(true)
 
-  modalClosed: =>      
+  modalClosed: =>
     visibleModal.willDisappear() if visibleModal
     visibleModal.destroy()
     visibleModal = null
@@ -128,12 +122,6 @@ module.exports = class CocoView extends Backbone.View
       @getRootView().listenToShortcuts(true)
       Backbone.Mediator.publish 'modal-closed'
 
-  clearModals: =>    
-    if visibleModal      
-      visibleModal.$el.addClass('hide')
-      waitingModal = null
-      @modalClosed()
-
   # Loading RootViews
 
   showLoading: ($el=@$el) ->
diff --git a/app/views/play/level/control_bar_view.coffee b/app/views/play/level/control_bar_view.coffee
index df8d9f19f..b70bc95ea 100644
--- a/app/views/play/level/control_bar_view.coffee
+++ b/app/views/play/level/control_bar_view.coffee
@@ -45,7 +45,7 @@ module.exports = class ControlBarView extends View
     text += " (#{numPlayers})" if numPlayers > 1
     $('#multiplayer-button', @$el).text(text)
 
-  getRenderData: (context={}) =>
+  getRenderData: (context={}) ->
     super context
     context.worldName = @worldName
     context.multiplayerEnabled = @session.get('multiplayer')
diff --git a/app/views/play/level/playback_view.coffee b/app/views/play/level/playback_view.coffee
index ebc74d803..a10363fbf 100644
--- a/app/views/play/level/playback_view.coffee
+++ b/app/views/play/level/playback_view.coffee
@@ -43,7 +43,7 @@ module.exports = class PlaybackView extends View
     super(arguments...)
     me.on('change:music', @updateMusicButton, @)
 
-  afterRender: =>
+  afterRender: ->
     super()
     @hookUpScrubber()
     @updateMusicButton()
@@ -62,7 +62,7 @@ module.exports = class PlaybackView extends View
   onWindowResize: (s...) =>
     @barWidth = $('.progress', @$el).width()
 
-  onNewWorld: (e) =>
+  onNewWorld: (e) ->
     pct = parseInt(100 * e.world.totalFrames / e.world.maxTotalFrames) + '%'
     @barWidth = $('.progress', @$el).css('width', pct).removeClass('hide').width()
 
@@ -79,7 +79,7 @@ module.exports = class PlaybackView extends View
   onEditWizardSettings: ->
     Backbone.Mediator.publish 'edit-wizard-settings'
 
-  onDisableControls: (e) =>
+  onDisableControls: (e) ->
     if not e.controls or 'playback' in e.controls
       @disabled = true
       $('button', @$el).addClass('disabled')
@@ -91,7 +91,7 @@ module.exports = class PlaybackView extends View
       @hoverDisabled = true
     $('#volume-button', @$el).removeClass('disabled')
 
-  onEnableControls: (e) =>
+  onEnableControls: (e) ->
     if not e.controls or 'playback' in e.controls
       @disabled = false
       $('button', @$el).removeClass('disabled')
@@ -102,7 +102,7 @@ module.exports = class PlaybackView extends View
     if not e.controls or 'playback-hover' in e.controls
       @hoverDisabled = false
 
-  onSetPlaying: (e) =>
+  onSetPlaying: (e) ->
     @playing = (e ? {}).playing ? true
     button = @$el.find '#play-button'
     ended = button.hasClass 'ended'
@@ -241,3 +241,7 @@ module.exports = class PlaybackView extends View
     super()
     me.off('change:music', @updateMusicButton, @)
     $(window).off('resize', @onWindowResize)
+    @onWindowResize = null
+    @onProgressMouseOver = null
+    @onProgressMouseLeave = null
+    @onProgressMouseMove = null
diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee
index 75d247617..2d4201829 100644
--- a/app/views/play/level_view.coffee
+++ b/app/views/play/level_view.coffee
@@ -385,6 +385,7 @@ module.exports = class PlayLevelView extends View
     @goalManager?.destroy()
     @scriptManager?.destroy()
     $(window).off('resize', @onWindowResize)
+    delete window.world # not sure where this is set, but this is one way to clean it up
 
     clearInterval(@pointerInterval)
     @bus?.destroy()