diff --git a/lib/chibi/syntax-case.sld b/lib/chibi/syntax-case.sld
index 1b8f261e..65aac46f 100644
--- a/lib/chibi/syntax-case.sld
+++ b/lib/chibi/syntax-case.sld
@@ -8,12 +8,12 @@
   (import (rename (chibi)
                   (define-syntax %define-syntax)
                   (let-syntax %let-syntax)
-                  (letrec-syntax %letrec-syntax)
-                  make-variable-transformer)
+                  (letrec-syntax %letrec-syntax))
           (only (chibi ast)
                 env-cell macro? macro-aux macro-aux-set!
                 procedure-arity procedure-variadic?
-                procedure-variable-transformer?)
+                procedure-variable-transformer?
+                make-variable-transformer)
           (only (meta) environment)
           (srfi 1)
           (srfi 11)
diff --git a/lib/init-7.scm b/lib/init-7.scm
index 6d1d68cb..4725d972 100644
--- a/lib/init-7.scm
+++ b/lib/init-7.scm
@@ -873,8 +873,12 @@
       (set! count (+ count 1))
       (rename (string->symbol (string-append s (%number->string count)))))
     (define (expand-pattern pat tmpl)
-      (let lp ((p (if (pair? pat) (cdr pat) pat))
-               (x (if (pair? pat) (list _cdr _expr) _expr))
+      (define full-match?
+        (or (not (pair? pat))
+            (and (compare (car pat) (rename 'set!))
+                 (any (lambda (x) (compare x (rename 'set!))) lits))))
+      (let lp ((p (if full-match? pat (cdr pat)))
+               (x (if full-match? _expr (list _cdr _expr)))
                (dim 0)
                (vars '())
                (k (lambda (vars)