diff --git a/app/assets/images/avatars/ally_small.png b/app/assets/images/avatars/ally_small.png
deleted file mode 100644
index 6754b29a3..000000000
Binary files a/app/assets/images/avatars/ally_small.png and /dev/null differ
diff --git a/app/assets/images/avatars/archer.png b/app/assets/images/avatars/archer.png
deleted file mode 100644
index 3fff33935..000000000
Binary files a/app/assets/images/avatars/archer.png and /dev/null differ
diff --git a/app/assets/images/avatars/arrow.png b/app/assets/images/avatars/arrow.png
deleted file mode 100755
index f672a2bd2..000000000
Binary files a/app/assets/images/avatars/arrow.png and /dev/null differ
diff --git a/app/assets/images/avatars/arrow_tower.png b/app/assets/images/avatars/arrow_tower.png
deleted file mode 100644
index 3ecc78528..000000000
Binary files a/app/assets/images/avatars/arrow_tower.png and /dev/null differ
diff --git a/app/assets/images/avatars/artillery.png b/app/assets/images/avatars/artillery.png
deleted file mode 100644
index 6510dd80f..000000000
Binary files a/app/assets/images/avatars/artillery.png and /dev/null differ
diff --git a/app/assets/images/avatars/beam.png b/app/assets/images/avatars/beam.png
deleted file mode 100644
index 364e2e700..000000000
Binary files a/app/assets/images/avatars/beam.png and /dev/null differ
diff --git a/app/assets/images/avatars/beam_tower.png b/app/assets/images/avatars/beam_tower.png
deleted file mode 100644
index 3f2c3abf0..000000000
Binary files a/app/assets/images/avatars/beam_tower.png and /dev/null differ
diff --git a/app/assets/images/avatars/captain_anya.png b/app/assets/images/avatars/captain_anya.png
deleted file mode 100644
index dfa1425f3..000000000
Binary files a/app/assets/images/avatars/captain_anya.png and /dev/null differ
diff --git a/app/assets/images/avatars/enemy_flying.png b/app/assets/images/avatars/enemy_flying.png
deleted file mode 100644
index 951b4a44c..000000000
Binary files a/app/assets/images/avatars/enemy_flying.png and /dev/null differ
diff --git a/app/assets/images/avatars/enemy_large.png b/app/assets/images/avatars/enemy_large.png
deleted file mode 100644
index ac3d401ca..000000000
Binary files a/app/assets/images/avatars/enemy_large.png and /dev/null differ
diff --git a/app/assets/images/avatars/enemy_medium.png b/app/assets/images/avatars/enemy_medium.png
deleted file mode 100644
index 0b47f7723..000000000
Binary files a/app/assets/images/avatars/enemy_medium.png and /dev/null differ
diff --git a/app/assets/images/avatars/enemy_small.png b/app/assets/images/avatars/enemy_small.png
deleted file mode 100644
index 927ab3345..000000000
Binary files a/app/assets/images/avatars/enemy_small.png and /dev/null differ
diff --git a/app/assets/images/avatars/mage.png b/app/assets/images/avatars/mage.png
deleted file mode 100644
index 67c8000a5..000000000
Binary files a/app/assets/images/avatars/mage.png and /dev/null differ
diff --git a/app/assets/images/avatars/mushroom.png b/app/assets/images/avatars/mushroom.png
deleted file mode 100644
index 664581c61..000000000
Binary files a/app/assets/images/avatars/mushroom.png and /dev/null differ
diff --git a/app/assets/images/avatars/peasant.png b/app/assets/images/avatars/peasant.png
deleted file mode 100644
index 40dcb84d5..000000000
Binary files a/app/assets/images/avatars/peasant.png and /dev/null differ
diff --git a/app/assets/images/avatars/potion.png b/app/assets/images/avatars/potion.png
deleted file mode 100644
index d2c42e683..000000000
Binary files a/app/assets/images/avatars/potion.png and /dev/null differ
diff --git a/app/assets/images/avatars/shell.png b/app/assets/images/avatars/shell.png
deleted file mode 100644
index 292820568..000000000
Binary files a/app/assets/images/avatars/shell.png and /dev/null differ
diff --git a/app/assets/images/avatars/spear.png b/app/assets/images/avatars/spear.png
deleted file mode 100755
index 81a17bbe2..000000000
Binary files a/app/assets/images/avatars/spear.png and /dev/null differ
diff --git a/app/assets/images/avatars/sword.png b/app/assets/images/avatars/sword.png
deleted file mode 100644
index 993acfe7d..000000000
Binary files a/app/assets/images/avatars/sword.png and /dev/null differ
diff --git a/app/assets/images/avatars/tharin.png b/app/assets/images/avatars/tharin.png
deleted file mode 100644
index 8d3590d4a..000000000
Binary files a/app/assets/images/avatars/tharin.png and /dev/null differ
diff --git a/app/assets/images/avatars/thoktar.png b/app/assets/images/avatars/thoktar.png
deleted file mode 100644
index ab312f361..000000000
Binary files a/app/assets/images/avatars/thoktar.png and /dev/null differ
diff --git a/app/assets/images/avatars/thrower.png b/app/assets/images/avatars/thrower.png
deleted file mode 100644
index f086fef5a..000000000
Binary files a/app/assets/images/avatars/thrower.png and /dev/null differ
diff --git a/app/lib/surface/SpriteBoss.coffee b/app/lib/surface/SpriteBoss.coffee
index e8c75c907..14718d136 100644
--- a/app/lib/surface/SpriteBoss.coffee
+++ b/app/lib/surface/SpriteBoss.coffee
@@ -243,11 +243,10 @@ module.exports = class SpriteBoss extends CocoClass
 
     if alive and not @suppressSelectionSounds
       instance = sprite.playSound 'selected'
