diff --git a/app/templates/play/level/tome/spell_palette_entry_popover.jade b/app/templates/play/level/tome/spell_palette_entry_popover.jade
index 1271847b2..e75f6451f 100644
--- a/app/templates/play/level/tome/spell_palette_entry_popover.jade
+++ b/app/templates/play/level/tome/spell_palette_entry_popover.jade
@@ -73,17 +73,17 @@ if !selectedMethod
         .docs-ace-container
           .docs-ace
             if language == 'javascript'
-              span= doc.owner + '.' + doc.name + '(' + argumentExamples.join(', ') + ');'
+              span= doc.owner + '.' + docName + '(' + argumentExamples.join(', ') + ');'
             else if language == 'coffeescript'
-              span= doc.ownerName + (doc.ownerName == '@' ? '' : '.') + doc.name + ' ' + argumentExamples.join(', ')
+              span= doc.ownerName + (doc.ownerName == '@' ? '' : '.') + docName + ' ' + argumentExamples.join(', ')
             else if language == 'python'
-              span= doc.ownerName + '.' + doc.name + '(' + argumentExamples.join(', ') + ')'
+              span= doc.ownerName + '.' + docName + '(' + argumentExamples.join(', ') + ')'
             else if language == 'clojure'
-              span= '(.' + doc.name + ' ' + doc.ownerName + ' ' + argumentExamples.join(', ') + ')'
+              span= '(.' + docName + ' ' + doc.ownerName + ' ' + argumentExamples.join(', ') + ')'
             else if language == 'lua'
-              span= doc.ownerName + ':' + doc.name + '(' + argumentExamples.join(', ') + ')'
+              span= doc.ownerName + ':' + docName + '(' + argumentExamples.join(', ') + ')'
             else if language == 'io'
-              span= (doc.ownerName == 'this' ? '' : doc.ownerName + ' ') + doc.name + '(' + argumentExamples.join(', ') + ')'
+              span= (doc.ownerName == 'this' ? '' : doc.ownerName + ' ') + docName + '(' + argumentExamples.join(', ') + ')'
 
 if (doc.type != 'function' && doc.type != 'snippet') || doc.name == 'now'
   p.value
diff --git a/app/views/play/level/tome/DocFormatter.coffee b/app/views/play/level/tome/DocFormatter.coffee
index 35ad8aeec..49ac48d4e 100644
--- a/app/views/play/level/tome/DocFormatter.coffee
+++ b/app/views/play/level/tome/DocFormatter.coffee
@@ -55,16 +55,17 @@ module.exports = class DocFormatter
         when 'coffeescript' then '@'
         else 'this'
       if @doc.type is 'function'
+        [docName, args] = @getDocNameAndArguments()
         sep = {clojure: ' '}[@options.language] ? ', '
-        argNames = (arg.name for arg in @doc.args ? []).join sep
+        argNames = args.join sep
         argString = if argNames then '__ARGS__' else ''
         @doc.shortName = switch @options.language
-          when 'coffeescript' then "#{ownerName}#{if ownerName is '@' then '' else '.'}#{@doc.name}#{if argString then ' ' + argString else '()'}"
-          when 'python' then "#{ownerName}.#{@doc.name}(#{argString})"
-          when 'lua' then "#{ownerName}:#{@doc.name}(#{argString})"
-          when 'clojure' then "(.#{@doc.name} #{ownerName}#{if argNames then ' ' + argString else ''})"
-          when 'io' then "#{if ownerName is 'this' then '' else ownerName + ' '}#{@doc.name}#{if argNames then '(' + argNames + ')' else ''}"
-          else "#{ownerName}.#{@doc.name}(#{argString});"
+          when 'coffeescript' then "#{ownerName}#{if ownerName is '@' then '' else '.'}#{docName}#{if argString then ' ' + argString else '()'}"
+          when 'python' then "#{ownerName}.#{docName}(#{argString})"
+          when 'lua' then "#{ownerName}:#{docName}(#{argString})"
+          when 'clojure' then "(.#{docName} #{ownerName}#{if argNames then ' ' + argString else ''})"
+          when 'io' then "#{if ownerName is 'this' then '' else ownerName + ' '}#{docName}#{if argNames then '(' + argNames + ')' else ''}"
+          else "#{ownerName}.#{docName}(#{argString});"
       else
         @doc.shortName = switch @options.language
           when 'coffeescript' then "#{ownerName}#{if ownerName is '@' then '' else '.'}#{@doc.name}"
@@ -76,7 +77,7 @@ module.exports = class DocFormatter
       @doc.shorterName = @doc.shortName
       if @doc.type is 'function' and argString
         @doc.shortName = @doc.shorterName.replace argString, argNames
-        @doc.shorterName = @doc.shorterName.replace argString, (if argNames.length > 6 then '...' else argNames)
+        @doc.shorterName = @doc.shorterName.replace argString, (if not /cast[A-Z]/.test(@doc.name) and argNames.length > 6 then '...' else argNames)
       if @options.language is 'javascript'
         @doc.shorterName = @doc.shortName.replace ';', ''
         if @doc.owner is 'this' or @options.tabbify
@@ -119,7 +120,10 @@ module.exports = class DocFormatter
         obj[prop] = @replaceSpriteName obj[prop]  # Do this before using the template, otherwise marked might get us first.
 
   formatPopover: ->
-    content = popoverTemplate doc: @doc, language: @options.language, value: @formatValue(), marked: marked, argumentExamples: (arg.example or arg.default or arg.name for arg in @doc.args ? []), writable: @options.writable, selectedMethod: @options.selectedMethod, cooldowns: @inferCooldowns(), item: @options.item
+    [docName, args] = @getDocNameAndArguments()
+    argumentExamples = (arg.example or arg.default or arg.name for arg in @doc.args ? [])
+    argumentExamples.unshift args[0] if args.length > argumentExamples.length
+    content = popoverTemplate doc: @doc, docName: docName, language: @options.language, value: @formatValue(), marked: marked, argumentExamples: argumentExamples, writable: @options.writable, selectedMethod: @options.selectedMethod, cooldowns: @inferCooldowns(), item: @options.item
     owner = if @doc.owner is 'this' then @options.thang else window[@doc.owner]
     content = @replaceSpriteName content
     content.replace /\#\{(.*?)\}/g, (s, properties) => @formatValue downTheChain(owner, properties.split('.'))
@@ -130,6 +134,15 @@ module.exports = class DocFormatter
     name = 'hero' if /Hero Placeholder/.test @options.thang.id
     s.replace /#{spriteName}/g, name
 
+  getDocNameAndArguments: ->
+    return [@doc.name, []] unless @doc.type is 'function'
+    docName = @doc.name
+    args = (arg.name for arg in @doc.args ? [])
+    if /cast[A-Z]/.test docName
+      docName = 'cast'
+      args.unshift '"' + _.string.dasherize(@doc.name).replace('cast-', '') + '"'
+    [docName, args]
+
   formatValue: (v) ->
     return null if @doc.type is 'snippet'
     return @options.thang.now() if @doc.name is 'now'