diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 3ef9743..1e25963 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -41819,7 +41819,8 @@ IdealDecompositionPackage(vl,nv) : C == T -- take away nv, now doesn't
        n:= # lvar
        #fullVars < n  => error "wrong vars"
        n=0 => I
-       newVars:= append([vv for vv in fullVars| ^member?(vv,lvar)]$List(OV),lvar)
+       newVars:=
+         append([vv for vv in fullVars| ^member?(vv,lvar)]$List(OV),lvar)
        subsVars := [monomial(1,vv,1)$DPoly1 for vv in newVars]
        lJ:= [eval(g,fullVars,subsVars) for g in Id]
        J := groebner(lJ)
@@ -44668,6 +44669,119 @@ InputFormFunctions1(R:Type):with
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package INTERGB InterfaceGroebnerPackage}
+<<InterfaceGroebnerPackage.input>>=
+)set break resume
+)sys rm -f InterfaceGroebnerPackage.output
+)spool InterfaceGroebnerPackage.output
+)set message test on
+)set message auto off
+)clear all
+--S 1 of 1
+)show InterfaceGroebnerPackage
+--R InterfaceGroebnerPackage(K: Field,symb: List Symbol,E: OrderedAbelianMonoidSup,OV: OrderedSet,R: PolynomialCategory(K,E,OV))  is a package constructor
+--R Abbreviation for InterfaceGroebnerPackage is INTERGB 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for INTERGB 
+--R
+--R------------------------------- Operations --------------------------------
+--R groebner : List R -> List R          
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<InterfaceGroebnerPackage.help>>=
+====================================================================
+InterfaceGroebnerPackage examples
+====================================================================
+
+See Also:
+o )show InterfaceGroebnerPackage
+
+@
+\pagehead{InterfaceGroebnerPackage}{INTERGB}
+\pagepic{ps/v104interfacegroebnerpackage.ps}{INTERGB}{1.00}
+
+{\bf Exports:}\\
+\cross{INTERGB}{groebner}
+
+<<package INTERGB InterfaceGroebnerPackage>>=
+)abbrev package INTERGB InterfaceGroebnerPackage
+++ Author: Gaetan Hache
+++ Date Created: September 1996
+++ Date Last Updated: April, 2010, by Tim Daly
+++ Description:
+++ Part of the Package for Algebraic Function Fields in one variable PAFF
+InterfaceGroebnerPackage(K,symb,E,OV,R):Exports == Implementation where
+  K:Field
+  symb: List Symbol
+  E:OrderedAbelianMonoidSup
+  OV: OrderedSet
+  R    : PolynomialCategory(K,E,OV)
+
+  Exports ==>  with
+    groebner: List R -> List R
+      
+  Implementation ==>  add
+    if ^(K has FiniteFieldCategory) then
+
+      GBPackR ==> GroebnerPackage(K,E,OV,R)  
+      groebner(l)==groebner(l)$GBPackR
+
+    else 
+
+      q:PositiveInteger:=(characteristic()$K pretend PositiveInteger)
+  
+      PF ==> PrimeField(q)
+      DPF ==> DistributedMultivariatePolynomial(symb,PF)
+      D ==> DistributedMultivariatePolynomial(symb,K)
+      JCFGBPack ==> GroebnerPackage(PF,E,OV,DPF)
+      GBPack ==> GroebnerPackage(K,E,OV,D)  
+
+      coerceKtoPF: K -> PF
+      coerceKtoPF(a:K):PF==
+        index(lookup(a)$K)$PF
+
+      coercePFtoK: PF -> K  
+      coercePFtoK(a:PF):K==
+        index(lookup(a)$PF)$K
+  
+      coerceRtoDwithPF: R -> DPF
+      coerceRtoDwithPF(pol) ==
+        map(coerceKtoPF(#1),pol)$MPolyCatFunctions2(OV,E,E,K,PF,R,DPF)
+  
+      coerceDtoRwithPF: DPF->R 
+      coerceDtoRwithPF(pol) ==
+        map(coercePFtoK(#1),pol)$MPolyCatFunctions2(OV,E,E,PF,K,DPF,R)
+
+      coerceRtoD: R -> D
+      coerceRtoD(pol) == map(#1,pol)$MPolyCatFunctions2(OV,E,E,K,K,R,D)
+  
+      coerceDtoR: D->R 
+      coerceDtoR(pol) == map(#1,pol)$MPolyCatFunctions2(OV,E,E,K,K,D,R)
+
+      gs:= size()$K
+      if gs = q and (representationType()$K case "prime")  then 
+        groebner(l)==
+	  ldmp:List DPF:= [coerceRtoDwithPF(pol) for pol in l]
+          gg:=groebner(ldmp)$JCFGBPack
+          [coerceDtoRwithPF(pol) for pol in gg]
+      else
+        groebner(l)==
+	  ldmp:List D:= [coerceRtoD(pol) for pol in l]
+          gg:=groebner(ldmp)$GBPack
+          [coerceDtoR(pol) for pol in gg]
+
+@
+<<INTERGB.dotabb>>=
+"INTERGB" [color="#FF4488",href="bookvol10.4.pdf#nameddest=INTERGB"]
+"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"]
+"INTERGB" -> "PFECAT"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package INTBIT IntegerBits}
 Bug! Cannot precompute params and return a function which
 simply computes the last call.  e.g. ridHack1, below.
@@ -154370,6 +154484,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package ISUMP InnerPolySum>>
 <<package ITRIGMNP InnerTrigonometricManipulations>>
 <<package INFORM1 InputFormFunctions1>>
+<<package INTERGB InterfaceGroebnerPackage>>
 <<package INTBIT IntegerBits>>
 <<package COMBINAT IntegerCombinatoricFunctions>>
 <<package INTFACT IntegerFactorizationPackage>>
diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet
index fb0225b..ff596f9 100644
--- a/books/bookvol10.5.pamphlet
+++ b/books/bookvol10.5.pamphlet
@@ -548,7 +548,7 @@ BlasLevelOne() : Exports == Implementation where
 
 @
 <<BLAS1.dotabb>>=
-"BLAS1" [color="#FF4488",href="bookvol10.5.pdf#nameddest=BLAS1"]
+"BLAS1" [color="#FF8844",href="bookvol10.5.pdf#nameddest=BLAS1"]
 "FIELD" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FIELD"]
 "RADCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=RADCAT"]
 "BLAS1" -> "FIELD"
diff --git a/changelog b/changelog
index 0193e36..2c820db 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20100422 tpd src/axiom-website/patches.html 20100422.01.tpd.patch
+20100422 tpd src/algebra/Makefile add InterfaceGroebnerPackage
+20100422 tpd books/bookvol10.5 add InterfaceGroebnerPackage
+20100422 tpd books/bookvol10.4 add InterfaceGroebnerPackage
 20100421 tpd src/axiom-website/patches.html 20100421.01.tpd.patch
 20100421 tpd src/algebra/Makefile add FFFACTSE
 20100421 tpd books/bookvol5.pamphlet add FFFACTSE
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index fea2dab..fb8be9b 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -5159,7 +5159,8 @@ LAYER11=\
   ${OUT}/HDP.o      ${OUT}/HEXADEC.o  ${OUT}/HEUGCD.o   ${OUT}/IBPTOOLS.o \
   ${OUT}/IFF.o      ${OUT}/IBITS.o    ${OUT}/ICARD.o    ${OUT}/ICDEN.o    \
   ${OUT}/IDECOMP.o  ${OUT}/IIARRAY2.o ${OUT}/IMATLIN.o  ${OUT}/IMATQF.o   \
-  ${OUT}/INMODGCD.o ${OUT}/INNMFACT.o ${OUT}/INPSIGN.o  ${OUT}/INTHERTR.o \
+  ${OUT}/INMODGCD.o ${OUT}/INNMFACT.o ${OUT}/INPSIGN.o  ${OUT}/INTERGB.o  \
+  ${OUT}/INTHERTR.o \
   ${OUT}/INTRAT.o   ${OUT}/INTRF.o    ${OUT}/INTSLPE.o  ${OUT}/INTTR.o    \
   ${OUT}/ISUMP.o    ${OUT}/LAUPOL.o   ${OUT}/LEADCDET.o ${OUT}/LGROBP.o   \
   ${OUT}/LIMITRF.o  ${OUT}/LINDEP.o   ${OUT}/LO.o       ${OUT}/LPEFRAC.o  \
@@ -6806,6 +6807,19 @@ LAYER11=\
 /*"INPSIGN" -> {"UFD"; "ELTAB"; "DIFRING"; "DIFEXT"; "STEP"; "EUCDOM"}*/
 /*"INPSIGN" -> {"PID"; "FIELD"; "DIVRING"; "INT"; "INS-"}*/
 
+"INTERGB" [color="#FF4488",href="bookvol10.4.pdf#nameddest=INTERGB"]
+/*"INTERGB" -> {
+/*"INTERGB" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/
+/*"INTERGB" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
+/*"INTERGB" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"}*/
+/*"INTERGB" -> {"LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"}*/
+/*"INTERGB" -> {"ENTIRER"; "UFD"; "DIVRING"; "OAMONS"; "OCAMON"; "OAMON"}*/
+/*"INTERGB" -> {"OASGP"; "ORDSET"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"}*/
+/*"INTERGB" -> {"CHARZ"; "CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"}*/
+/*"INTERGB" -> {"IEVALAB"; "FLINEXP"; "LINEXP"; "KONVERT"; "PATMAB"}*/
+"INTERGB" -> "PFECAT"
+/*"INTERGB" -> {"FFIELDC"; "FPC"; "FINITE"; "STEP"; "DIFRING"; "NNI"; "INT"}*/
+
 "INT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=INT",
           shape=ellipse]
 /*"INT" -> {"INS"; "UFD"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
@@ -16566,6 +16580,7 @@ SPADHELP=\
  ${HELP}/IntegerCombinatoricFunctions.help \
  ${HELP}/IntegerLinearDependence.help \
  ${HELP}/IntegerNumberTheoryFunctions.help \
+ ${HELP}/InterfaceGroebnerPackage.help \
  ${HELP}/Kernel.help \
  ${HELP}/KeyedAccessFile.help \
  ${HELP}/LazardSetSolvingPackage.help \
@@ -16724,6 +16739,7 @@ REGRESS= \
  IntegerCombinatoricFunctions.regress \
  IntegerLinearDependence.regress \
  IntegerNumberTheoryFunctions.regress \
+ InterfaceGroebnerPackage.regress \
  Kernel.regress \
  KeyedAccessFile.regress \
  LazardSetSolvingPackage.regress \
@@ -17367,6 +17383,18 @@ ${HELP}/IntegerNumberTheoryFunctions.help: ${BOOKS}/bookvol10.4.pamphlet
             >${INPUT}/IntegerNumberTheoryFunctions.input
 	@echo "IntegerNumberTheoryFunctions (INTHEORY)" >>${HELPFILE}
 
+${HELP}/InterfaceGroebnerPackage.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7455 create InterfaceGroebnerPackage.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"InterfaceGroebnerPackage.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/InterfaceGroebnerPackage.help
+	@cp ${HELP}/InterfaceGroebnerPackage.help ${HELP}/INTERGB.help
+	@${TANGLE} -R"InterfaceGroebnerPackage.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/InterfaceGroebnerPackage.input
+	@echo "InterfaceGroebnerPackage (INTERGB)" >>${HELPFILE}
+
 ${HELP}/Kernel.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7460 create Kernel.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Kernel.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index c6d2ba7..f74787a 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2651,5 +2651,7 @@ books/bookvol4 document how to make graphs in algebra books<br/>
 zips/gcl-2.6.8pre4.tgz added, fix for ubuntu 9.10<br/>
 <a href="patches/20100421.01.tpd.patch">20100421.01.tpd.patch</a>
 books/bookvol10.4 add FiniteFieldFactorizationWithSizeParseBySideEffect<br/>
+<a href="patches/20100422.01.tpd.patch">20100422.01.tpd.patch</a>
+books/bookvol10.4 add InterfaceGroebnerPackage<br/>
  </body>
 </html>
