diff --git a/changelog b/changelog
index b5b72a3..0fde41b 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20091112 tpd src/axiom-website/patches.html 20091112.04.tpd.patch
+20091112 tpd src/interp/nci.lisp merge osyscmd
+20091112 tpd src/interp/osyscmd.lisp removed, merged with nci
+20091112 tpd src/interp/Makefile merge nci and osyscmd
 20091112 tpd src/axiom-website/patches.html 20091112.03.tpd.patch
 20091112 tpd src/interp/osyscmd.lisp move functions to bookvol5
 20091112 tpd src/interp/nci.lisp move clearMacroTable
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 123d9b4..4424e56 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2253,5 +2253,7 @@ src/interp/Makefile remove obey.lisp<br/>
 src/interp/i-syscmd remove unused parseFromString<br/>
 <a href="patches/20091112.03.tpd.patch">20091112.03.tpd.patch</a>
 bookvol5 tree shake nci and osyscmd functions<br/>
+<a href="patches/20091112.04.tpd.patch">20091112.04.tpd.patch</a>
+src/interp/nci.lisp merge and remove osyscmd.lisp<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 7656907..f9401b3 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -170,7 +170,7 @@ OBJS= ${OUT}/vmlisp.${O}      \
       ${OUT}/newaux.${O}      ${OUT}/newfort.${O} \
       ${OUT}/nrunfast.${O} \
       ${OUT}/nrungo.${O}      ${OUT}/nrunopt.${O} \
-      ${OUT}/nruntime.${O}    ${OUT}/osyscmd.${O} \
+      ${OUT}/nruntime.${O}    \
       ${OUT}/packtran.${O}    ${OUT}/pathname.${O} \
       ${OUT}/pf2sex.${O}      \
       ${OUT}/posit.${O}       \
@@ -3629,29 +3629,6 @@ ${MID}/sfsfun-l.lisp: ${IN}/sfsfun-l.lisp.pamphlet
 
 @
 
-\subsection{osyscmd.lisp}
-<<osyscmd.o (OUT from MID)>>=
-${OUT}/osyscmd.${O}: ${MID}/osyscmd.lisp
-	@ echo 136 making ${OUT}/osyscmd.${O} from ${MID}/osyscmd.lisp
-	@ ( cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/osyscmd.lisp"' \
-             ':output-file "${OUT}/osyscmd.${O}") (${BYE}))' | ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/osyscmd.lisp"' \
-             ':output-file "${OUT}/osyscmd.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<osyscmd.lisp (MID from IN)>>=
-${MID}/osyscmd.lisp: ${IN}/osyscmd.lisp.pamphlet
-	@ echo 137 making ${MID}/osyscmd.lisp from ${IN}/osyscmd.lisp.pamphlet
-	@ (cd ${MID} ; \
-	   ${TANGLE} ${IN}/osyscmd.lisp.pamphlet >osyscmd.lisp )
-
-@
-
 \subsection{packtran.lisp}
 <<packtran.o (OUT from MID)>>=
 ${OUT}/packtran.${O}: ${MID}/packtran.lisp
@@ -4311,9 +4288,6 @@ clean:
 <<obey.o (OUT from MID)>>
 <<obey.lisp (MID from IN)>>
 
-<<osyscmd.o (OUT from MID)>>
-<<osyscmd.lisp (MID from IN)>>
-
 <<package.o (OUT from MID)>>
 <<package.lisp (MID from IN)>>
 
diff --git a/src/interp/nci.lisp.pamphlet b/src/interp/nci.lisp.pamphlet
index d5e0e35..97542f9 100644
--- a/src/interp/nci.lisp.pamphlet
+++ b/src/interp/nci.lisp.pamphlet
@@ -20,6 +20,10 @@
     (|packageTran| (|parseFromString| s))
     NIL ))
 
+(defun |parseFromString| (s)
+  (setq s (|next| #'|ncloopParse| (|next| #'|lineoftoks| (|incString| s))))
+  (unless (|StreamNull| s) (|pf2Sex| (|macroExpanded| (cadar s)))))
+
 (defun |ncParseFromString| (s)
   (|zeroOneTran| (|packageTran|
     (catch 'SPAD_READER (|parseFromString| s)))))
diff --git a/src/interp/osyscmd.lisp.pamphlet b/src/interp/osyscmd.lisp.pamphlet
deleted file mode 100644
index 865dbfd..0000000
--- a/src/interp/osyscmd.lisp.pamphlet
+++ /dev/null
@@ -1,39 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp osyscmd.lisp}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-<<*>>=
-
-(IN-PACKAGE "BOOT")
-
-;--------------------> NEW DEFINITION (see i-syscmd.boot.pamphlet)
-;parseFromString(s) ==
-;   s := next(function ncloopParse,
-;        next(function lineoftoks,incString s))
-;   StreamNull s => nil
-;   pf2Sex macroExpanded first rest first s
- 
-(DEFUN |parseFromString| (|s|)
-  (PROG ()
-    (RETURN
-      (PROGN
-        (SETQ |s|
-              (|next| #'|ncloopParse|
-                      (|next| #'|lineoftoks| (|incString| |s|))))
-        (COND
-          ((|StreamNull| |s|) NIL)
-          ('T (|pf2Sex| (|macroExpanded| (CAR (CDR (CAR |s|)))))))))))
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
