diff --git a/changelog.txt b/changelog.txt
--- a/changelog.txt
+++ b/changelog.txt
@@ -9,6 +9,10 @@
 http://www.fremissant.net/deepseq-bounded/transition-5-6-7.html
 (most up to date).
 
+0.6.0.2 -> 0.6.0.3
+ - realised I should be using Manual: True in all my .cabal flags,
+   or else the constraint solver is free to toggle them!!
+
 0.6.0.1 -> 0.6.0.2
  - VACANT_HASH flag removed (permanent value = False)
  - further decrufting of Compile_new_grammar.hs
diff --git a/deepseq-bounded.cabal b/deepseq-bounded.cabal
--- a/deepseq-bounded.cabal
+++ b/deepseq-bounded.cabal
@@ -2,7 +2,7 @@
 -------------------------------------------------------------------------------
 
 name:		deepseq-bounded
-version:        0.6.0.2
+version:        0.6.0.3
 synopsis:       Bounded deepseq, including support for generic deriving
 license:	BSD3
 license-file:	LICENSE
@@ -14,7 +14,7 @@
 category:       Control
 build-type:     Simple
 stability:      provisional
-cabal-version:  >= 1.10
+cabal-version:  >= 1.16
 
 -- GHC <= 7.4.2 won't work, unless you're also HASKELL98_FRAGMENT
 -- (or at least USE_SOP is False).
@@ -61,6 +61,7 @@
 extra-source-files:
       README
     , changelog.txt
