diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index e3fd333..73b581a 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -7327,6 +7327,37 @@ $\rightarrow$
 
 \end{chunk}
 
+\defun{getModemap}{getModemap}
+\calls{getModemap}{get}
+\calls{getModemap}{compApplyModemap}
+\calls{getModemap}{sublis}
+\begin{chunk}{defun getModemap}
+(defun |getModemap| (x env)
+ (let (u)
+  (dolist (modemap (|get| (first x) '|modemap| env))
+   (when (setq u (|compApplyModemap| x modemap env nil))
+     (return (sublis (third u) modemap))))))
+
+\end{chunk}
+
+\defun{getUniqueSignature}{getUniqueSignature}
+\calls{getUniqueSignature}{getUniqueModemap}
+\begin{chunk}{defun getUniqueSignature}
+(defun |getUniqueSignature| (form env)
+  (cdar (|getUniqueModemap| (first form) (|#| (rest form)) env)))
+
+\end{chunk}
+
+\defun{domainMember}{domainMember}
+\calls{domainMember}{modeEqual}
+\begin{chunk}{defun domainMember}
+(defun |domainMember| (dom domList)
+ (let (result)
+  (dolist (d domList result)
+   (setq result (or result (|modeEqual| dom d))))))
+
+\end{chunk}
+
 \defun{augModemapsFromCategory}{augModemapsFromCategory}
 \calls{augModemapsFromCategory}{evalAndSub}
 \calls{augModemapsFromCategory}{compilerMessage}
@@ -16728,6 +16759,7 @@ if \verb|$InteractiveMode| then use a null outputstream
 \getchunk{defun displayMissingFunctions}
 \getchunk{defun displayPreCompilationErrors}
 \getchunk{defun dollarTran}
+\getchunk{defun domainMember}
 \getchunk{defun drop}
 
 \getchunk{defun errhuh}
@@ -16741,11 +16773,13 @@ if \verb|$InteractiveMode| then use a null outputstream
 \getchunk{defun freelist}
 
 \getchunk{defun get-a-line}
+\getchunk{defun getModemap}
 \getchunk{defun getOperationAlist}
 \getchunk{defun getScriptName}
 \getchunk{defun getTargetFromRhs}
 \getchunk{defun get-token}
 \getchunk{defun getToken}
+\getchunk{defun getUniqueSignature}
 \getchunk{defun genDomainOps}
 \getchunk{defun genDomainViewList0}
 \getchunk{defun genDomainViewList}
diff --git a/changelog b/changelog
index 1691b5b..38cb550 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20110708 tpd src/axiom-website/patches.html 20110708.02.tpd.patch
+20110708 tpd src/interp/modemap.lisp treeshake compiler
+20110708 tpd books/bookvol9 treeshake compiler
 20110708 tpd src/axiom-website/patches.html 20110708.01.tpd.patch
 20110708 tpd src/interp/vmlisp.lisp treehake compiler
 20110708 tpd src/interp/modemap.lisp treeshake compiler
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index df34d98..efde134 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3532,5 +3532,7 @@ books/bookvol9 use \defsdollar and \refsdollar<br/>
 books/bookvol9 treeshake compiler<br/>
 <a href="patches/20110708.01.tpd.patch">20110708.01.tpd.patch</a>
 books/bookvol9 treeshake compiler<br/>
+<a href="patches/20110708.02.tpd.patch">20110708.02.tpd.patch</a>
+books/bookvol9 treeshake compiler<br/>
  </body>
 </html>
diff --git a/src/interp/modemap.lisp.pamphlet b/src/interp/modemap.lisp.pamphlet
index 8eee908..c2b2d95 100644
--- a/src/interp/modemap.lisp.pamphlet
+++ b/src/interp/modemap.lisp.pamphlet
@@ -13,77 +13,6 @@
 
 (IN-PACKAGE "BOOT" )
 
-;--% EXTERNAL ROUTINES
-;
-;--These functions are called from outside this file to add a domain
-;--   or to get the current domains in scope;
-;
-;domainMember(dom,domList) == or/[modeEqual(dom,d) for d in domList]
-
-(DEFUN |domainMember| (|dom| |domList|)
-  (PROG ()
-    (RETURN
-      (SEQ (PROG (G166077)
-             (SPADLET G166077 NIL)
-             (RETURN
-               (DO ((G166083 NIL G166077)
-                    (G166084 |domList| (CDR G166084)) (|d| NIL))
-                   ((OR G166083 (ATOM G166084)
-                        (PROGN (SETQ |d| (CAR G166084)) NIL))
-                    G166077)
-                 (SEQ (EXIT (SETQ G166077
-                                  (OR G166077
-                                      (|modeEqual| |dom| |d|))))))))))))
-
-;--% MODEMAP FUNCTIONS
-;
-;--getTargetMode(x is [op,:argl],e) ==
-;--  CASES(#(mml:= getModemapList(op,#argl,e)),
-;--    (1 =>
-;--    ([[.,target,:.],:.]:= first mml; substituteForFormalArguments(argl,target))
-;--      ; 0 => MOAN(x," has no modemap"); systemError [x," has duplicate modemaps"]))
-;
-;getModemap(x is [op,:.],e) ==
-;  for modemap in get(op,'modemap,e) repeat
-;    if u:= compApplyModemap(x,modemap,e,nil) then return
-;      ([.,.,sl]:= u; SUBLIS(sl,modemap))
-
-(DEFUN |getModemap| (|x| |e|)
-  (PROG (|op| |u| |sl|)
-    (RETURN
-      (SEQ (PROGN
-             (SPADLET |op| (CAR |x|))
-             (DO ((G166111 (|get| |op| '|modemap| |e|)
-                      (CDR G166111))
-                  (|modemap| NIL))
-                 ((OR (ATOM G166111)
-                      (PROGN (SETQ |modemap| (CAR G166111)) NIL))
-                  NIL)
-               (SEQ (EXIT (COND
-                            ((SPADLET |u|
-                                      (|compApplyModemap| |x| |modemap|
-                                       |e| NIL))
-                             (RETURN
-                               (PROGN
-                                 (SPADLET |sl| (CADDR |u|))
-                                 (SUBLIS |sl| |modemap|))))
-                            ('T NIL))))))))))
-
-;getUniqueSignature(form,e) ==
-;  [[.,:sig],:.]:= getUniqueModemap(first form,#rest form,e) or return nil
-;  sig
-
-(DEFUN |getUniqueSignature| (|form| |e|)
-  (PROG (|LETTMP#1| |sig|)
-    (RETURN
-      (PROGN
-        (SPADLET |LETTMP#1|
-                 (OR (|getUniqueModemap| (CAR |form|)
-                         (|#| (CDR |form|)) |e|)
-                     (RETURN NIL)))
-        (SPADLET |sig| (CDAR |LETTMP#1|))
-        |sig|))))
-
 ;getUniqueModemap(op,numOfArgs,e) ==
 ;  1=#(mml:= getModemapList(op,numOfArgs,e)) => first mml
 ;  1<#mml =>
