diff --git a/extra/peg/parsers/parsers-tests.factor b/extra/peg/parsers/parsers-tests.factor
index 08bde98419..e80baf3c4f 100644
--- a/extra/peg/parsers/parsers-tests.factor
+++ b/extra/peg/parsers/parsers-tests.factor
@@ -48,3 +48,7 @@ IN: peg.parsers.tests
 
 [ V{ } ]
 [ "" epsilon parse parse-result-ast ] unit-test
+
+{ "a" } [
+  "a" "a" token just parse parse-result-ast
+] unit-test
\ No newline at end of file
diff --git a/extra/peg/parsers/parsers.factor b/extra/peg/parsers/parsers.factor
index 4bba60bb09..13509e81f7 100755
--- a/extra/peg/parsers/parsers.factor
+++ b/extra/peg/parsers/parsers.factor
@@ -3,14 +3,14 @@
 USING: kernel sequences strings namespaces math assocs shuffle 
      vectors arrays combinators.lib math.parser match
      unicode.categories sequences.deep peg peg.private 
-     peg.search math.ranges ;
+     peg.search math.ranges words ;
 IN: peg.parsers
 
 TUPLE: just-parser p1 ;
 
 : just-pattern
   [
-    dup [
+    execute dup [
       dup parse-result-remaining empty? [ drop f ] unless
     ] when
   ] ;
diff --git a/extra/peg/peg.factor b/extra/peg/peg.factor
index 1707193e70..ae5ed2f8b2 100755
--- a/extra/peg/peg.factor
+++ b/extra/peg/peg.factor
@@ -43,17 +43,16 @@ TUPLE: token-parser symbol ;
 
 MATCH-VARS: ?token ;
 
-: token-pattern ( -- quot )
-  [
-    ?token 2dup head? [
-      dup >r length tail-slice r> <parse-result>
-    ] [
-      2drop f
-    ] if 
-  ] ;
-  
+: parse-token ( input string -- result )
+  #! Parse the string, returning a parse result
+  2dup head? [
+    dup >r length tail-slice r> <parse-result>
+  ] [
+    2drop f
+  ] if ;
+
 M: token-parser (compile) ( parser -- quot )
-  token-parser-symbol \ ?token token-pattern match-replace ;
+  token-parser-symbol [ parse-token ] curry ;
       
 TUPLE: satisfy-parser quot ;