+    , hackage-tags.txt
     , tests/*.hs
     , HTML/*.html
     , HTML/*.css
@@ -81,127 +82,152 @@
 
 Flag HELLO_HACKAGE_VISITOR
   Description: [Note to those reading on Hackage:] Please ignore these flags, which would be better presented in a collapsed state. The flags are mostly for development purposes.
-  Default:     False
+  Default: False
+  Manual: True
 
 Flag HASKELL98_FRAGMENT
   Description: Sacrifice generic deriving, the NFDataPDyn module, and a couple functions from the PatUtil module, in exchange for true Haskell98 conformance (portability). (One non-H98 thing it insists on is PatternGuards, although this could be relieved in the obvious way, at the expense of code clarity.)
---Default:     True
-  Default:     False
+--Default: True
+  Default: False
+  Manual: True
 
 Flag USE_PAR_PATNODE
   Description: On match, spark recursive submatching for parallel evaluation.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_PSEQ_PATNODE
   Description: Use Control.Parallel.pseq to order the evaluation of recursive submatching. This is done by providing a permutation argument; refer to the Control.DeepSeq.Bounded.Pattern.PatNode API for additional documentation. Configurable per PatNode.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_TRACE_PATNODE
   Description: Log a traceline to stderr en passant. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_PING_PATNODE
   Description: Raise an asynchronous exception en passant. This can be useful for gauging term shape relative to pattern shape, dynamically. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_DIE_PATNODE
   Description: Kill (just this) thread immediately. To kill the whole program from a pattern node match, use USE_PING_PATNODE, catch the exception in the main thread, and respond from there as you see fit. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_TIMING_PATNODE
   Description: Get as precise a measurement of the time of matching as possible, and optionally (depending on how you use the API) measuring and reporting (storing?) differential timestamps (relative to parent node already matched). Not sure how useable this will be (the timestamps need to be very high resolution and cheap enough to obtain), but the principle has its place here, and the flag makes it possible to exclude all this code in case it's not working out. Configurable per PatNode. Fires when node is pattern-matched, whether or not the match succeeds.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_PAR_SEQABLE
   Description: This flag (now) only affects Seqable. (Refer to USE_PAR_PATNODE for a comparable flag affecting NFDataP.) USE_PAR_SEQABLE = True depends on parallel, and permits (dynamically configurable) sparking of Sequable recursive demand propagation.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag PARALLELISM_EXPERIMENT
   Description: Deprecated; will be gone in 0.7. Only has any effect if NEW_IMPROVED_PATTERN_GRAMMAR is False (which is also deprecated, and will be gone in 0.7).
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag NEW_IMPROVED_PATTERN_GRAMMAR
   Description: The language is about 25% less verbose with this flag set True. Set True by default since version 0.6.0.0. DEPRECATION WARNING: This flag will be removed in a major version or two, in the interests of maintainability. In case there are very early adopters out there, please update your code ASAP to use the new grammar...
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_ATTOPARSEC
   Description: When True, depend on and use attoparsec for implementing the Pattern parser. (Probably, this flag will be removed in 0.7, becoming effectively always True.) Unfortunately, attoparsec also requires text, so if you're building in a sandbox this will account for most of your initial build time, but it's a one-time cost. Also, we need an alternative parser for HASKELL98_FRAGMENT, since attoparsec isn't H98...
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 -- Flag DEPTH_USES_INT64
 --   Description: This won't be implemented for a while, probably.
--- --Default:     True
---   Default:     False
+-- --Default: True
+--   Default: False
+--   Manual: True
 
 Flag JUST_ALIAS_GSEQABLE
   Description: The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag JUST_ALIAS_GNFDATAN
   Description: The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)
---Default:     True
-  Default:     False
+--Default: True
+  Default: False
+  Manual: True
 
 Flag JUST_ALIAS_GNFDATAP
   Description: The SOP generic function is probably more performant, anyway! (This will be forced False if HASKELL98_FRAGMENT is True.)
---Default:     True
-  Default:     False
+--Default: True
+  Default: False
+  Manual: True
 
 Flag PROVIDE_DATA_FAMILY
   Description: Provide a data family comprising instances corresponding to the Seqable, NFDataN and NFDataP modules. (This will be forced False if HASKELL98_FRAGMENT is True.)
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_CURLY_BRACE_INSTEAD_OF_PAREN_FOR_SUBPATTERNS
   Description: Choose grouping convention (concrete syntax) for pattern strings in the DSL. When True, you have "XX.*Y..Y" instead of the (new) default "((.*)..)". Where X=opening curly brace, and Y=closing curly brace - it seems Cabal makes it impossible to present a curly brace in a flag description, even escaped? Unless Unicode entities? &#123; \u007D &#x7d; Nope.
---Default:     True
-  Default:     False
+--Default: True
+  Default: False
+  Manual: True
 
 Flag ABBREV_WN_AND_TN_CONCRETE_SYNTAX_TO_NUMBER_ALONE__SAFE_ONLY_TO_DEPTH_19
   Description: So you can write "2(!53)" instead of "*2(!*5*3)". This will be unambiguous up to a depth of 19. (It may still be unambiguous for higher depths, depending on the use case.) This could be convenient if you work a lot manually with the pattern DSL, particularly for vertical alignment of pattern structures, but otherwise it should be False as ambigities can develop, for instance under (showPat . shrinkPat . compilePat) iteration.
----Default:     True
-  Default:     False
+---Default: True
+  Default: False
+  Manual: True
 
 Flag ABBREV_WN_AND_TN_CONCRETE_SYNTAX_TO_SINGLE_DIGIT__CAN_ONLY_EXPRESS_DOWN_TO_DEPTH_9
   Description: Similar to the preceding, but use "1" instead of "!" for depth-1, and moreover, use "0" instead of "." for depth-0.  (This is such a niche-case syntax variant, that may as well go all the way!)  It makes for very tidy when you're not using a lot of other attributes. This grammar variant is unambiguous; the danger here is only that conventions get mixed in practise...
----Default:     True
-  Default:     False
+---Default: True
+  Default: False
+  Manual: True
 
 Flag PROVIDE_OLD_SHRINK_PAT
   Description: Provide shrinkPat_old temporarily, for compatibility of seqaid demo output with documents already written. This flag (and the shrinkPat_old function) will probably be removed in 0.7.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag USE_WW_DEEPSEQ
   Description: Depend on deepseq and deepseq-generics, to provide conditional deep forcing. This is optional.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag WARN_PATTERN_MATCH_FAILURE
   Description: For NFDataP, if a pattern match fails a warning is output to stderr.
---Default:     True
-  Default:     False
+--Default: True
+  Default: False
+  Manual: True
 
 Flag USE_SOP
   Description: Use the generics-sop package instead of GHC.Generics (in GNFDataN) and instead of SYB (in NFDataPDyn). If USE_SOP is False, then NFDataPDyn, GNFDataP, and GSeqable modules will not be available.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 Flag NFDATA_INSTANCE_PATTERN
   Description: A flag to assist debugging, affecting a few modules.
-  Default:     True
---Default:     False
+  Default: True
+--Default: False
+  Manual: True
 
 -------------------------------------------------------------------------------
 
diff --git a/hackage-tags.txt b/hackage-tags.txt
new file mode 100644
--- /dev/null
+++ b/hackage-tags.txt
@@ -0,0 +1,9 @@
+leak
+space
+parallel
+strictness
+forcing
+diagnostic
+remedial
+bsd3
+library
