diff --git a/ansi-terminal-game.cabal b/ansi-terminal-game.cabal
--- a/ansi-terminal-game.cabal
+++ b/ansi-terminal-game.cabal
@@ -1,5 +1,5 @@
 name:                ansi-terminal-game
-version:             1.1.1.0
+version:             1.2.0.0
 synopsis:            sdl-like functions for terminal applications, based on
                      ansi-terminal
 description:         Library which aims to replicate standard 2d game
@@ -15,7 +15,7 @@
 license-file:        LICENSE
 author:              Francesco Ariis
 maintainer:          fa-ml@ariis.it
-copyright:           © 2017-2020 Francesco Ariis
+copyright:           © 2017-2021 Francesco Ariis
 category:            Game
 build-type:          Simple
 extra-source-files:  README,
@@ -55,7 +55,7 @@
                        cereal == 0.5.*,
                        clock >= 0.7 && < 0.9,
                        exceptions == 0.10.*,
-                       linebreak == 1.0.*,
+                       linebreak == 1.1.*,
                        mintty == 0.1.*,
                        mtl == 2.2.*,
                        QuickCheck >= 2.13 && < 2.15,
@@ -103,7 +103,7 @@
                        cereal == 0.5.*,
                        clock >= 0.7 && < 0.9,
                        exceptions == 0.10.*,
-                       linebreak == 1.0.*,
+                       linebreak == 1.1.*,
                        mtl == 2.2.*,
                        QuickCheck >= 2.13 && < 2.15,
                        random >= 1.1 && < 1.3,
diff --git a/changes.txt b/changes.txt
--- a/changes.txt
+++ b/changes.txt
@@ -1,3 +1,22 @@
+1.2.0.0
+-------
+
+- Added textBoxHyphe and textBoxHyphenLiquid and a handful of `Hypenator`s.
+  This will allow you to have autohyphenation in textboxes. Compare:
+    Rimasi un po’ a meditare nel buio      Rimasi un po’ a meditare nel buio
+    velato appena dal barlume azzurrino    velato appena dal barlume azzurrino
+    del fornello a gas, su cui sobbol-     del fornello a gas, su cui
+    liva quieta la pentola.                sobbolliva quieta la pentola.
+- Switched `Width`, `Height`, `Row`, `Col` from `Integer` to `Int`.
+  This is unfortunate, but will make playing with `base` simpler. I will
+  switch it back once `Prelude` handles both integers appropriately
+  or exports the relevant function. (request by sm)
+- Changed signature for `box`, `textBox` and `textBoxLiquid`. Now
+  width/height parameters come *before* the character/string. E.g.:
+    textBoxLiquid :: String -> Width -> Plane  -- this was before
+    textBoxLiquid :: Width -> String -> Plane  -- this is now
+  This felt more ergonomic while writing games.
+
 1.1.1.0
 -------
 
diff --git a/example/Alone.hs b/example/Alone.hs
--- a/example/Alone.hs
+++ b/example/Alone.hs
@@ -58,7 +58,7 @@
 move _ 'd' = E
 move m _   = m
 
-pos :: Move -> (Integer, Integer) -> (Integer, Integer)
+pos :: Move -> (Width, Height) -> (Width, Height)
 pos m oldcs | oob newcs = oldcs
             | otherwise = newcs
     where
@@ -82,12 +82,12 @@
 drawFun :: MyState -> Plane
 drawFun (MyState (r, c) _ _) =
                            blankPlane mw     mh            &
-                (1, 1)   % box '_'    mw     mh            &
-                (2, 2)   % box ' '    (mw-2) (mh-2)        &
-                (15, 20) % textBox "Tap WASD to move, tap again to stop."
-                                   10 4                    &
-                (20, 60) % textBox "Press Q to quit."
-                                   8 10 # color Blue Vivid &
+                (1, 1)   % box mw mh '_'                   &
+                (2, 2)   % box (mw-2) (mh-2) ' '           &
+                (15, 20) % textBox 10 4
+                                   "Tap WASD to move, tap again to stop." &
+                (20, 60) % textBox 8 10
+                                   "Press Q to quit." # color Blue Vivid &
                 (r, c) % cell '@' # invert
     where
           mh :: Height
diff --git a/src/Terminal/Game.hs b/src/Terminal/Game.hs
--- a/src/Terminal/Game.hs
+++ b/src/Terminal/Game.hs
@@ -21,14 +21,12 @@
 -- todo test that handlers are closed in case of errr [test]
 -- todo invert # invert (doppio) si elimina? [test] [design]
 -- todo schermo piccolo, si centra verticalmente? [test]
