diff --git a/basis/locals/locals-tests.factor b/basis/locals/locals-tests.factor
index 003ef459e3..ca6697be1c 100644
--- a/basis/locals/locals-tests.factor
+++ b/basis/locals/locals-tests.factor
@@ -346,7 +346,6 @@ M:: sequence method-with-locals ( a -- y ) a reverse ;
 
 { 3 1 } [| from to seq | T{ slice f from to seq } ] must-infer-as
 
-
 :: literal-identity-test ( -- a b )
     { } V{ } ;
 
@@ -356,6 +355,10 @@ M:: sequence method-with-locals ( a -- y ) a reverse ;
     swapd [ eq? ] [ eq? ] 2bi*
 ] unit-test
 
+:: mutable-local-in-literal-test ( a! -- b ) a 1 + a! { a } ;
+
+[ { 4 } ] [ 3 mutable-local-in-literal-test ] unit-test
+
 :: compare-case ( obj1 obj2 lt-quot eq-quot gt-quot -- )
     obj1 obj2 <=> {
         { +lt+ [ lt-quot call ] }
diff --git a/basis/regexp/parser/parser.factor b/basis/regexp/parser/parser.factor
index d04016b93a..b7716d8580 100644
--- a/basis/regexp/parser/parser.factor
+++ b/basis/regexp/parser/parser.factor
@@ -137,7 +137,7 @@ ERROR: bad-special-group string ;
 DEFER: (parse-regexp)
 : nested-parse-regexp ( token ? -- )
     [ push-stack (parse-regexp) pop-stack ] dip
-    [ <negation> ] when pop-stack boa push-stack ;
+    [ <negation> ] when pop-stack new swap >>term push-stack ;
 
 ! non-capturing groups
 : (parse-special-group) ( -- )
diff --git a/basis/regexp/regexp-tests.factor b/basis/regexp/regexp-tests.factor
index 2339628801..2a6c0dc16f 100644
--- a/basis/regexp/regexp-tests.factor
+++ b/basis/regexp/regexp-tests.factor
@@ -2,6 +2,9 @@ USING: regexp tools.test kernel sequences regexp.parser
 regexp.traversal eval ;
 IN: regexp-tests
 
+\ <regexp> must-infer
+\ matches? must-infer
+
 [ f ] [ "b" "a*" <regexp> matches? ] unit-test
 [ t ] [ "" "a*" <regexp> matches? ] unit-test
 [ t ] [ "a" "a*" <regexp> matches? ] unit-test
diff --git a/basis/regexp/traversal/traversal.factor b/basis/regexp/traversal/traversal.factor
index 91c7ce16dc..c9e8a54348 100644
--- a/basis/regexp/traversal/traversal.factor
+++ b/basis/regexp/traversal/traversal.factor
@@ -107,7 +107,8 @@ M: capture-group-off flag-action ( dfa-traverser flag -- )
 : increment-state ( dfa-traverser state -- dfa-traverser )
     [
         dup traverse-forward>>
-        [ 1+ ] [ 1- ] ? change-current-index
+        [ [ 1+ ] change-current-index ]
+        [ [ 1- ] change-current-index ] if
         dup current-state>> >>last-state
     ] dip
     first >>current-state ;
diff --git a/basis/regexp/utils/utils-tests.factor b/basis/regexp/utils/utils-tests.factor
new file mode 100644
index 0000000000..d048ad4be1
--- /dev/null
+++ b/basis/regexp/utils/utils-tests.factor
@@ -0,0 +1,4 @@
+USING: regexp.utils tools.test ;
+IN: regexp.utils.tests
+
+[ [ ] [ ] while-changes ] must-infer
diff --git a/basis/regexp/utils/utils.factor b/basis/regexp/utils/utils.factor
index fb058ecf92..5116dd2b7e 100644
--- a/basis/regexp/utils/utils.factor
+++ b/basis/regexp/utils/utils.factor
@@ -5,9 +5,7 @@ namespaces regexp.backend sequences unicode.categories
 math.ranges fry combinators.short-circuit vectors ;
 IN: regexp.utils
 
-: (while-changes) ( obj quot pred pred-ret -- obj )
-    ! quot: ( obj -- obj' )
-    ! pred: ( obj -- <=> )
+: (while-changes) ( obj quot: ( obj -- obj' ) pred: ( obj -- <=> ) pred-ret -- obj )
     [ [ dup slip ] dip pick over call ] dip dupd =
     [ 3drop ] [ (while-changes) ] if ; inline recursive
 
diff --git a/extra/benchmark/regex-dna/regex-dna-tests.factor b/extra/benchmark/regex-dna/regex-dna-tests.factor
index 79765849b5..9f64d438c7 100644
--- a/extra/benchmark/regex-dna/regex-dna-tests.factor
+++ b/extra/benchmark/regex-dna/regex-dna-tests.factor
@@ -4,7 +4,7 @@ IN: benchmark.regex-dna.tests
 
 [ t ] [
     "resource:extra/benchmark/regex-dna/regex-dna-test-in.txt"
-    [ regex-dna ] with-string-writer string-lines
+    [ regex-dna ] with-string-writer <string-reader> lines
     "resource:extra/benchmark/regex-dna/regex-dna-test-out.txt"
     ascii file-lines =
 ] unit-test
diff --git a/extra/galois-talk/authors.txt b/extra/galois-talk/authors.txt
new file mode 100644
index 0000000000..1901f27a24
--- /dev/null
+++ b/extra/galois-talk/authors.txt
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/extra/galois-talk/summary.txt b/extra/galois-talk/summary.txt
new file mode 100644
index 0000000000..00f30acf8d
--- /dev/null
+++ b/extra/galois-talk/summary.txt
@@ -0,0 +1 @@
+Slides from a talk at Galois by Slava Pestov, October 2008
diff --git a/extra/galois-talk/tags.txt b/extra/galois-talk/tags.txt
new file mode 100644
index 0000000000..cb5fc203e1
--- /dev/null
+++ b/extra/galois-talk/tags.txt
@@ -0,0 +1 @@
+demos
diff --git a/extra/google-tech-talk/authors.txt b/extra/google-tech-talk/authors.txt
new file mode 100644
index 0000000000..1901f27a24
--- /dev/null
+++ b/extra/google-tech-talk/authors.txt
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/extra/google-tech-talk/summary.txt b/extra/google-tech-talk/summary.txt
new file mode 100644
index 0000000000..1747a569c9
--- /dev/null
+++ b/extra/google-tech-talk/summary.txt
@@ -0,0 +1 @@
+Slides from Google Tech Talk by Slava Pestov, October 2008
diff --git a/extra/google-tech-talk/tags.txt b/extra/google-tech-talk/tags.txt
new file mode 100644
index 0000000000..cb5fc203e1
--- /dev/null
+++ b/extra/google-tech-talk/tags.txt
@@ -0,0 +1 @@
+demos
diff --git a/extra/hardware-info/windows/windows.factor b/extra/hardware-info/windows/windows.factor
index 3162496974..3aa6824ff6 100755
--- a/extra/hardware-info/windows/windows.factor
+++ b/extra/hardware-info/windows/windows.factor
@@ -18,7 +18,7 @@ IN: hardware-info.windows
 : processor-architecture ( -- n )
     system-info SYSTEM_INFO-dwOemId HEX: ffff0000 bitand ;
 
-: os-version
+: os-version ( -- os-version )
     "OSVERSIONINFO" <c-object>
     "OSVERSIONINFO" heap-size over set-OSVERSIONINFO-dwOSVersionInfoSize
     [ GetVersionEx ] keep swap zero? [ win32-error ] when ;
@@ -67,4 +67,4 @@ IN: hardware-info.windows
 {
     { [ os wince? ] [ "hardware-info.windows.ce" ] }
     { [ os winnt? ] [ "hardware-info.windows.nt" ] }
-} cond [ require ] when* >>
+} cond require >>
diff --git a/extra/slides/slides.factor b/extra/slides/slides.factor
index 2940bcbfcb..dc8bdd4576 100755
--- a/extra/slides/slides.factor
+++ b/extra/slides/slides.factor
@@ -48,19 +48,17 @@ IN: slides
 : $divider ( -- )
     [
         <gadget>
-        T{ gradient f
-           {
-             T{ rgba f 0.25 0.25 0.25 1.0 }
-             T{ rgba f 1.0 1.0 1.0 0.0 }
-           }
-         } >>interior
+        {
+            T{ rgba f 0.25 0.25 0.25 1.0 }
+            T{ rgba f 1.0 1.0 1.0 0.0 }
+        } <gradient> >>interior
         { 800 10 } >>dim
         { 1 0 } >>orientation
         gadget.
     ] ($block) ;
 
 : page-theme ( gadget -- )
-    T{ gradient f { T{ rgba f 0.8 0.8 1.0 1.0 } T{ rgba f 0.8 1.0 1.0 1.0 } } }
+    { T{ rgba f 0.8 0.8 1.0 1.0 } T{ rgba f 0.8 1.0 1.0 1.0 } } <gradient>
     >>interior drop ;
 
 : <page> ( list -- gadget )
diff --git a/extra/vpri-talk/authors.txt b/extra/vpri-talk/authors.txt
new file mode 100644
index 0000000000..1901f27a24
--- /dev/null
+++ b/extra/vpri-talk/authors.txt
@@ -0,0 +1 @@
+Slava Pestov
diff --git a/extra/vpri-talk/summary.txt b/extra/vpri-talk/summary.txt
new file mode 100644
index 0000000000..1ebcc4b114
--- /dev/null
+++ b/extra/vpri-talk/summary.txt
@@ -0,0 +1 @@
+Slides from a talk at VPRI by Slava Pestov, October 2008
diff --git a/extra/vpri-talk/tags.txt b/extra/vpri-talk/tags.txt
new file mode 100644
index 0000000000..cb5fc203e1
--- /dev/null
+++ b/extra/vpri-talk/tags.txt
@@ -0,0 +1 @@
+demos