diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index ffc18ab..da31f0c 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -27157,7 +27157,7 @@ where the denominator 18014398509481984 is 2^54
 
 
 See Also:
-0 )help Float
+o )help Float
 o )show DoubleFloat
 
 @
@@ -27636,6 +27636,314 @@ DoubleFloat(): Join(FloatingPointSystem, DifferentialRing, OpenMath,
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain DFVEC DoubleFloatVector}
+<<DoubleFloatVector.input>>=
+)set break resume
+)sys rm -f DoubleFloatVector.output
+)spool DoubleFloatVector.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 6
+)show DoubleFloatVector
+--R DoubleFloatVector  is a domain constructor
+--R Abbreviation for DoubleFloatVector is DFVEC 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.3.pamphlet to see algebra source code for DFVEC 
+--R
+--R------------------------------- Operations --------------------------------
+--R concat : List % -> %                  concat : (%,%) -> %
+--R concat : (DoubleFloat,%) -> %         concat : (%,DoubleFloat) -> %
+--R construct : List DoubleFloat -> %     copy : % -> %
+--R delete : (%,Integer) -> %             ?.? : (%,Integer) -> DoubleFloat
+--R empty : () -> %                       empty? : % -> Boolean
+--R entries : % -> List DoubleFloat       eq? : (%,%) -> Boolean
+--R index? : (Integer,%) -> Boolean       indices : % -> List Integer
+--R insert : (%,%,Integer) -> %           qelt : (%,Integer) -> DoubleFloat
+--R qnew : Integer -> %                   reverse : % -> %
+--R sample : () -> %                     
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?*? : (%,DoubleFloat) -> % if DoubleFloat has MONOID
+--R ?*? : (DoubleFloat,%) -> % if DoubleFloat has MONOID
+--R ?*? : (Integer,%) -> % if DoubleFloat has ABELGRP
+--R ?+? : (%,%) -> % if DoubleFloat has ABELSG
+--R ?-? : (%,%) -> % if DoubleFloat has ABELGRP
+--R -? : % -> % if DoubleFloat has ABELGRP
+--R ?<? : (%,%) -> Boolean if DoubleFloat has ORDSET
+--R ?<=? : (%,%) -> Boolean if DoubleFloat has ORDSET
+--R ?=? : (%,%) -> Boolean if DoubleFloat has SETCAT
+--R ?>? : (%,%) -> Boolean if DoubleFloat has ORDSET
+--R ?>=? : (%,%) -> Boolean if DoubleFloat has ORDSET
+--R any? : ((DoubleFloat -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R coerce : % -> OutputForm if DoubleFloat has SETCAT
+--R convert : % -> InputForm if DoubleFloat has KONVERT INFORM
+--R copyInto! : (%,%,Integer) -> % if $ has shallowlyMutable
+--R count : (DoubleFloat,%) -> NonNegativeInteger if $ has finiteAggregate and DoubleFloat has SETCAT
+--R count : ((DoubleFloat -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R cross : (%,%) -> % if DoubleFloat has RING
+--R delete : (%,UniversalSegment Integer) -> %
+--R dot : (%,%) -> DoubleFloat if DoubleFloat has RING
+--R ?.? : (%,UniversalSegment Integer) -> %
+--R elt : (%,Integer,DoubleFloat) -> DoubleFloat
+--R entry? : (DoubleFloat,%) -> Boolean if $ has finiteAggregate and DoubleFloat has SETCAT
+--R eval : (%,List DoubleFloat,List DoubleFloat) -> % if DoubleFloat has EVALAB DFLOAT and DoubleFloat has SETCAT
+--R eval : (%,DoubleFloat,DoubleFloat) -> % if DoubleFloat has EVALAB DFLOAT and DoubleFloat has SETCAT
+--R eval : (%,Equation DoubleFloat) -> % if DoubleFloat has EVALAB DFLOAT and DoubleFloat has SETCAT
+--R eval : (%,List Equation DoubleFloat) -> % if DoubleFloat has EVALAB DFLOAT and DoubleFloat has SETCAT
+--R every? : ((DoubleFloat -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R fill! : (%,DoubleFloat) -> % if $ has shallowlyMutable
+--R find : ((DoubleFloat -> Boolean),%) -> Union(DoubleFloat,"failed")
+--R first : % -> DoubleFloat if Integer has ORDSET
+--R hash : % -> SingleInteger if DoubleFloat has SETCAT
+--R insert : (DoubleFloat,%,Integer) -> %
+--R latex : % -> String if DoubleFloat has SETCAT
+--R length : % -> DoubleFloat if DoubleFloat has RADCAT and DoubleFloat has RING
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R magnitude : % -> DoubleFloat if DoubleFloat has RADCAT and DoubleFloat has RING
+--R map : (((DoubleFloat,DoubleFloat) -> DoubleFloat),%,%) -> %
+--R map : ((DoubleFloat -> DoubleFloat),%) -> %
+--R map! : ((DoubleFloat -> DoubleFloat),%) -> % if $ has shallowlyMutable
+--R max : (%,%) -> % if DoubleFloat has ORDSET
+--R maxIndex : % -> Integer if Integer has ORDSET
+--R member? : (DoubleFloat,%) -> Boolean if $ has finiteAggregate and DoubleFloat has SETCAT
+--R members : % -> List DoubleFloat if $ has finiteAggregate
+--R merge : (%,%) -> % if DoubleFloat has ORDSET
+--R merge : (((DoubleFloat,DoubleFloat) -> Boolean),%,%) -> %
+--R min : (%,%) -> % if DoubleFloat has ORDSET
+--R minIndex : % -> Integer if Integer has ORDSET
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R new : (NonNegativeInteger,DoubleFloat) -> %
+--R outerProduct : (%,%) -> Matrix DoubleFloat if DoubleFloat has RING
+--R parts : % -> List DoubleFloat if $ has finiteAggregate
+--R position : (DoubleFloat,%,Integer) -> Integer if DoubleFloat has SETCAT
+--R position : (DoubleFloat,%) -> Integer if DoubleFloat has SETCAT
+--R position : ((DoubleFloat -> Boolean),%) -> Integer
+--R qsetelt! : (%,Integer,DoubleFloat) -> DoubleFloat if $ has shallowlyMutable
+--R reduce : (((DoubleFloat,DoubleFloat) -> DoubleFloat),%) -> DoubleFloat if $ has finiteAggregate
+--R reduce : (((DoubleFloat,DoubleFloat) -> DoubleFloat),%,DoubleFloat) -> DoubleFloat if $ has finiteAggregate
+--R reduce : (((DoubleFloat,DoubleFloat) -> DoubleFloat),%,DoubleFloat,DoubleFloat) -> DoubleFloat if $ has finiteAggregate and DoubleFloat has SETCAT
+--R remove : ((DoubleFloat -> Boolean),%) -> % if $ has finiteAggregate
+--R remove : (DoubleFloat,%) -> % if $ has finiteAggregate and DoubleFloat has SETCAT
+--R removeDuplicates : % -> % if $ has finiteAggregate and DoubleFloat has SETCAT
+--R reverse! : % -> % if $ has shallowlyMutable
+--R select : ((DoubleFloat -> Boolean),%) -> % if $ has finiteAggregate
+--R setelt : (%,UniversalSegment Integer,DoubleFloat) -> DoubleFloat if $ has shallowlyMutable
+--R setelt : (%,Integer,DoubleFloat) -> DoubleFloat if $ has shallowlyMutable
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R sort : % -> % if DoubleFloat has ORDSET
+--R sort : (((DoubleFloat,DoubleFloat) -> Boolean),%) -> %
+--R sort! : % -> % if $ has shallowlyMutable and DoubleFloat has ORDSET
+--R sort! : (((DoubleFloat,DoubleFloat) -> Boolean),%) -> % if $ has shallowlyMutable
+--R sorted? : % -> Boolean if DoubleFloat has ORDSET
+--R sorted? : (((DoubleFloat,DoubleFloat) -> Boolean),%) -> Boolean
+--R swap! : (%,Integer,Integer) -> Void if $ has shallowlyMutable
+--R zero : NonNegativeInteger -> % if DoubleFloat has ABELMON
+--R ?~=? : (%,%) -> Boolean if DoubleFloat has SETCAT
+--R
+--E 1
+ 
+--S 2 of 6
+qnew 17
+--R
+--R   (1)  [0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+--R                                                      Type: DoubleFloatVector
+--E 2
+
+-- NOTE: DFVEC arrays are 0-based, normal Axiom arrays are 1-based
+--S 3 of 6
+a.1:=1.0
+
+   (3)  1.
+                                                            Type: DoubleFloat
+--E 3
+
+--S 4 of 6
+a
+
+   (4)  [0.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+                                                      Type: DoubleFloatVector
+--E 4
+
+--S 5 of 6
+a.0:=2.0
+
+   (5)  2.
+                                                            Type: DoubleFloat
+--E 5
+
+--S 6 of 6
+a
+
+   (6)  [2.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+                                                      Type: DoubleFloatVector
+--E 6
+
+)spool
+)lisp (bye)
+
+@
+
+<<DoubleFloatVector.help>>=
+====================================================================
+DoubleFloatVector examples
+====================================================================
+This domain creates a lisp simple array of machine doublefloats.
+It provides one new function called qnew which takes an integer
+that gives the array length.
+
+NOTE: Unlike normal Axiom arrays the DoubleFloatVector arrays
+are 0-based so the first element is 0. Axiom arrays normally
+start at 1.
+
+qnew 17
+
+     [0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+
+a.1:=1.0
+     1.
+
+a
+     [0.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+
+a.0:=2.0
+     2.
+
+a
+     [2.,1.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.]
+
+
+See Also:
+o )help Float
+o )help DoubleFloat
+o )show DoubleFloatVector
+
+@
+\pagehead{DoubleFloatVector}{DFVEC}
+\pagepic{ps/v103doublefloatvector.ps}{DFVEC}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lllll}
+\cross{DFVEC}{\#?} &
+\cross{DFVEC}{-?} &
+\cross{DFVEC}{?*?} &
+\cross{DFVEC}{?+?} &
+\cross{DFVEC}{?-?} \\
+\cross{DFVEC}{?.?} &
+\cross{DFVEC}{?$<=$?} &
+\cross{DFVEC}{?$<$?} &
+\cross{DFVEC}{?=?} &
+\cross{DFVEC}{?$>=$?} \\
+\cross{DFVEC}{?$>$?} &
+\cross{DFVEC}{?\~{}=?} &
+\cross{DFVEC}{any?} &
+\cross{DFVEC}{coerce} &
+\cross{DFVEC}{concat} \\
+\cross{DFVEC}{construct} &
+\cross{DFVEC}{convert} &
+\cross{DFVEC}{copy} &
+\cross{DFVEC}{copyInto!} &
+\cross{DFVEC}{count} \\
+\cross{DFVEC}{cross} &
+\cross{DFVEC}{delete} &
+\cross{DFVEC}{dot} &
+\cross{DFVEC}{elt} &
+\cross{DFVEC}{empty} \\
+\cross{DFVEC}{empty?} &
+\cross{DFVEC}{entries} &
+\cross{DFVEC}{entry?} &
+\cross{DFVEC}{eq?} &
+\cross{DFVEC}{eval} \\
+\cross{DFVEC}{every?} &
+\cross{DFVEC}{fill!} &
+\cross{DFVEC}{find} &
+\cross{DFVEC}{first} &
+\cross{DFVEC}{hash} \\
+\cross{DFVEC}{index?} &
+\cross{DFVEC}{indices} &
+\cross{DFVEC}{insert} &
+\cross{DFVEC}{latex} &
+\cross{DFVEC}{length} \\
+\cross{DFVEC}{less?} &
+\cross{DFVEC}{magnitude} &
+\cross{DFVEC}{map} &
+\cross{DFVEC}{map!} &
+\cross{DFVEC}{max} \\
+\cross{DFVEC}{maxIndex} &
+\cross{DFVEC}{member?} &
+\cross{DFVEC}{members} &
+\cross{DFVEC}{merge} &
+\cross{DFVEC}{min} \\
+\cross{DFVEC}{minIndex} &
+\cross{DFVEC}{more?} &
+\cross{DFVEC}{new} &
+\cross{DFVEC}{outerProduct} &
+\cross{DFVEC}{parts} \\
+\cross{DFVEC}{position} &
+\cross{DFVEC}{qelt} &
+\cross{DFVEC}{qnew} &
+\cross{DFVEC}{qsetelt!} &
+\cross{DFVEC}{reduce} \\
+\cross{DFVEC}{remove} &
+\cross{DFVEC}{removeDuplicates} &
+\cross{DFVEC}{reverse} &
+\cross{DFVEC}{reverse!} &
+\cross{DFVEC}{sample} \\
+\cross{DFVEC}{select} &
+\cross{DFVEC}{setelt} &
+\cross{DFVEC}{size?} &
+\cross{DFVEC}{sort} &
+\cross{DFVEC}{sort!} \\
+\cross{DFVEC}{sorted?} &
+\cross{DFVEC}{swap!} &
+\cross{DFVEC}{zero} &&
+\end{tabular}
+
+<<domain DFVEC DoubleFloatVector>>=
+)abbrev domain DFVEC DoubleFloatVector
+++ Author: Waldek Hebisch
+++ Description: This is a low-level domain which implements vectors
+++ (one dimensional arrays) of double precision floating point
+++ numbers.  Indexing is 0 based, there is no bound checking (unless
+++ provided by lower level).
+DoubleFloatVector : VectorCategory DoubleFloat with
+    qnew : Integer -> %
+      ++ qnew(n) creates a new uninitialized vector of length n.
+      ++
+      ++X qnew(7)
+  == add
+    
+    Qelt1 ==> DELT$Lisp
+    Qsetelt1 ==> DSETELT$Lisp
+
+    qelt(x, i) == Qelt1(x, i)
+    qsetelt_!(x, i, s) == Qsetelt1(x, i, s)
+    Qsize ==> DLEN$Lisp
+    Qnew ==> MAKE_-DOUBLE_-VECTOR$Lisp
+    Qnew1 ==> MAKE_-DOUBLE_-VECTOR1$Lisp
+
+    #x                          == Qsize x
+    minIndex x                  == 0
+    empty()                     == Qnew(0$Lisp)
+    qnew(n)                     == Qnew(n)
+    new(n, x)                   == Qnew1(n, x)
+    qelt(x, i)                  == Qelt1(x, i)
+    elt(x:%, i:Integer)         == Qelt1(x, i)
+    qsetelt_!(x, i, s)          == Qsetelt1(x, i, s)
+    setelt(x : %, i : Integer, s : DoubleFloat) == Qsetelt1(x, i, s)
+    fill_!(x, s)       ==
+        for i in 0..((Qsize(x)) - 1) repeat Qsetelt1(x, i, s)
+        x
+
+@
+<<DFVEC.dotabb>>=
+"DFVEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=DFVEC",
+          shape=ellipse]
+"VECTCAT" [color=lightblue,href="bookvol10.2.pdf#nameddest=VECTCAT"];
+"DFVEC" -> "VECTCAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain DROPT DrawOption}
 
 <<DrawOption.input>>=
@@ -148117,6 +148425,7 @@ Note that this code is not included in the generated catdef.spad file.
 <<domain DMP DistributedMultivariatePolynomial>>
 <<domain DIV Divisor>>
 <<domain DFLOAT DoubleFloat>>
+<<domain DFVEC DoubleFloatVector>>
 <<domain DROPT DrawOption>>
 <<domain D01AJFA d01ajfAnnaType>>
 <<domain D01AKFA d01akfAnnaType>>
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 21b4e7a..2d14288 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23911,6 +23911,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|DistinctDegreeFactorize| . DDFACT)
    (|Divisor| . DIV)
    (|DoubleFloat| . DFLOAT)
+   (|DoubleFloatVector| . DFVEC)
    (|DoubleFloatSpecialFunctions| . DFSFUN)
    (|DrawComplex| . DRAWCX)
    (|DrawNumericHack| . DRAWHACK)
@@ -37945,6 +37946,45 @@ an AssociationList representation
 
 @
 
+\section{DoubleFloatVector}
+Double Float Vectors are simple arrays of lisp double-floats
+made available at the Spad language level.
+
+\defmacro{dlen}{DoubleFloatVector Qsize function support}
+<<defmacro dlen>>=
+(defmacro dlen (v)
+ `(length (the (simple-array double-float (*)) ,v)))
+
+@
+
+\defmacro{make-double-vector}{DoubleFloatVector Qnew function support}
+<<defmacro make-double-vector>>=
+(defmacro make-double-vector (n)
+ `(make-array (list ,n) :element-type 'double-float))
+
+@
+
+\defmacro{make-double-vector1}{DoubleFloatVector Qnew1 function support}
+<<defmacro make-double-vector1>>=
+(defmacro make-double-vector1 (n s)
+ `(make-array (list ,n) :element-type 'double-float :initial-element ,s))
+
+@
+
+\defmacro{delt}{DoubleFloatVector Qelt1 function support}
+<<defmacro delt>>=
+(defmacro delt (v i)
+ `(aref (the (simple-array double-float (*)) ,v) ,i))
+
+@
+
+\defmacro{dsetelt}{DoubleFloatVector Qsetelt1 function support}
+<<defmacro dsetelt>>=
+(defmacro dsetelt (v i s)
+ `(setf (aref (the (simple-array double-float (*)) ,v) ,i) ,s))
+
+@
+
 \section{Integer}
 \defun{divide2}{Integer divide function support}
 Note that this is defined as a SPADReplace function in Integer
@@ -39628,10 +39668,15 @@ This needs to work off the internal exposure list, not the file.
 <<defmacro DFTanh>>
 <<defmacro DFUnaryMinus>>
 <<defmacro DFZerop>>
+<<defmacro delt>>
+<<defmacro dlen>>
+<<defmacro dsetelt>>
 <<defmacro funfind>>
 <<defmacro hget>>
 <<defmacro idChar?>>
 <<defmacro identp>>
+<<defmacro make-double-vector>>
+<<defmacro make-double-vector1>>
 <<defmacro memq>>
 <<defmacro Rest>>
 <<defmacro startsId?>>
diff --git a/books/ps/v103doublefloatvector.ps b/books/ps/v103doublefloatvector.ps
new file mode 100644
index 0000000..cee6edf
--- /dev/null
+++ b/books/ps/v103doublefloatvector.ps
@@ -0,0 +1,258 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 132 152
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 132 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 96 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% DFVEC
+gsave
+[ /Rect [ 0 72 88 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=DFVEC) >>
+  /Subtype /Link
+/ANN pdfmark
+0.273 0.733 1.000 nodecolor
+44 90 43.97 18 ellipse_path fill
+1 setlinewidth
+filled
+0.273 0.733 1.000 nodecolor
+44 90 43.97 18 ellipse_path stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+20 85.9 moveto 48 (DFVEC) alignedtext
+grestore
+% VECTCAT
+gsave
+[ /Rect [ 4 0 84 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=VECTCAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.537 0.247 0.902 nodecolor
+newpath 84 36 moveto
+4 36 lineto
+4 0 lineto
+84 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.537 0.247 0.902 nodecolor
+newpath 84 36 moveto
+4 36 lineto
+4 0 lineto
+84 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+11.5 13.9 moveto 65 (VECTCAT) alignedtext
+grestore
+% DFVEC->VECTCAT
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 44 72 moveto
+44 64 44 55 44 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 47.5 46 moveto
+44 36 lineto
+40.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 47.5 46 moveto
+44 36 lineto
+40.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 8b98b59..c80ef8d 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100703 wxh src/axiom-website/patches.html 20100703.02.wxh.patch
+20100703 wxh src/algebra/Makefile help and test files for DoubleFloatVector
+20100703 wxh books/bookvol5 expose DFVEC, add support macros
+20100703 wxh books/ps/v103doublefloatvector.ps added
+20100703 wxh books/bookvol10.3 add DoubleFloatVector
 20100703 tpd src/axiom-website/patches.html 20100703.01.tpd.patch
 20100703 tpd books/bookvol6 fix deleted variable from axiom script
 20100702 tpd src/axiom-website/patches.html 20100702.03.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index b5eba6c..2aac71f 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -4447,8 +4447,8 @@ Used by next layer: IVECTOR PTCAT STRICAT
 <<layer9>>=
 
 LAYER9=\
-  ${OUT}/AFFPL.o    \
-  ${OUT}/BITS.o     ${OUT}/DIRPROD2.o ${OUT}/IMATRIX.o  ${OUT}/INTRVL.o  \
+  ${OUT}/AFFPL.o    ${OUT}/BITS.o     ${OUT}/DFVEC.o   \
+  ${OUT}/DIRPROD2.o ${OUT}/IMATRIX.o  ${OUT}/INTRVL.o  \
   ${OUT}/IVECTOR.o  ${OUT}/LOCPOWC.o  \
   ${OUT}/LODO1.o    ${OUT}/LODO2.o    ${OUT}/LPOLY.o   \
   ${OUT}/LSMP.o     ${OUT}/LSMP1.o    ${OUT}/MATCAT2.o  ${OUT}/PROJPL.o   \
@@ -4482,6 +4482,20 @@ LAYER9=\
 /*"BITS" -> {"RETRACT"; "LINEXP"; "PATMAB"; "CFCAT"; "REAL"; "CHARZ"}*/
 /*"BITS" -> {"STEP"; "OM"}*/
 
+"DFVEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=DFVEC"]
+"DFVEC" -> "VECTCAT"
+/*"DFVEC" -> {"A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"}*/
+/*"DFVEC" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "EVALAB"; "IEVALAB"; "ELTAGG"}*/
+/*"DFVEC" -> {"ELTAB"; "CLAGG"; "KONVERT"; "ORDSET"; "INT"; "SINT"; "NNI"}*/
+/*"DFVEC" -> {"FPS"; "RNS"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/
+/*"DFVEC" -> {"COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"}*/
+/*"DFVEC" -> {"ABELSG"; "SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"}*/
+/*"DFVEC" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"; "DIVRING"; "ORDRING"}*/
+/*"DFVEC" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "REAL"; "RETRACT"}*/
+/*"DFVEC" -> {"RADCAT"; "PATMAB"; "CHARZ"; "DIFRING"; "OM"; "TRANFUN"}*/
+/*"DFVEC" -> {"TRIGCAT"; "ATRIG"; "HYPCAT"; "AHYP"; "ELEMFUN"; "SPFCAT"}*/
+/*"DFVEC" -> {"INS"; "OINTDOM"; "LINEXP"; "CFCAT"; "STEP"}*/
+
 "DIRPROD2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=DIRPROD2"]
 /*"DIRPROD2" -> "TYPE"*/
 "DIRPROD2" -> "VECTCAT"
@@ -17325,6 +17339,7 @@ SPADHELP=\
  ${HELP}/Divisor.help \
  ${HELP}/DivisorCategory.help \
  ${HELP}/DoubleFloat.help \
+ ${HELP}/DoubleFloatVector.help \
  ${HELP}/DoublyLinkedAggregate.help \
  ${HELP}/DrawOption.help \
  ${HELP}/d01ajfAnnaType.help \
@@ -18012,6 +18027,7 @@ REGRESS= \
  Divisor.regress \
  DivisorCategory.regress \
  DoubleFloat.regress \
+ DoubleFloatVector.regress \
  DoublyLinkedAggregate.regress \
  DrawOption.regress \
  d01ajfAnnaType.regress \
@@ -20108,6 +20124,16 @@ ${HELP}/DoubleFloat.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/DoubleFloat.input
 	@echo "DoubleFloat (DFLOAT)" >>${HELPFILE}
 
+${HELP}/DoubleFloatVector.help: ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7210 create DoubleFloatVector.help from \
+            ${BOOKS}/bookvol10.3.pamphlet
+	@${TANGLE} -R"DoubleFloatVector.help" ${BOOKS}/bookvol10.3.pamphlet \
+            >${HELP}/DoubleFloatVector.help
+	@cp ${HELP}/DoubleFloatVector.help ${HELP}/DFVEC.help
+	@${TANGLE} -R"DoubleFloatVector.input" ${BOOKS}/bookvol10.3.pamphlet \
+            >${INPUT}/DoubleFloatVector.input
+	@echo "DoubleFloatVector (DFVEC)" >>${HELPFILE}
+
 ${HELP}/DoublyLinkedAggregate.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo 5000 create DoublyLinkedAggregate.help from \
            ${BOOKS}/bookvol10.2.pamphlet
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 0e1d097..b50e256 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2968,5 +2968,7 @@ src/doc/Makefile cleanly latex pure latex files<br/>
 src/input/Makefile segment test set choice from command line<br/>
 <a href="patches/20100703.01.tpd.patch">20100703.01.tpd.patch</a>
 books/bookvol6 fix deleted variable from axiom script<br/>
+<a href="patches/20100703.02.wxh.patch">20100703.02.wxh.patch</a>
+books/bookvol10.3 add DoubleFloatVector<br/>
  </body>
 </html>
