diff --git a/HTML/deepseq-bounded.html b/HTML/deepseq-bounded.html
--- a/HTML/deepseq-bounded.html
+++ b/HTML/deepseq-bounded.html
@@ -8,54 +8,22 @@
 
 <div class="main">
 
-<!--
-<p>
-<br />
-<span class="red">Hyperlinks aren't set up yet.</span>
-<p>
-<span class="red">The introductory part, at least, needs a rewrite!</span>
-<p>
-<span class="red">Also, am I going to stay with this convention of having the download links take up the first section of every such posting?</span>
-<p>
-<span class="red">The PatAlg section needs updating; which should probably wait until done these new ideas (Seqable, the P* PatNode's, the S* PatNode's).</span>
--->
-
 <h2 style="margin-top: 50px;">Bounded Forcing</h2>
 
-<!--
-<h3>Download</h3>
-
-Here's <a href="deepseq-bounded-1.3.0.2.tar.gz">full source</a> (BSD3-licensed, Cabal sdist) for:
-<ul>
-<li>building the library
-<li>building the testbench corresponding to the examples in this post.
-</ul>
-
-<p>
-
-On Hackage: <a href="http://hackage.haskell.org/package/deepseq-bounded">deepseq-bounded</a>
-
--->
-
-<!--div>
-<p>
-<Haddock API <a href="api/html/deepseq-bounded/index.html">here</a>.
-</div-->
-
-The <a href="http://hackage.haskell.org/package/deepseq-bounded">deepseq-bounded</a> package provides two means of forcing a Haskell expression to an arbitrary but bounded depth, <tt>deepseqn</tt> and <tt>deepseqp</tt>.
+The <a href="http://hackage.haskell.org/package/deepseq-bounded"><span class="nowrap">deepseq-bounded</span></a> package provides two means of forcing a Haskell expression to an arbitrary but bounded depth, <tt>deepseqn</tt> and <tt>deepseqp</tt>.
 As compared with plain <tt>seq</tt> (incremental forcing) and the beloved <tt>deepseq</tt> (full forcing), the bounded versions bridge the gap between these extremes.
 <p>
 Artificially forcing evaluation can be useful to relieve space leak, measure and tune performance, influence exception behaviour, make lazy I/O happen in a timely manner, and assure threads don't accidentally pass unevaluated computations to other threads ("time leak").
-Bounded forcing (what this package offers) is necessary to work with streams, and other "infinite" datastructures, where plain <tt>rnf</tt>/<tt>deepseq</tt>/<tt>force</tt> will diverge.
+Bounded forcing (what this package offers) is necessary to work with streams, and other "infinite" data structures, where plain <tt>rnf</tt>/<tt>deepseq</tt>/<tt>force</tt> will diverge.
 <p>
 <a id="dig03s" class="dig-toggle-show" href='javascript:toggle("dig03");' style="margin-left: 0px;">Show</a>
 <div id="dig03" class="digression" style="margin-left: 0px;">
 <a id="dig03h" class="dig-toggle-hide" href='javascript:toggle("dig03");'>Hide</a><p>
-My particular motivation for <tt>deepseq-bounded</tt> is to support tool building for space leak characterisation (and provisional alleviation).
+My particular motivation for <tt><span class="nowrap">deepseq-bounded</span></tt> is to support tool building for space leak characterisation (and provisional alleviation).
 Readers interested in those aspects might like to have a look at <a href="http://hackage.haskell.org/package/seqaid">seqaid</a> and <a href="http://hackage.haskell.org/package/leaky">leaky</a>.
 Space leak is still an Achilles' heel of Haskell, they're often fatally severe, and can be as hard to debug as anything you see in other languages.
 With the present tools in use, it's fair to say Haskell space leak is more difficult to diagnose than pointer bugs in C/C++, being perhaps on a par with concurrent programming bugs (probably the most difficult class of bugs in all of contemporary computing).
-People talk about strict-by-default Haskell in the future, but it remains there, and anyway, lazyness has its charm and strengths and is attractive to many.
+People talk about strict-by-default Haskell in the future, but it remains there, and anyway, laziness has its charm and strengths and is attractive to many.
 </div>
 
 <p>
@@ -411,12 +379,12 @@
 <p>
 Note that mutually-recursive data types require all their <tt>deriveGeneric</tt> calls to come below their collective definitions.
 <p>
-SOP also offers an alternative approach to automatic instance derivation, piggybacking on <tt>GHC.Generics</tt>, in case Template Haskell is unacceptable in your application.
+SOP also offers an alternative approach to automatic instance derivation, piggybacking on <tt>GHC.Generics</tt>, in case Template Haskell is unacceptable in your application.<a id="patalg"></a>
 <p>
 It might be worth noting that the <a href="http://hackage.haskell.org/package/seqaid">seqaid</a> package provides a mechanism for completely automating this process.
 However, it depends on use of a preprocessor, and was deemed inappropriate for this core library.
 
-<h3 id="patalg">Pattern Algebra</h3>
+<h3>Pattern Algebra</h3>
 
 In the course of developing <tt>NFDataP</tt>, several utility functions were written for creating, modifying and combining patterns.
 They've been collected in the <tt>PatAlg</tt> module.
