diff --git a/src/toolsrc/plforth.pla b/src/toolsrc/plforth.pla
index bed57d7..ac345c6 100644
--- a/src/toolsrc/plforth.pla
+++ b/src/toolsrc/plforth.pla
@@ -111,7 +111,8 @@ predef _immediate_#0, _exit_#0, _pad_#1, _trailing_(a,b)#2
 predef _tors_(a)#0, _fromrs_#1, _toprs_#1, _execute_(a)#0, _lookup_#1
 predef _move_(a,b,c)#0, _fill_(a,b,c)#0, _plasma_(a)#0
 predef _var_(a)#0, _const_(a)#0, _lit_#1, _slit_#1, _find_(a)#2, _tick_#1
-predef _forget_#0, _terminal_#1, _prat_(a)#0, _prhexat_(a)#0, _str_#0, _prstr_#0, _prpstr_#0
+predef _forget_#0, _terminal_#1, _prat_(a)#0, _prhexat_(a)#0
+predef _char_#0, _str_#0, _prstr_#0, _prpstr_#0
 predef _prval_(a)#0, _prbyte_(a)#0, _prshex_(a)#0, _prsbyte_(a)#0, _prhex_(a)#0
 predef _accept_(a,b)#1, _src_(a)#0, _srcstr_#0, _query_#0, _expect_(a,b)#0, _type_(a,b)#0
 predef _vlist_#0, _tron_#0, _troff_#0, _stepon_#0, _stepoff_#0
@@ -580,10 +581,14 @@ word = @d_space, 0, @_spaces_
 char d_type = "TYPE"
 byte = 0
 word = @d_spaces, 0, @_type_
+// CHAR
+char d_char = "CHAR"
+byte = imm_flag
+word = @d_type, 0, @_char_
 // STRING
 char d_str = "\""
 byte = imm_flag
-word = @d_type, 0, @_str_
+word = @d_char, 0, @_str_
 // LITERAL STRING ( not in vocabulary )
 char d_slit = "SLIT"
 byte = param_flag | inline_flag
@@ -1670,6 +1675,17 @@ end
 def _prhexat_(a)#0
   putc('$'); puth(*a); putc(' ')
 end
+def _char_#0
+  word str
+  byte len
+
+  str, len = nextword(' ')
+  if state & comp_flag
+    compliteral(^str)
+  else
+    (@push)(^str)#0
+  fin
+end
 def _str_#0
   word str
   byte len