diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 3733554..5d2969b 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -146846,6 +146846,67 @@ StreamTaylorSeriesOperations(A): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package STNSR StreamTensor}
+<<StreamTensor.input>>=
+)set break resume
+)sys rm -f StreamTensor.output
+)spool StreamTensor.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show StreamTensor
+--R StreamTensor R: Type  is a package constructor
+--R Abbreviation for StreamTensor is STNSR 
+--R This constructor is exposed in this frame.
+--R Issue )edit /tmp/stnsr.spad to see algebra source code for STNSR 
+--R
+--R------------------------------- Operations --------------------------------
+--R tensorMap : (Stream R,(R -> List R)) -> Stream R
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<StreamTensor.help>>=
+====================================================================
+StreamTensor examples
+====================================================================
+
+See Also:
+o )show StreamTensor
+
+@
+\pagehead{StreamTensor}{STNSR}
+\pagepic{ps/v104streamtensor.eps}{STNSR}{1.00}
+
+{\bf Exports:}\\
+\cross{STNSR}{tensorMap}
+
+<<package STNSR StreamTensor>>=
+)abbrev package STNSR StreamTensor
+StreamTensor(R: Type): with
+
+        tensorMap: (Stream R, R -> List R) -> Stream R
+          ++ tensorMap([s1, s2, ...], f) returns the stream consisting of all
+          ++ elements of f(s1) followed by all elements of f(s2) and so on.
+
+    == add
+
+        tensorMap(s, f) ==
+            empty? s => empty()
+            concat([f first s], delay tensorMap(rest s, f))
+
+@
+<<STNSR.dotabb>>=
+"STNSR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=STNSR"]
+"TYPE" [color=lightblue,href="bookvol10.2.pdf#nameddest=TYPE"];
+"STNSR" -> "TYPE"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package STTF StreamTranscendentalFunctions}
 \pagehead{StreamTranscendentalFunctions}{STTF}
 \pagepic{ps/v104streamtranscendentalfunctions.ps}{STTF}{1.00}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 222db54..bb9ba6c 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23972,6 +23972,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|StreamFunctions1| . STREAM1)
    (|StreamFunctions2| . STREAM2)
    (|StreamFunctions3| . STREAM3)
+   (|StreamTensor| . STNSR)
    (|String| . STRING)
    (|SturmHabichtPackage| . SHP)
    (|Symbol| . SYMBOL)
diff --git a/changelog b/changelog
index 3e4993b..446d912 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20100728 tpd src/axiom-website/patches.html 20100728.02.tpd.patch
+20100728 tpd src/algebra/Makefile help and test for StreamTensor
+20100728 tpd books/bookvol5 expose StreamTensor
+20100728 tpd books/bookvol10.4 add StreamTensor
 20100728 tpd src/axiom-website/patches.html 20100728.01.tpd.patch
 20100728 tpd books/bookvol7.1 rewrite \pagehead to \pagetitle
 20100728 tpd src/scripts/tex/axiom.sty collect all script commands
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 601de6e..554d480 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -330,6 +330,7 @@ LAYER1=\
   ${OUT}/SEGBIND2.o ${OUT}/SEGCAT.o   ${OUT}/SETCATD.o  \
   ${OUT}/SEXCAT.o   ${OUT}/SGROUP.o   \
   ${OUT}/SGROUP-.o  ${OUT}/SPACEC.o   ${OUT}/SPLNODE.o  ${OUT}/STEP.o     \
+  ${OUT}/STNSR.o    \
   ${OUT}/STREAM1.o  ${OUT}/STREAM2.o  ${OUT}/STREAM3.o  ${OUT}/SUCH.o     \
   ${OUT}/TEX1.o     ${OUT}/UDVO.o     ${OUT}/YSTREAM.o \
   layer1done
@@ -755,6 +756,9 @@ LAYER1=\
 "STEP" -> "BASTYPE/KOERCE"
 /*"STEP" -> "KOERCE"*/
 
+"STNSR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=STNSR"]
+"STNSR" -> "TYPE"
+
 "STREAM1" [color="#FF4488",href="bookvol10.4.pdf#nameddest=STREAM1"]
 "STREAM1" -> "TYPE"
 
@@ -17894,6 +17898,7 @@ SPADHELP=\
  ${HELP}/StepThrough.help \
  ${HELP}/Stream.help \
  ${HELP}/StreamAggregate.help \
+ ${HELP}/StreamTensor.help \
  ${HELP}/String.help \
  ${HELP}/StringAggregate.help \
  ${HELP}/StringCategory.help \
@@ -18572,6 +18577,7 @@ REGRESS= \
  StepThrough.regress \
  Stream.regress \
  StreamAggregate.regress \
+ StreamTensor.regress \
  String.regress \
  StringAggregate.regress \
  StringCategory.regress \
@@ -26039,6 +26045,18 @@ ${HELP}/StreamAggregate.help: ${BOOKS}/bookvol10.2.pamphlet
             >${INPUT}/StreamAggregate.input
 	@echo "StreamAggregate (STAGG)" >>${HELPFILE}
 
+${HELP}/StreamTensor.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 5000 create StreamTensor.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"StreamTensor.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/StreamTensor.help
+	@cp -f ${HELP}/StreamTensor.help ${HELP}/STNSR.help
+	@${TANGLE} -R"StreamTensor.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/StreamTensor.input
+	@echo "StreamTensor (STNSR)" >>${HELPFILE}
+
 ${HELP}/String.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 8110 create String.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"String.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a3e53bb..e69dc7c 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3033,5 +3033,7 @@ Makefile build src/input quietly<br/>
 src/input/guess.input test examples of the GUESS package<br/>
 <a href="patches/20100728.01.tpd.patch">20100728.01.tpd.patch</a>
 src/doc/axiom.sty collect all script commands in one place<br/>
+<a href="patches/20100728.02.tpd.patch">20100728.02.tpd.patch</a>
+books/bookvol10.4 add StreamTensor<br/>
  </body>
 </html>
