diff --git a/less-arbitrary.cabal b/less-arbitrary.cabal
--- a/less-arbitrary.cabal
+++ b/less-arbitrary.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: a17a820a8212ed918b2dba9a4251f2a286fa2cac941ffa702fbc35323f5309b1
+-- hash: 2784cd23f761bc388cdc69ce5a87b11f9d38fa3598fdf1b60aabd3c87fd65ffa
 
 name:           less-arbitrary
-version:        0.1.0.2
+version:        0.1.1.0
 synopsis:       Linear time testing with variant of Arbitrary class that always terminates.
 description:    Ever found non-terminating Arbitrary instance?
                 Ever wondered what would be a runtime cost of particular Arbitrary instance?
@@ -40,6 +40,7 @@
   exposed-modules:
       Test.LessArbitrary
   other-modules:
+      Test.LessArbitrary.Cost
       Paths_less_arbitrary
   hs-source-dirs:
       src
diff --git a/src/Test/LessArbitrary.hs b/src/Test/LessArbitrary.hs
--- a/src/Test/LessArbitrary.hs
+++ b/src/Test/LessArbitrary.hs
@@ -12,6 +12,7 @@
 {-# language TypeApplications      #-}
 {-# language TypeOperators         #-}
 {-# language TypeFamilies          #-}
+{-# language TupleSections         #-}
 {-# language UndecidableInstances  #-}
 {-# language AllowAmbiguousTypes   #-}
 {-# language DataKinds             #-}
@@ -19,6 +20,7 @@
     LessArbitrary(..)
   , oneof
   , choose
+  , budgetChoose
   , CostGen(..)
   , (<$$$>)
   , ($$$?)
@@ -51,10 +53,9 @@
 import qualified Test.QuickCheck as QC
 import Data.Hashable
 
--- ~\~ begin <<less-arbitrary.md|costgen>>[0]
-newtype Cost = Cost Int 
-  deriving (Eq,Ord,Enum,Bounded,Num)
+import Test.LessArbitrary.Cost
 
+-- ~\~ begin <<less-arbitrary.md|costgen>>[0]
 newtype CostGen                               a =
         CostGen {
           runCostGen :: State.StateT Cost QC.Gen a }
@@ -323,6 +324,12 @@
             =>        (a, a)
             -> CostGen a
 choose (a,b) = CostGen $ lift $ QC.choose (a, b)
+
+-- | Choose but only up to the budget (for array and list sizes)
+budgetChoose :: CostGen Int
+budgetChoose  = do
+  Cost b <- currentBudget
+  CostGen $ lift $ QC.choose (1, b)
 -- ~\~ end
 -- ~\~ begin <<less-arbitrary.md|lifting-arbitrary>>[2]
 frequency :: [(Int, CostGen a)] -> CostGen a
diff --git a/src/Test/LessArbitrary/Cost.hs b/src/Test/LessArbitrary/Cost.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/LessArbitrary/Cost.hs
@@ -0,0 +1,10 @@
+-- ~\~ language=Haskell filename=src/Test/LessArbitrary/Cost.hs
+-- ~\~ begin <<less-arbitrary.md|src/Test/LessArbitrary/Cost.hs>>[0]
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+module Test.LessArbitrary.Cost where
+
+-- ~\~ begin <<less-arbitrary.md|cost>>[0]
+newtype Cost = Cost Int
+  deriving (Eq,Ord,Enum,Bounded,Num)
+-- ~\~ end
+-- ~\~ end