--- todo metti in a-t-g [design] la formula «menu, poi fai questo, poi
---      ritorni, astrai questo pattern
+-- todo metti in a-t-g la formula «menu, poi fai questo, poi
+--      ritorni, astrai questo pattern [menu]
 
 -- todo timer in contrib o altro modulo?
--- todo qptain e jimreed, implement normal movement
--- todo [design] javascript backend
 -- todo controlla caratteri strani su windows, prova con morganw e ibispi
--- todo boxratio, blitcenter e blit top left etc in ansi-terminal-game? [u:2]
+-- todo boxratio, blit top left etc in ansi-terminal-game? [u:2]
 -- todo autoresize terminal (or get-term-size?)
 -- todo ranSelect :: [a] -> m a in a-t-g [design]
 -- todo random shuffle in atg?
@@ -39,6 +37,7 @@
 -- todo (da sm) I'm also wondering if I can adjust the frame rate during
 --      play, to speed things up
 -- todo (da sm) hot reload for game (see IHP web app) [suggestion]
+-- todo (da sm) sound with sox
 
 
 module Terminal.Game ( -- * Running
@@ -96,7 +95,7 @@
                        stringPlaneTrans,
                        makeTransparent,
                        makeOpaque,
-                       paperPlane,
+                       planePaper,
                        planeSize,
 
                        -- ** Draw
@@ -104,10 +103,19 @@
                        (%), (&), (#),
                        subPlane,
                        mergePlanes,
-                       cell, word, box, textBox, textBoxLiquid,
+                       cell, word, box,
                        Color(..), ColorIntensity(..),
                        color, bold, invert,
 
+                       -- *** Text boxes
+                       textBox, textBoxLiquid,
+                       textBoxHyphen, textBoxHyphenLiquid,
+                       Hyphenator,
+                       -- | Eurocentric convenience reexports. Check
+                       -- "Text.Hyphenation.Language" for more languages.
+                       english_GB, english_US, esperanto,
+                       french, german_1996, italian, spanish,
+
                        -- *** Declarative drawing
                        (|||), (===), (***), hcat, vcat,
 
@@ -135,6 +143,7 @@
 import Terminal.Game.Layer.Object as O
 import Terminal.Game.Plane
 import Terminal.Game.Random
+import Text.LineBreak
 
 -- $threaded
 -- Good practices for cross-compatibility:
diff --git a/src/Terminal/Game/Draw.hs b/src/Terminal/Game/Draw.hs
--- a/src/Terminal/Game/Draw.hs
+++ b/src/Terminal/Game/Draw.hs
@@ -18,6 +18,7 @@
 import qualified Data.List           as L
 import qualified System.Console.ANSI as CA
 
+
 -----------
 -- TYPES --
 -----------
@@ -130,14 +131,14 @@
 -------------
 
 -- | A box of dimensions @w h@.
-box :: Char -> Width -> Height -> Plane
-box chr w h = seqCellsDim w h cells
+box :: Width -> Height -> Char -> Plane
+box w h chr = seqCellsDim w h cells
     where
           cells = [((r, c), chr) | r <- [1..h], c <- [1..w]]
 
 -- | A @1x1@ cell.
 cell :: Char -> Plane
-cell ch = box ch 1 1
+cell ch = box 1 1 ch
 
 -- | @1xn@ 'Plane' with a word in it. If you need to import multiline
 -- ASCII art, check 'stringPlane' and 'stringPlaneTrans'.
@@ -152,28 +153,48 @@
 --           (w, h) = pSize p
 
 -- | A text-box. Assumes @' '@s are transparent.
-textBox :: String -> Width -> Height -> Plane
-textBox cs w h = let pt = textBoxLiquid cs w
+textBox :: Width -> Height -> String -> Plane
+textBox w h cs = let pt = textBoxLiquid w cs
                  in  blankPlane w h F.& (1, 1) % pt
 
 -- | Like 'textBox', but tall enough to fit @String@.
-textBoxLiquid :: String -> Width -> Plane
-textBoxLiquid cs w = transparent
+textBoxLiquid :: Width -> String -> Plane
+textBoxLiquid w cs = textBoxGeneralLiquid Nothing w cs
+
+-- | As 'textBox', but hypenated. Example:
+--
+-- @
+-- Rimasi un po’ a meditare nel buio       Rimasi un po’ a meditare nel buio
+-- velato appena dal barlume azzurrino     velato appena dal barlume azzurrino
+-- del fornello a gas, su cui sobbol-      del fornello a gas, su cui
+-- liva quieta la pentola.                 sobbolliva quieta la pentola.
+-- @
+--
+-- Notice how in the left box «sobbolliva» is broken in two. This
+-- can be useful and aesthetically pleasing when textboxes are narrow.
+textBoxHyphen :: Hyphenator -> Width -> Height -> String -> Plane
+textBoxHyphen hp w h cs = let pt = textBoxHyphenLiquid hp w cs
+                 in  blankPlane w h F.& (1, 1) % pt
+
+-- | As 'textBoxLiquid', but hypenated.
+textBoxHyphenLiquid :: Hyphenator -> Width -> String -> Plane
+textBoxHyphenLiquid h w cs = textBoxGeneralLiquid (Just h) w cs
+
+textBoxGeneralLiquid :: Maybe Hyphenator -> Width -> String -> Plane
+textBoxGeneralLiquid mh w cs = transparent
     where
           -- hypenathion
-          hyp = Nothing -- Just english_GB
-          bf  = BreakFormat (fromIntegral w) 4 '-' hyp
+          bf  = BreakFormat (fromIntegral w) 4 '-' mh
           hcs = breakStringLn bf cs
           h   = L.genericLength hcs
 
           f :: [String] -> [(Coords, Char)]
           f css = concatMap (uncurry rf) (zip [1..] css)
-              where rf :: Integer -> String -> [(Coords, Char)]
+              where rf :: Int -> String -> [(Coords, Char)]
                     rf cr ln = zip (zip (repeat cr) [1..]) ln
 
           out         = seqCellsDim w h (f hcs)
           transparent = makeTransparent ' ' out
-
 
 -----------------
 -- ANCILLARIES --
diff --git a/src/Terminal/Game/Layer/Imperative.hs b/src/Terminal/Game/Layer/Imperative.hs
--- a/src/Terminal/Game/Layer/Imperative.hs
+++ b/src/Terminal/Game/Layer/Imperative.hs
@@ -35,7 +35,7 @@
         gInitState     :: s,               -- ^Initial state of the game.
         gLogicFunction :: s -> Event -> s, -- ^Logic function.
         gDrawFunction  :: s -> Plane,      -- ^Draw function.
-        gQuitFunction  :: s -> Bool        -- ^\"Should I quit?\" function.
+        gQuitFunction  :: s -> Bool        -- ^«Should I quit?» function.
       }
 
 -- | Entry point for the game execution, should be called in @main@.
diff --git a/src/Terminal/Game/Layer/Object/IO.hs b/src/Terminal/Game/Layer/Object/IO.hs
--- a/src/Terminal/Game/Layer/Object/IO.hs
+++ b/src/Terminal/Game/Layer/Object/IO.hs
@@ -124,7 +124,7 @@
     blitPlane w h mp p = T.liftIO (blitPlaneIO w h mp p)
     shutdownDisplay = T.liftIO cleanAndExit
 
-displaySizeIO :: IO (Integer, Integer)
+displaySizeIO :: IO (Width, Height)
 displaySizeIO =
         TS.size        >>= \ts ->
             -- cannot use ansi-terminal, on Windows you get
diff --git a/src/Terminal/Game/Layer/Object/Interface.hs b/src/Terminal/Game/Layer/Object/Interface.hs
--- a/src/Terminal/Game/Layer/Object/Interface.hs
+++ b/src/Terminal/Game/Layer/Object/Interface.hs
@@ -83,7 +83,7 @@
 class Monad m => MonadDisplay m where
     setupDisplay :: m ()
     clearDisplay :: m ()
-    displaySize :: m (Integer, Integer) -- w, h
+    displaySize :: m (Width, Height) -- w, h
     blitPlane :: Width -> Height -> Maybe Plane -> Plane -> m ()
     shutdownDisplay :: m ()
 
diff --git a/src/Terminal/Game/Layer/Object/Narrate.hs b/src/Terminal/Game/Layer/Object/Narrate.hs
--- a/src/Terminal/Game/Layer/Object/Narrate.hs
+++ b/src/Terminal/Game/Layer/Object/Narrate.hs
@@ -34,12 +34,6 @@
                                     show e
                   Right r -> return r
 
--- class Monad m => MonadInput m where
---     startEvents :: FPS -> m (CC.MVar [Event], [CC.ThreadId])
---     pollEvents  :: CC.MVar [Event] ->
---                    m [Event]
---     stopEvents :: [CC.ThreadId] -> m ()
-
 instance MonadInput Narrate where
     startEvents fps = Narrate $
                         R.ask >>= \e ->
diff --git a/src/Terminal/Game/Plane.hs b/src/Terminal/Game/Plane.hs
--- a/src/Terminal/Game/Plane.hs
+++ b/src/Terminal/Game/Plane.hs
@@ -12,7 +12,6 @@
 import Terminal.Game.Character
 
 import qualified Data.Array          as A
-import qualified Data.List           as L
 import qualified Data.List.Split     as LS
 import qualified Data.Tuple          as T
 import qualified GHC.Generics        as G
@@ -25,13 +24,13 @@
 
 -- | 'Row's and 'Column's are 1-based (top-left position is @1 1@).
 type Coords = (Row, Column)
-type Row    = Integer
-type Column = Integer
+type Row    = Int
+type Column = Int
 
 -- | Expressed in 'Column's.
-type Width  = Integer
+type Width  = Int
 -- | Expressed in 'Row's.
-type Height = Integer
+type Height = Int
 
 type Bold     = Bool
 type Reversed = Bool
@@ -167,8 +166,8 @@
 
 -- | A String (@\n@ divided and ended) representing the 'Plane'. Useful
 -- for debugging/testing purposes.
-paperPlane :: Plane -> String
-paperPlane p = unlines . LS.chunksOf w .
+planePaper :: Plane -> String
+planePaper p = unlines . LS.chunksOf w .
                map cellChar . A.elems $ fromPlane p
     where
           w :: Int
@@ -194,14 +193,14 @@
     where
           lined = lines t
 
-          h :: Integer
-          h = L.genericLength lined
+          h :: Int
+          h = length lined
 
-          w :: Integer
-          w = maximum (map L.genericLength lined)
+          w :: Int
+          w = maximum (map length lined)
 
-          pad :: Integer -> String -> String
-          pad mw tl = take (fromIntegral mw) (tl ++ repeat ' ')
+          pad :: Int -> String -> String
+          pad mw tl = take mw (tl ++ repeat ' ')
 
           padded :: [String]
           padded = map (pad w) lined
diff --git a/test/Terminal/Game/DrawSpec.hs b/test/Terminal/Game/DrawSpec.hs
--- a/test/Terminal/Game/DrawSpec.hs
+++ b/test/Terminal/Game/DrawSpec.hs
@@ -3,6 +3,7 @@
 import Test.Hspec
 import Terminal.Game.Plane
 import Terminal.Game.Draw
+import Terminal.Game -- language hyphenators
 
 
 spec :: Spec
@@ -20,12 +21,17 @@
   describe "textBox/textBoxLiquid" $ do
     let s  = "las rana in Spa"
         w  = 6
-        ps = textBox s w 2
-        pl = textBoxLiquid s w
+        ps = textBox w 2 s
+        pl = textBoxLiquid w s
     it "textBox follows specific size" $
       planeSize ps `shouldBe` (6, 2)
     it "textBoxLiquid fits the whole string" $
       planeSize pl `shouldBe` (6, 3)
+
+  describe "textBoxHypen" $ do
+    let tbh = textBoxHyphen spanish 8 2 "Con pianito"
+    it "hyphens long words" $
+      planePaper tbh `shouldSatisfy` (elem '-')
 
   describe "***" $ do
     let a  = stringPlane ".\n.\n.\n"
diff --git a/test/Terminal/Game/PlaneSpec.hs b/test/Terminal/Game/PlaneSpec.hs
--- a/test/Terminal/Game/PlaneSpec.hs
+++ b/test/Terminal/Game/PlaneSpec.hs
@@ -11,7 +11,7 @@
 spec = do
 
   let testPlane =         blankPlane 2 2 &
-                  (1,1) % box '.' 2 2    &
+                  (1,1) % box 2 2 '.'    &
                   (1,2) % cell ' '
 
   describe "listPlane" $ do
@@ -41,7 +41,7 @@
   describe "subPlane" $ do
     let pa = word "prova" === word "fol"
     it "cuts out a plane" $
-      paperPlane (subPlane pa (1, 1) (2, 1)) `shouldBe` "p\nf\n"
+      planePaper (subPlane pa (1, 1) (2, 1)) `shouldBe` "p\nf\n"
     it "does not crash on OOB" $
       planeSize (subPlane pa (1, 1) (10, 10)) `shouldBe` (5, 2)
     it "errs on emptycell" $