@@ -552,17 +520,17 @@
 Here is the result of iterating <tt>shrinkPat</tt> on a test pattern.
 
 <pre>
-".{.{#.{*.{.*3}}}.{..{*1.{..{##}}}}}"
-".{.{#.{*5.{#*2}}}.{#.{#.{##}}}}"
-".{.{#.{*4.{#.}}}.{#.{##}}}"
-".{.{#.{*3.{##}}}.{##}}"
-".{.{#.{*2#}}#}"
-".{.{#.{.#}}#}"
-".{.{#.{##}}#}"
-".{.{##}#}"
-".{##}"
-"#"
-"#"
+.{.{#.{*.{.*3}}}.{..{*1.{..{##}}}}}
+.{.{#.{*5.{#*2}}}.{#.{#.{##}}}}
+.{.{#.{*4.{#.}}}.{#.{##}}}
+.{.{#.{*3.{##}}}.{##}}
+.{.{#.{*2#}}#}
+.{.{#.{.#}}#}
+.{.{#.{##}}#}
+.{.{##}#}
+.{##}
+#
+#
 </pre>
 
 <div class="footer" style="margin-top: 50px;">
diff --git a/HTML/style-old.css b/HTML/style-old.css
--- a/HTML/style-old.css
+++ b/HTML/style-old.css
@@ -23,3 +23,4 @@
 tr { text-align: top; vertical-align: top; }
 td { text-align: top; vertical-align: top; padding-left: 8px; padding-top: 16px; }
 li { margin-top: 4px; }
+.nowrap { white-space: nowrap; }
diff --git a/HTML/style.css b/HTML/style.css
--- a/HTML/style.css
+++ b/HTML/style.css
@@ -26,3 +26,4 @@
 tr { text-align: top; vertical-align: top; }
 td { text-align: top; vertical-align: top; padding-left: 8px; padding-top: 16px; }
 li { margin-top: 4px; }
+.nowrap { white-space: nowrap; }
diff --git a/deepseq-bounded.cabal b/deepseq-bounded.cabal
--- a/deepseq-bounded.cabal
+++ b/deepseq-bounded.cabal
@@ -1,14 +1,14 @@
 
 name:		deepseq-bounded
-version:        0.5.1
+version:        0.5.2
 synopsis:       Bounded deepseq, including support for generic deriving
 homepage:       http://fremissant.net/deepseq-bounded
---homepage:       https://fremissant.com/deepseq-bounded
---bug-reports:    https://fremissant.com/deepseq-bounded/issues
 license:	BSD3
 license-file:	LICENSE
 author:         Andrew G. Seniuk
-maintainer:     andrew.seniuk@gmail.com
+maintainer:     Andrew Seniuk <rasfar@gmail.com>
+bug-reports:    Andrew Seniuk <rasfar@gmail.com>
+--bug-reports:    http://fremissant.net/deepseq-bounded/trac
 category:       Control
 build-type:     Simple
 cabal-version:  >=1.10
@@ -27,7 +27,7 @@
     Quoting comments from the
     <https://hackage.haskell.org/package/deepseq deepseq> package:
     .
-    /\"Artificial forcing is often used for adding strictness to a program, e.g. in order to force pending exceptions, remove space leaks, or force lazy I\/O to happen. It is also useful in parallel programs, to ensure work does not migrate to the wrong thread.\"/
+    \"/Artificial forcing is often used for adding strictness to a program, e.g. in order to force pending exceptions, remove space leaks, or force lazy IO to happen. It is also useful in parallel programs, to ensure work does not migrate to the wrong thread./\"
     .
     Sometimes we don't want to, or cannot, force all the way.
     Any infinite recursive type is an example. Also, bounded forcing
@@ -66,7 +66,7 @@
 --   tag:      deepseq-bounded-1.3.0.2-release
 
 Flag HASKELL98_FRAGMENT
-  Description: Sacrifice generic deriving, the NFDataPDyn module, and a couple functions from the PatAlg module, in exchange for true Haskell98 conformance (portability). You need to set PARALLELISM_EXPERIMENT, USE_WW_DEEPSEQ, USE_SOP, and NFDATA_INSTANCE_PATTERN to False if you set HASKELL98_FRAGMENT to True. (This was once up-to-date, but may have become in need of some attention. One thing it insists on is -XPatternGuards, although this could be relieved in the obvious way...)
+  Description: Sacrifice generic deriving, the NFDataPDyn module, and a couple functions from the PatAlg module, in exchange for true Haskell98 conformance (portability). You need to set PARALLELISM_EXPERIMENT, USE_WW_DEEPSEQ, USE_SOP, and NFDATA_INSTANCE_PATTERN to False if you set HASKELL98_FRAGMENT to True. (One thing it insists on is -XPatternGuards, although this could be relieved in the obvious way...)
 --Default:     True
   Default:     False
 
@@ -96,7 +96,7 @@
   Default:     False
 
 Flag USE_SOP
-  Description: Use the generics-sop package instead of SYB for generics. NFDataPDyn and GNFDataP modules will not be available.
+  Description: Use the generics-sop package instead of GHC.Generics (in GNFDataN) and instead of SYB (in NFDataPDyn). If USE_SOP is False, and NFDataPDyn, GNFDataP, and GSeqable modules will not be available. Also, if USE_SOP is False, then JUST_ALIAS_GSEQABLE must be False (this is not done for you; the language of Cabal flags makes it hard to write such logic, probably by design!...).
   Default:     True
 --Default:     False
 
diff --git a/src/Control/DeepSeq/Bounded/Generics/GNFDataP.hs b/src/Control/DeepSeq/Bounded/Generics/GNFDataP.hs
--- a/src/Control/DeepSeq/Bounded/Generics/GNFDataP.hs
+++ b/src/Control/DeepSeq/Bounded/Generics/GNFDataP.hs
@@ -129,13 +129,16 @@
 
   import Control.DeepSeq.Bounded.NFDataP ( NFDataP, rnfp )
   import Control.DeepSeq.Bounded.NFDataN (          rnfn )
-  import     Control.DeepSeq                 (          rnf  )
+  import Control.DeepSeq                 (          rnf  )
 
-  import Control.DeepSeq.Bounded.Pattern
-           ( Pattern(..), PatNode(..), Rose(..) )
+  import Control.DeepSeq.Bounded.Pattern ( Pattern(..), PatNode(..), Rose(..) )
 
   import Generics.SOP
 
+#if PARALLELISM_EXPERIMENT
+  import Control.Parallel ( par )
+#endif
+
   import Data.Maybe
   import Debug.Trace ( trace )
 --import System.IO.Unsafe ( unsafePerformIO )  -- for console output only
@@ -229,6 +232,10 @@
    | TI treps <- p  = if elem tx treps then () else dorecurs
    | WW       <- p  = rnf x
    | WN n     <- p  = rnfn n x
+#if PARALLELISM_EXPERIMENT
+   | PW       <- p  = rnf x `par` ()
+   | PN n     <- p  = rnfn n x `par` ()
+#endif
    | TW treps <- p  = if elem tx treps then rnf x else ()  -- no better!
    | otherwise      = dorecurs
    where
@@ -239,11 +246,21 @@
        | (Record n _) <- m     = n
     !_ = mytrace ("VVV "++show status) $ ()
     msg = fromJust mmsg
+#if PARALLELISM_EXPERIMENT
 #if DO_TRACE
+    dorecurs | PR <- p    = grnfpP_ m () True p pcs xs `par` ()
+             | otherwise  = grnfpP_ m () True p pcs xs `seq` ()
+#else
+    dorecurs | PR <- p    = grnfpP m () True p pcs xs `par` ()
+             | otherwise  = grnfpP m () True p pcs xs `seq` ()
+#endif
+#else
+#if DO_TRACE
     dorecurs = grnfpP_ m () True p pcs xs `seq` ()
 #else
     dorecurs = grnfpP m () True p pcs xs `seq` ()
 #endif
+#endif
 
   grnfpS (m :* ms) proxy_a pat x (SOP (S xss))
    = grnfpS ms proxy_a pat x (SOP xss)
@@ -336,6 +353,10 @@
   grnfpP_validate' True   WI    []  tx xss = (True,Nothing)
   grnfpP_validate' True  (WN n) []  tx xss = (True,Nothing)
   grnfpP_validate' True   WW    []  tx xss = (True,Nothing)
+#if PARALLELISM_EXPERIMENT
+  grnfpP_validate' True  (PN n) []  tx xss = (True,Nothing)
+  grnfpP_validate' True   PW    []  tx xss = (True,Nothing)
+#endif
   grnfpP_validate' True   pp    ps  tx xss
    | WS <- pp   = if lenps > 0 then (False,Nothing) else (True,Nothing)
    | b          = (True,Nothing)
diff --git a/src/Control/DeepSeq/Bounded/Generics/GSeqable.hs b/src/Control/DeepSeq/Bounded/Generics/GSeqable.hs
--- a/src/Control/DeepSeq/Bounded/Generics/GSeqable.hs
+++ b/src/Control/DeepSeq/Bounded/Generics/GSeqable.hs
@@ -117,9 +117,13 @@
   grnf_ k x = grnf_S k (from x)
 
   grnf_S :: SeqNodeKind -> SOP I xss -> ()
-  grnf_S Propagate  (SOP (Z xs))   = grnf_P xs `seq` ()
-  grnf_S {-Spark-}_ (SOP (Z xs))   = grnf_P xs `par` ()
-  grnf_S k          (SOP (S xss))  = grnf_S k (SOP xss)
+#if PARALLELISM_EXPERIMENT
+  grnf_S Propagate       (SOP (Z xs))   = grnf_P xs `seq` ()
+  grnf_S {-Spark-}_      (SOP (Z xs))   = grnf_P xs `par` ()
+#else
+  grnf_S {-Propagate-}_  (SOP (Z xs))   = grnf_P xs `seq` ()
+#endif
+  grnf_S k               (SOP (S xss))  = grnf_S k (SOP xss)
 
   grnf_P :: NP I xs -> ()
   grnf_P Nil = ()