-      if instance.playState is 'playSucceeded'
+      if instance?.playState is 'playSucceeded'
         Backbone.Mediator.publish 'thang-began-talking', thang: sprite?.thang
         instance.addEventListener 'complete', ->
           Backbone.Mediator.publish 'thang-finished-talking', thang: sprite?.thang
-      console.log 'select...', instance.playState
 
   # Marks
 
diff --git a/app/lib/surface/sprite_utils.coffee b/app/lib/surface/sprite_utils.coffee
index c5a80db79..6d106e0aa 100644
--- a/app/lib/surface/sprite_utils.coffee
+++ b/app/lib/surface/sprite_utils.coffee
@@ -14,27 +14,3 @@ module.exports.createProgressBar = createProgressBar = (color, y, width=PROG_BAR
   s.width = width
   s.height = height
   return s
-
-module.exports.createAvatar = createAvatar = (spriteName, $image) ->
-  url = createAvatarURL spriteName
-  $image ?= $('<img>')
-  $image.attr('src', url)
-  $image
-
-module.exports.createAvatarURL = createAvatarURL = (spriteName) ->
-  # We destroyed old version of this; this is temp anyway
-  spriteName = _.string.slugify(spriteName).replace /-/g, '_'
-  spriteName = {
-    "anya": "captain_anya"
-    "soldier": "ally_small"
-    "ogre_munchkin": "enemy_small"
-    "ogre": "enemy_medium"
-    "ogre_brawler": "enemy_large"
-    "ogre_fangrider": "enemy_flying"
-    "ogre_shaman": "mage"
-    "ogre_thrower": "thrower"
-    "health_potion_small": "potion"
-    "health_potion_medium": "potion"
-    "health_potion_large": "potion"
-  }[spriteName] ? spriteName
-  "/images/avatars/#{spriteName}.png"
diff --git a/app/views/play/level/hud_view.coffee b/app/views/play/level/hud_view.coffee
index 0fb17f10d..e41e4ab22 100644
--- a/app/views/play/level/hud_view.coffee
+++ b/app/views/play/level/hud_view.coffee
@@ -3,7 +3,6 @@ template = require 'templates/play/level/hud'
 prop_template = require 'templates/play/level/hud_prop'
 action_template = require 'templates/play/level/hud_action'
 DialogueAnimator = require './dialogue_animator'
-spriteUtils = require 'lib/surface/sprite_utils'
 
 module.exports = class HUDView extends View
   id: 'thang-hud'
diff --git a/app/views/play/level/thang_avatar_view.coffee b/app/views/play/level/thang_avatar_view.coffee
index dd6b13a37..a03d4a63c 100644
--- a/app/views/play/level/thang_avatar_view.coffee
+++ b/app/views/play/level/thang_avatar_view.coffee
@@ -1,6 +1,6 @@
 View = require 'views/kinds/CocoView'
 template = require 'templates/play/level/thang_avatar'
-{createAvatarURL} = require 'lib/surface/sprite_utils'
+ThangType = require 'models/ThangType'
 
 module.exports = class ThangAvatarView extends View
   className: 'thang-avatar-view'
@@ -17,7 +17,10 @@ module.exports = class ThangAvatarView extends View
   getRenderData: (context={}) =>
     context = super context
     context.thang = @thang
-    context.avatarURL = createAvatarURL @thang.spriteName
+    thangs = @supermodel.getModels(ThangType)
+    thangs = (t for t in thangs when t.get('name') is @thang.spriteName)
+    thang = thangs[0]
+    context.avatarURL = thang.getPortraitSource()
     context.includeName = @includeName
     context
 
diff --git a/app/views/play/level/tome/spell.coffee b/app/views/play/level/tome/spell.coffee
index 93f1c36bc..0c256d751 100644
--- a/app/views/play/level/tome/spell.coffee
+++ b/app/views/play/level/tome/spell.coffee
@@ -7,7 +7,7 @@ module.exports = class Spell
   view: null
   entryView: null
 
-  constructor: (programmableMethod, @spellKey, @pathComponents, @session) ->
+  constructor: (programmableMethod, @spellKey, @pathComponents, @session, @supermodel) ->
     p = programmableMethod
     @name = p.name
     @source = @session.getSourceFor(@spellKey) ? p.source
@@ -17,7 +17,8 @@ module.exports = class Spell
     @thangs = {}
     @view = new SpellView {spell: @, session: @session}
     @view.render()  # Get it ready and code loaded in advance
-    @tabView = new SpellListTabEntryView spell: @
+    console.log 'spell creates tab entry view', @supermodel
+    @tabView = new SpellListTabEntryView spell: @, supermodel: @supermodel
     @tabView.render()
 
   addThang: (thang) ->
diff --git a/app/views/play/level/tome/spell_list_entry_thangs_view.coffee b/app/views/play/level/tome/spell_list_entry_thangs_view.coffee
index 6403b05e5..74e20aa5b 100644
--- a/app/views/play/level/tome/spell_list_entry_thangs_view.coffee
+++ b/app/views/play/level/tome/spell_list_entry_thangs_view.coffee
@@ -23,7 +23,7 @@ module.exports = class SpellListEntryThangsView extends View
     @avatars = []
     spellName = @spell.name
     for thang in @thangs
-      avatar = new ThangAvatarView thang: thang, includeName: true
+      avatar = new ThangAvatarView thang: thang, includeName: true, supermodel: @supermodel
       @$el.append avatar.el
       avatar.render()
       avatar.setSelected thang is @thang
diff --git a/app/views/play/level/tome/spell_list_entry_view.coffee b/app/views/play/level/tome/spell_list_entry_view.coffee
index 9499e967b..944326103 100644
--- a/app/views/play/level/tome/spell_list_entry_view.coffee
+++ b/app/views/play/level/tome/spell_list_entry_view.coffee
@@ -45,7 +45,7 @@ module.exports = class SpellListEntryView extends View
     super()
     return unless @options.showTopDivider  # Don't repeat Thang avatars when not changed from previous entry
     return unless spellThang = @getPrimarySpellThang()
-    @avatar = new ThangAvatarView thang: spellThang.thang, includeName: false
+    @avatar = new ThangAvatarView thang: spellThang.thang, includeName: false, supermodel: @supermodel
     @$el.prepend @avatar.el  # Before rendering, so render can use parent for popover
     @avatar.render()
     @avatar.setSharedThangs _.size @spell.thangs
@@ -69,7 +69,7 @@ module.exports = class SpellListEntryView extends View
   showThangs: =>
     clearTimeout @hideThangsTimeout if @hideThangsTimeout
     return if @thangsView
-    @thangsView = new SpellListEntryThangsView thangs: (spellThang.thang for thangID, spellThang of @spell.thangs), thang: @getPrimarySpellThang().thang, spell: @spell
+    @thangsView = new SpellListEntryThangsView thangs: (spellThang.thang for thangID, spellThang of @spell.thangs), thang: @getPrimarySpellThang().thang, spell: @spell, supermodel: @supermodel
     @thangsView.render()
     @$el.append @thangsView.el
     @thangsView.$el.mouseenter (e) => @onMouseEnterAvatar()
diff --git a/app/views/play/level/tome/spell_list_tab_entry_view.coffee b/app/views/play/level/tome/spell_list_tab_entry_view.coffee
index 2d4285ea7..9c4092646 100644
--- a/app/views/play/level/tome/spell_list_tab_entry_view.coffee
+++ b/app/views/play/level/tome/spell_list_tab_entry_view.coffee
@@ -1,7 +1,6 @@
 SpellListEntryView = require './spell_list_entry_view'
 ThangAvatarView = require 'views/play/level/thang_avatar_view'
 template = require 'templates/play/level/tome/spell_list_tab_entry'
-{createAvatarURL} = require 'lib/surface/sprite_utils'
 Docs = require 'lib/world/docs'
 
 module.exports = class SpellListTabEntryView extends SpellListEntryView
@@ -35,7 +34,7 @@ module.exports = class SpellListTabEntryView extends SpellListEntryView
     @buildDocs() unless @docsBuilt
 
   buildAvatar: ->
-    avatar = new ThangAvatarView thang: @thang, includeName: false
+    avatar = new ThangAvatarView thang: @thang, includeName: false, supermodel: @supermodel
     if @avatar
       @avatar.$el.replaceWith avatar.$el
       @avatar.destroy()
diff --git a/app/views/play/level/tome/spell_list_view.coffee b/app/views/play/level/tome/spell_list_view.coffee
index 38de566d8..bf09b1ca1 100644
--- a/app/views/play/level/tome/spell_list_view.coffee
+++ b/app/views/play/level/tome/spell_list_view.coffee
@@ -59,7 +59,7 @@ module.exports = class SpellListView extends View
       theseThangs = _.keys(spell.thangs)
       changedThangs = not lastThangs or not _.isEqual theseThangs, lastThangs
       lastThangs = theseThangs
-      @entries.push entry = new SpellListEntryView spell: spell, showTopDivider: changedThangs
+      @entries.push entry = new SpellListEntryView spell: spell, showTopDivider: changedThangs, supermodel: @supermodel
     for entry in @entries
       @$el.append entry.el
       entry.render()  # Render after appending so that we can access parent container for popover
diff --git a/app/views/play/level/tome/thang_list_entry_view.coffee b/app/views/play/level/tome/thang_list_entry_view.coffee
index beb9ebb0d..44b7ca915 100644
--- a/app/views/play/level/tome/thang_list_entry_view.coffee
+++ b/app/views/play/level/tome/thang_list_entry_view.coffee
@@ -42,7 +42,7 @@ module.exports = class ThangListEntryView extends View
 
   afterRender: ->
     super()
-    @avatar = new ThangAvatarView thang: @thang, includeName: true
+    @avatar = new ThangAvatarView thang: @thang, includeName: true, supermodel: @supermodel
     @$el.append @avatar.el  # Before rendering, so render can use parent for popover
     @avatar.render()
     @avatar.setSharedThangs @spells.length  # A bit weird to call it sharedThangs; could refactor if we like this
diff --git a/app/views/play/level/tome/thang_list_view.coffee b/app/views/play/level/tome/thang_list_view.coffee
index d7a847628..76f8892e7 100644
--- a/app/views/play/level/tome/thang_list_view.coffee
+++ b/app/views/play/level/tome/thang_list_view.coffee
@@ -62,7 +62,7 @@ module.exports = class ThangListView extends View
       section = @$el.find(section).toggle thangs.length > 0
       for thang in thangs
         spells = _.filter @spells, (s) -> thang.id of s.thangs
-        entry = new ThangListEntryView thang: thang, spells: spells, permission: permission
+        entry = new ThangListEntryView thang: thang, spells: spells, permission: permission, supermodel: @supermodel
         section.find('.thang-list').append entry.el  # Render after appending so that we can access parent container for popover
         entry.render()
         @entries.push entry
diff --git a/app/views/play/level/tome/tome_view.coffee b/app/views/play/level/tome/tome_view.coffee
index 34ef4608a..e4cacc120 100644
--- a/app/views/play/level/tome/tome_view.coffee
+++ b/app/views/play/level/tome/tome_view.coffee
@@ -52,15 +52,12 @@ module.exports = class TomeView extends View
     'click #spell-view': 'onSpellViewClick'
     'click': -> Backbone.Mediator.publish 'focus-editor'
 
-  constructor: (options) ->
-    super options
-
   afterRender: ->
     super()
     programmableThangs = _.filter @options.thangs, 'isProgrammable'
     @createSpells programmableThangs  # Do before spellList, thangList, and castButton
-    @spellList = @insertSubView new SpellListView spells: @spells
-    @thangList = @insertSubView new ThangListView spells: @spells, thangs: @options.thangs
+    @spellList = @insertSubView new SpellListView spells: @spells, supermodel: @supermodel
+    @thangList = @insertSubView new ThangListView spells: @spells, thangs: @options.thangs, supermodel: @supermodel
     @castButton = @insertSubView new CastButtonView spells: @spells
 
   createSpells: (programmableThangs) ->
@@ -80,7 +77,7 @@ module.exports = class TomeView extends View
         spellKey = pathComponents.join '/'
         @thangSpells[thang.id].push spellKey
         unless method.cloneOf
-          spell = @spells[spellKey] = new Spell method, spellKey, pathPrefixComponents.concat(pathComponents), @options.session
+          spell = @spells[spellKey] = new Spell method, spellKey, pathPrefixComponents.concat(pathComponents), @options.session, @supermodel
     for thangID, spellKeys of @thangSpells
       thang = world.getThangByID(thangID)
       @spells[spellKey].addThang thang for spellKey in spellKeys
diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee
index 41369f8a9..336d91deb 100644
--- a/app/views/play/level_view.coffee
+++ b/app/views/play/level_view.coffee
@@ -128,7 +128,7 @@ module.exports = class PlayLevelView extends View
     ctx.fillText("Loaded #{@modelsLoaded} thingies",50,50)
 
   insertSubviews: ->
-    @insertSubView @tome = new TomeView levelID: @levelID, session: @session, thangs: @world.thangs
+    @insertSubView @tome = new TomeView levelID: @levelID, session: @session, thangs: @world.thangs, supermodel: @supermodel
     @insertSubView new PlaybackView {}
     @insertSubView new GoalsView {}
     @insertSubView new HUDView {}