diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index 25b1a11..4c1befb 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -1757,6 +1757,21 @@ Symbolics read-line returns embedded newlines in a c-m-Y.")
 
 @
 
+\defun{containsBang}{containsBang}
+\calls{containsBang}{containsBang}
+<<defun containsBang>>=
+(defun |containsBang| (u)
+ (let (tmp2)
+  (cond
+   ((atom u) (eq u '!))
+   ((and (pairp u) (equal (qcar u) 'quote)
+         (pairp (qcdr u)) (eq (qcdr (qcdr u)) nil))
+     nil)
+   (t
+     (dolist (x u tmp2)
+       (setq tmp2 (or tmp2 (|containsBang| x))))))))
+
+@
 
 \chapter{The Compiler}
 
@@ -4860,6 +4875,7 @@ if \verb|$InteractiveMode| then use a null outputstream
 <<defun compWhere>>
 <<defun compWithMappingMode>>
 <<defun compWithMappingMode1>>
+<<defun containsBang>>
 <<defun convert>>
 
 <<defun deepestExpression>>
diff --git a/changelog b/changelog
index bae4356..be414ed 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20101006 tpd src/axiom-website/patches.html 20101006.03.tpd.patch
+20101006 tpd src/interp/parsing.lisp treeshake compiler
+20101006 tpd books/bookvol9 treeshake compiler	
 20101006 tpd src/axiom-website/patches.html 20101006.02.tpd.patch
 20101006 tpd src/interp/parsing.lisp treeshake compiler
 20101006 tpd books/bookvol9 treeshake compiler	
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 3103f5e..0fd3fd2 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3196,5 +3196,7 @@ books/bookvol6 add a research ideas section<br/>
 books/bookvol9 treeshake compiler<br/>
 <a href="patches/20101006.02.tpd.patch">20101006.02.tpd.patch</a>
 books/bookvol9 treeshake compiler<br/>
+<a href="patches/20101006.03.tpd.patch">20101006.03.tpd.patch</a>
+books/bookvol9 treeshake compiler<br/>
  </body>
 </html>
diff --git a/src/interp/parsing.lisp.pamphlet b/src/interp/parsing.lisp.pamphlet
index 7f6f438..fe72f8c 100644
--- a/src/interp/parsing.lisp.pamphlet
+++ b/src/interp/parsing.lisp.pamphlet
@@ -4583,14 +4583,6 @@ parse
 
 (DEFUN |unTuple| (|x|) (PROG (|y|) (RETURN (COND ((AND (PAIRP |x|) (EQ (QCAR |x|) (QUOTE |@Tuple|)) (PROGN (SPADLET |y| (QCDR |x|)) (QUOTE T))) |y|) ((QUOTE T) (LIST |x|)))))) 
 ;--% APL TRANSFORMATION OF INPUT
-;containsBang u ==
-;  atom u => EQ(u,"!")
-;  u is [='QUOTE,.] => false
-;  or/[containsBang x for x in u]
-
-;;;     ***       |containsBang| REDEFINED
-
-(DEFUN |containsBang| (|u|) (PROG (|ISTMP#1|) (RETURN (SEQ (COND ((ATOM |u|) (EQ |u| (QUOTE !))) ((AND (PAIRP |u|) (EQUAL (QCAR |u|) (QUOTE QUOTE)) (PROGN (SPADLET |ISTMP#1| (QCDR |u|)) (AND (PAIRP |ISTMP#1|) (EQ (QCDR |ISTMP#1|) NIL)))) NIL) ((QUOTE T) (PROG (#0=#:G167897) (SPADLET #0# NIL) (RETURN (DO ((#1=#:G167903 NIL #0#) (#2=#:G167904 |u| (CDR #2#)) (|x| NIL)) ((OR #1# (ATOM #2#) (PROGN (SETQ |x| (CAR #2#)) NIL)) #0#) (SEQ (EXIT (SETQ #0# (OR #0# (|containsBang| |x|)))))))))))))) 
 @
 \eject
 \begin{thebibliography}{99}
