diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 2e51095..9596810 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -28221,22 +28221,20 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
   V: FiniteAbelianMonoidRing(D, NonNegativeInteger)
   VF: FiniteAbelianMonoidRing(Fraction D, NonNegativeInteger)
 
-  F ==> Fraction D
-
-  SUP  ==> SparseUnivariatePolynomial
-
-  FFFG ==> FractionFreeFastGaussian
-
+  F     ==> Fraction D
+  NNI   ==> NonNegativeInteger
+  SUP   ==> SparseUnivariatePolynomial
+  FFFG  ==> FractionFreeFastGaussian
   FAMR2 ==> FiniteAbelianMonoidRingFunctions2
 
-  cFunction ==> (NonNegativeInteger, Vector SUP D) -> D
+  cFunction ==> (NNI, Vector SUP D) -> D
 
-  CoeffAction ==> (NonNegativeInteger, NonNegativeInteger, V) -> D
+  CoeffAction ==> (NNI, NNI, V) -> D
 -- coeffAction(k, l, f) is the coefficient of x^k in z^l f(x)
 
   Exports == with
 
-    generalInterpolation: (List D, CoeffAction, Vector VF, List NonNegativeInteger) 
+    generalInterpolation: (List D, CoeffAction, Vector VF, List NNI) 
                           -> Matrix SUP D
       ++ \spad{generalInterpolation(l, CA, f, eta)} performs Hermite-Pade
       ++ approximation using the given action CA of polynomials on the elements
@@ -28245,8 +28243,7 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
       ++ diagonal are given by eta. The degrees of column i are in this case
       ++ eta + e.i - [1,1,...,1], where the degree of zero is -1.
 
-    generalInterpolation: (List D, CoeffAction, 
-                           Vector VF, NonNegativeInteger, NonNegativeInteger) 
+    generalInterpolation: (List D, CoeffAction, Vector VF, NNI, NNI) 
                           -> Stream Matrix SUP D
       ++ \spad{generalInterpolation(l, CA, f, sumEta, maxEta)} applies
       ++ generalInterpolation(l, CA, f, eta) for all possible eta with maximal
@@ -28263,7 +28260,7 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
       M
 
     generalInterpolation(C: List D, coeffAction: CoeffAction, 
-                         f: Vector VF, eta: List NonNegativeInteger): Matrix SUP D == 
+                         f: Vector VF, eta: List NNI): Matrix SUP D == 
       n := #f
       g: Vector V   := new(n, 0)
       den: Vector D := new(n, 0)
@@ -28271,8 +28268,8 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
       for i in 1..n repeat
         c := coefficients(f.i)
         den.i := commonDenominator(c)$CommonDenominator(D, F, List F)
-        g.i := map(x +-> retract(x*den.i)@D, f.i) 
-                  $FAMR2(NonNegativeInteger, Fraction D, VF, D, V)
+        g.i := 
+          map(x +-> retract(x*den.i)@D, f.i)$FAMR2(NNI, Fraction D, VF, D, V)
 
       M := generalInterpolation(C, coeffAction, g, eta)$FFFG(D, V)
 
@@ -28283,10 +28280,8 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
       multiplyRows!(den, M)
 
     generalInterpolation(C: List D, coeffAction: CoeffAction, 
-                         f: Vector VF, 
-                         sumEta: NonNegativeInteger,
-                         maxEta: NonNegativeInteger)
-                        : Stream Matrix SUP D == 
+                         f: Vector VF, sumEta: NNI, maxEta: NNI)
+                          : Stream Matrix SUP D == 
 
       n := #f
       g: Vector V   := new(n, 0)
@@ -28295,11 +28290,11 @@ FractionFreeFastGaussianFractions(D, V, VF): Exports == Implementation where
       for i in 1..n repeat
         c := coefficients(f.i)
         den.i := commonDenominator(c)$CommonDenominator(D, F, List F)
-        g.i := map(x +-> retract(x*den.i)@D, f.i)
-                  $FAMR2(NonNegativeInteger, Fraction D, VF, D, V)
+        g.i := 
+          map(x +-> retract(x*den.i)@D, f.i)$FAMR2(NNI, Fraction D, VF, D, V)
 
-      c: cFunction := (x,y) +-> generalCoefficient(coeffAction, g,
-                                 (x-1)::NonNegativeInteger, y)$FFFG(D, V)
+      c: cFunction := 
+       (x,y) +-> generalCoefficient(coeffAction, g, (x-1)::NNI, y)$FFFG(D, V)
 
 
       MS: Stream Matrix SUP D 
@@ -28825,10 +28820,10 @@ component of the gradient failed, it resulted in an infinite loop for
 [[integrate(D(besselJ(a,x),a),a)]].
 
 <<package FSPECF FunctionalSpecialFunction>>=
-    derivative(opabs,       abs(#1) * inv(#1))
-    derivative(opGamma,     digamma #1 * Gamma #1)
+    derivative(opabs,       (x:F):F +-> abs(x) * inv(x))
+    derivative(opGamma,     (x:F):F +-> digamma x * Gamma x)
     derivative(opBeta,      [iBetaGrad1, iBetaGrad2])
-    derivative(opdigamma,   polygamma(1, #1))
+    derivative(opdigamma,   (x:F):F +-> polygamma(1, x))
     setProperty(oppolygamma, SPECIALDIFF, ipolygamma@((List F, SE)->F)
                                                      pretend None)
     setProperty(opBesselJ, SPECIALDIFF, iBesselJ@((List F, SE)->F) 
diff --git a/changelog b/changelog
index 80cc5a4..6b81289 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090519 tpd src/axiom-website/patches.html 20090519.07.tpd.patch
+20090519 tpd books/bookvol10.4 FSPECF +-> conversion
 20090519 tpd src/axiom-website/patches.html 20090519.06.tpd.patch
 20090519 tpd books/bookvol10.3 UNISEG +-> conversion
 20090519 tpd src/axiom-website/patches.html 20090519.05.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index d0aa142..d7addf8 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1376,5 +1376,7 @@ bookvol10.3 UTS +-> conversion<br/>
 bookvol10.4 FFFGF +-> conversion<br/>
 <a href="patches/20090519.06.tpd.patch">20090519.06.tpd.patch</a>
 bookvol10.3 UNISEG +-> conversion<br/>
+<a href="patches/20090519.07.tpd.patch">20090519.07.tpd.patch</a>
+bookvol10.4 FSPECF +-> conversion<br/>
  </body>
 </html>
