diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee
index 3453bcf38..980ccd955 100644
--- a/app/views/play/level/tome/SpellView.coffee
+++ b/app/views/play/level/tome/SpellView.coffee
@@ -532,7 +532,7 @@ module.exports = class SpellView extends CocoView
           # For now, update autocomplete to use hero instead of self/this, if hero is already used in the source.
           # Later, we should make this happen all the time - or better yet update the snippets.
           source = @getSource()
-          if /hero/.test(source)
+          if not /(self[\.\:]|this\.|\@)/.test(source)
             thisToken =
               'python': /self/,
               'javascript': /this/,
diff --git a/app/views/play/level/tome/TomeView.coffee b/app/views/play/level/tome/TomeView.coffee
index d60671af5..834128807 100644
--- a/app/views/play/level/tome/TomeView.coffee
+++ b/app/views/play/level/tome/TomeView.coffee
@@ -218,7 +218,7 @@ module.exports = class TomeView extends CocoView
 
   updateSpellPalette: (thang, spell) ->
     return unless thang and @spellPaletteView?.thang isnt thang and thang.programmableProperties or thang.apiProperties
-    useHero = /hero/.test(spell.getSource())
+    useHero = not /(self[\.\:]|this\.|\@)/.test(spell.getSource())
     @spellPaletteView = @insertSubView new SpellPaletteView thang: thang, supermodel: @supermodel, programmable: spell?.canRead(), language: spell?.language ? @options.session.get('codeLanguage'), session: @options.session, level: @options.level, courseID: @options.courseID, courseInstanceID: @options.courseInstanceID, useHero: useHero
     @spellPaletteView.toggleControls {}, spell.view.controlsEnabled if spell?.view   # TODO: know when palette should have been disabled but didn't exist