diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 5fc8e56..7e0310f 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -37121,6 +37121,122 @@ database format.
nil)
\end{chunk}
+
+\section{Lisp Library Handling}
+
+\defun{loadLib}{loadLib}
+\calls{loadLib}{startTimingProcess}
+\calls{loadLib}{getdatabase}
+\calls{loadLib}{isSystemDirectory}
+\calls{loadLib}{pathnameDirectory}
+\calls{loadLib}{loadLibNoUpdate}
+\calls{loadLib}{sayKeyedMsg}
+\calls{loadLib}{namestring}
+\calls{loadLib}{clearConstructorCache}
+\calls{loadLib}{updateDatabase}
+\calls{loadLib}{installConstructor}
+\calls{loadLib}{updateCategoryTable}
+\calls{loadLib}{categoryForm?}
+\calls{loadLib}{makeprop}
+\calls{loadLib}{remprop}
+\calls{loadLib}{stopTimingProcess}
+\refsdollar{loadLib}{InteractiveMode}
+\refsdollar{loadLib}{printLoadMsgs}
+\refsdollar{loadLib}{forceDatabaseUpdate}
+\defsdollar{loadLib}{CategoryFrame}
+\begin{chunk}{defun loadLib}
+(defun |loadLib| (cname)
+ (let (fullLibName systemdir? update? kind u sig coSig)
+ (declare (special |$CategoryFrame| |$InteractiveMode| |$printLoadMsgs|
+ |$forceDatabaseUpdate|))
+ (|startTimingProcess| '|load|)
+ (when (setq fullLibName (getdatabase cname 'object))
+ (setq systemdir? (|isSystemDirectory| (|pathnameDirectory| fullLibName)))
+ (setq update? (or |$forceDatabaseUpdate| (null systemdir?)))
+ (cond
+ ((null update?) (|loadLibNoUpdate| cname cname fullLibName))
+ (t
+ (setq kind (getdatabase cname 'constructorkind))
+ (when |$printLoadMsgs|
+ (|sayKeyedMsg| 'S2IL0002 (list (|namestring| fullLibName) kind cname)))
+ (load fullLibName)
+ (|clearConstructorCache| cname)
+ (|updateDatabase| cname cname systemdir?)
+ (|installConstructor| cname kind)
+ (setq u (getdatabase cname 'constructormodemap))
+ (|updateCategoryTable| cname kind)
+ (setq coSig
+ (when u
+ (setq sig (cdar u))
+ (cons nil (loop for x in (cdr sig) collect (|categoryForm?| x)))))
+ (if (null (cdr (getdatabase cname 'constructorform)))
+ (makeprop cname 'niladic t)
+ (remprop cname 'niladic))
+ (makeprop cname 'loaded fullLibName)
+ (when |$InteractiveMode| (setq |$CategoryFrame| (list (list nil))))
+ (|stopTimingProcess| '|load|)
+ t)))))
+
+\end{chunk}
+
+\defun{isSystemDirectory}{isSystemDirectory}
+\calls{isSystemDirectory}{function}
+\refsdollar{isSystemDirectory}{spadroot}
+\begin{chunk}{defun isSystemDirectory}
+(defun |isSystemDirectory| (dir)
+ (declare (special $spadroot))
+ (every (|function| char=) $spadroot dir))
+
+\end{chunk}
+
+\defun{loadLibNoUpdate}{loadLibNoUpdate}
+\calls{loadLibNoUpdate}{getdatabase}
+\calls{loadLibNoUpdate}{sayKeyedMsg}
+\calls{loadLibNoUpdate}{toplevel}
+\calls{loadLibNoUpdate}{clearConstructorCache}
+\calls{loadLibNoUpdate}{installConstructor}
+\calls{loadLibNoUpdate}{makeprop}
+\calls{loadLibNoUpdate}{stopTimingProcess}
+\refsdollar{loadLibNoUpdate}{printLoadMsgs}
+\refsdollar{loadLibNoUpdate}{InteractiveMode}
+\defsdollar{loadLibNoUpdate}{CategoryFrame}
+\begin{chunk}{defun loadLibNoUpdate}
+(defun |loadLibNoUpdate| (cname libName fullLibName)
+ (declare (ignore libName))
+ (let (kind)
+ (declare (special |$CategoryFrame| |$InteractiveMode| |$printLoadMsgs|))
+ (setq kind (getdatabase cname 'constructorkind))
+ (when |$printLoadMsgs|
+ (|sayKeyedMsg| 'S2IL0002 (list (|namestring| fullLibName) kind cname)))
+ (cond
+ ((equal (catch 'versioncheck (load fullLibName)) (- 1))
+ (princ " wrong library version...recompile ")
+ (princ fullLibName)
+ (terpri)
+ (toplevel))
+ (t
+ (|clearConstructorCache| cname)
+ (|installConstructor| cname kind)
+ (makeprop cname 'loaded fullLibName)
+ (when |$InteractiveMode| (setq |$CategoryFrame| (list (list nil))))
+ (|stopTimingProcess| '|load|)))
+ t))
+
+\end{chunk}
+
+\defun{loadFunctor}{loadFunctor}
+\calls{loadFunctor}{loadFunctor}
+\calls{loadFunctor}{loadLibIfNotLoaded}
+\begin{chunk}{defun loadFunctor}
+(defun |loadFunctor| (u)
+ (cond
+ ((null (atom u)) (|loadFunctor| (car u)))
+ (t
+ (|loadLibIfNotLoaded| u)
+ u)))
+
+\end{chunk}
+
\chapter{Special Lisp Functions}
\section{Axiom control structure macros}
Axiom used various control structures in the boot code which are not
@@ -40322,6 +40438,7 @@ This needs to work off the internal exposure list, not the file.
\getchunk{defun isSharpVar}
\getchunk{defun isSharpVarWithNum}
\getchunk{defun isSubForRedundantMapName}
+\getchunk{defun isSystemDirectory}
\getchunk{defun isTraceGensym}
\getchunk{defun isUncompiledMap}
@@ -40345,6 +40462,9 @@ This needs to work off the internal exposure list, not the file.
\getchunk{defun listOutputter}
\getchunk{defun lnFileName}
\getchunk{defun load}
+\getchunk{defun loadFunctor}
+\getchunk{defun loadLib}
+\getchunk{defun loadLibNoUpdate}
\getchunk{defun localdatabase}
\getchunk{defun localnrlib}
\getchunk{defun loopIters2Sex}
diff --git a/changelog b/changelog
index ccdd3c1..6af8def 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20110715 tpd src/axiom-website/patches.html 20110715.02.tpd.patch
+20110715 tpd src/interp/database.lisp treeshake interpreter
+20110715 tpd src/interp/lisplib.lisp treeshake interpreter
+20110715 tpd books/bookvol5 treeshake interpreter
20110715 tpd src/axiom-website/patches.html 20110715.01.tpd.patch
20110715 tpd src/interp/Makefile add (si::reset-sys-paths) per Camm
20110714 tpd src/axiom-website/patches.html 20110714.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 55fafc4..9a730e9 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3544,5 +3544,7 @@ books/bookvol10.3 help and unit tests for RewriteRule
src/interp/axext_l.lisp removed
20110715.01.tpd.patch
src/interp/Makefile add (si::reset-sys-paths) per Camm
+20110715.02.tpd.patch
+books/bookvol5 treeshake interpreter