diff --git a/src/Taskell/Data/Utility.hs b/src/Taskell/Data/Utility.hs
new file mode 100644
--- /dev/null
+++ b/src/Taskell/Data/Utility.hs
@@ -0,0 +1,6 @@
+module Taskell.Data.Utility where
+
+updateLast :: (a -> a) -> [a] -> [a]
+updateLast _ [] = []
+updateLast f [k] = [f k]
+updateLast f (y : ys) = y : updateLast f ys
diff --git a/src/Taskell/Events/Actions.hs b/src/Taskell/Events/Actions.hs
--- a/src/Taskell/Events/Actions.hs
+++ b/src/Taskell/Events/Actions.hs
@@ -43,7 +43,7 @@
                 Normal                        -> lookup e $ normal actions
                 Modal (Detail _ DetailNormal) -> lookup e $ detail actions
                 Modal Due {}                  -> lookup e $ due actions
-                Modal Help                    -> lookup e $ help actions
+                Modal (Help _)                -> lookup e $ help actions
                 _                             -> Nothing
     fromMaybe state $
         case mEv of
diff --git a/src/Taskell/Events/Actions/Modal.hs b/src/Taskell/Events/Actions/Modal.hs
--- a/src/Taskell/Events/Actions/Modal.hs
+++ b/src/Taskell/Events/Actions/Modal.hs
@@ -18,7 +18,7 @@
 event :: Event -> Stateful
 event e s =
     case s ^. mode of
-        Modal Help      -> Help.event e s
+        Modal Help {}   -> Help.event e s
         Modal Detail {} -> Detail.event e s
         Modal MoveTo    -> MoveTo.event e s
         Modal Due {}    -> Due.event e s
diff --git a/src/Taskell/Events/Actions/Modal/Help.hs b/src/Taskell/Events/Actions/Modal/Help.hs
--- a/src/Taskell/Events/Actions/Modal/Help.hs
+++ b/src/Taskell/Events/Actions/Modal/Help.hs
@@ -1,20 +1,27 @@
 {-# LANGUAGE OverloadedLists #-}
 
 module Taskell.Events.Actions.Modal.Help
-    ( event
-    , events
-    ) where
+  ( event,
+    events,
+  )
+where
 
 import ClassyPrelude
 import Graphics.Vty.Input.Events
 import Taskell.Events.Actions.Types as A (ActionType (..))
 import Taskell.Events.State
-import Taskell.Events.State.Types   (Stateful)
-import Taskell.IO.Keyboard.Types    (Actions)
+import Taskell.Events.State.Modal.Help (moveHelpMenuDown, moveHelpMenuUp)
+import Taskell.Events.State.Types (Stateful)
+import Taskell.IO.Keyboard.Types (Actions)
 
 events :: Actions
-events = [(A.Quit, quit)]
+events =
+  [ (A.Quit, quit),
+    (A.MoveUp, moveHelpMenuUp),
+    (A.Next, moveHelpMenuUp),
+    (A.MoveDown, moveHelpMenuDown),
+    (A.Previous, moveHelpMenuDown)
+  ]
 
 event :: Event -> Stateful
-event (EvKey _ _) = normalMode
-event _           = pure
+event _ = normalMode
diff --git a/src/Taskell/Events/State.hs b/src/Taskell/Events/State.hs
--- a/src/Taskell/Events/State.hs
+++ b/src/Taskell/Events/State.hs
@@ -78,7 +78,7 @@
 import qualified Taskell.Events.State.History    as History (redo, store, undo)
 import           Taskell.Events.State.Types
 import           Taskell.Events.State.Types.Mode (InsertMode (..), InsertType (..), ModalType (..),
-                                                  Mode (..))
+                                                  Mode (..), HelpScrollPosition(..))
 import           Taskell.UI.Draw.Field           (Field, blankField, getText, textToField)
 
 type InternalStateful = State -> State
@@ -405,7 +405,7 @@
 
 -- help
 showHelp :: Stateful
-showHelp = pure . (mode .~ Modal Help)
+showHelp = pure . (mode .~ Modal (Help Top))
 
 showMoveTo :: Stateful
 showMoveTo state = const (state & mode .~ Modal MoveTo) <$> getCurrentTask state
diff --git a/src/Taskell/Events/State/Modal/Help.hs b/src/Taskell/Events/State/Modal/Help.hs
new file mode 100644
--- /dev/null
+++ b/src/Taskell/Events/State/Modal/Help.hs
@@ -0,0 +1,12 @@
+module Taskell.Events.State.Modal.Help where
+
+import ClassyPrelude
+import Control.Lens ((.~))
+import Taskell.Events.State.Types (Stateful, mode)
+import Taskell.Events.State.Types.Mode (HelpScrollPosition (..), ModalType (Help), Mode (Modal))
+
+moveHelpMenuUp :: Stateful
+moveHelpMenuUp = pure . (mode .~ Modal (Help Bottom))
+
+moveHelpMenuDown :: Stateful
+moveHelpMenuDown = pure . (mode .~ Modal (Help Top))
diff --git a/src/Taskell/Events/State/Types/Mode.hs b/src/Taskell/Events/State/Types/Mode.hs
--- a/src/Taskell/Events/State/Types/Mode.hs
+++ b/src/Taskell/Events/State/Types/Mode.hs
@@ -17,8 +17,13 @@
     | DetailDate
     deriving (Eq, Show)
 
+data HelpScrollPosition
+    = Top
+    | Bottom
+    deriving (Eq, Show)
+
 data ModalType
-    = Help
+    = Help HelpScrollPosition
     | MoveTo
     | Due (Seq (Pointer, Task))
           Int
diff --git a/src/Taskell/UI/Draw/Main/StatusBar.hs b/src/Taskell/UI/Draw/Main/StatusBar.hs
--- a/src/Taskell/UI/Draw/Main/StatusBar.hs
+++ b/src/Taskell/UI/Draw/Main/StatusBar.hs
@@ -40,7 +40,7 @@
                              Nothing -> "NORMAL"
                              Just _  -> "NORMAL + SEARCH"
                      Insert {} -> "INSERT"
-                     Modal Help -> "HELP"
+                     Modal (Help _) -> "HELP"
                      Modal MoveTo -> "MOVE"
                      Modal Detail {} -> "DETAIL"
                      Modal Due {} -> "DUE"
diff --git a/src/Taskell/UI/Draw/Modal.hs b/src/Taskell/UI/Draw/Modal.hs
--- a/src/Taskell/UI/Draw/Modal.hs
+++ b/src/Taskell/UI/Draw/Modal.hs
@@ -37,8 +37,8 @@
 renderModal = do
     md <- (^. mode) <$> asks dsState
     case md of
-        Modal Help                 -> surround =<< help
-        Modal Detail {}            -> surround =<< detail
-        Modal MoveTo               -> surround =<< moveTo
-        Modal (Due tasks selected) -> surround =<< due tasks selected
-        _                          -> pure emptyWidget
+        Modal (Help s)               -> surround =<< help s
+        Modal Detail {}              -> surround =<< detail
+        Modal MoveTo                 -> surround =<< moveTo
+        Modal (Due tasks selected)   -> surround =<< due tasks selected
+        _                            -> pure emptyWidget
diff --git a/src/Taskell/UI/Draw/Modal/Help.hs b/src/Taskell/UI/Draw/Modal/Help.hs
--- a/src/Taskell/UI/Draw/Modal/Help.hs
+++ b/src/Taskell/UI/Draw/Modal/Help.hs
@@ -8,12 +8,13 @@
 import Data.Text as T (justifyRight)
 
 import Taskell.Events.Actions.Types as A (ActionType (..))
-import Taskell.IO.Keyboard.Types    (bindingsToText)
 
-import Taskell.IO.Keyboard.Types (Bindings)
+import Taskell.IO.Keyboard.Types (Bindings, bindingsToText)
 import Taskell.UI.Draw.Field     (textField)
 import Taskell.UI.Draw.Types     (DrawState (dsBindings), ModalWidget, TWidget)
 import Taskell.UI.Theme          (taskCurrentAttr)
+import qualified Taskell.Events.State.Types.Mode as M
+import Taskell.Data.Utility (updateLast)
 
 descriptions :: [([ActionType], Text)]
 descriptions =
@@ -61,10 +62,19 @@
     left = padRight (Pad 2) . withAttr taskCurrentAttr . txt $ justifyRight m ' ' l
     right = textField r
 
-help :: ModalWidget
-help = do
+help :: M.HelpScrollPosition -> ModalWidget
+help s = do
     bindings <- asks dsBindings
     let ls = format <$> generate bindings
     let m = foldl' max 0 $ length . fst <$> ls
-    let w = vBox $ line m <$> ls
+    let w = vBox $ applyScroll s $ line m <$> ls
     pure ("Controls", w)
+
+applyScroll :: M.HelpScrollPosition -> [TWidget] -> [TWidget]
+applyScroll _ [] = []
+applyScroll sp (x:xs) =
+  case sp of
+    M.Top ->
+      visible x : xs
+    M.Bottom ->
+      updateLast visible xs
diff --git a/taskell.cabal b/taskell.cabal
--- a/taskell.cabal
+++ b/taskell.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.12
 name:               taskell
-version:            1.11.1
+version:            1.11.2
 license:            BSD3
 license-file:       LICENSE
 copyright:          2019 Mark Wales
@@ -67,6 +67,7 @@
     other-modules:
         Taskell.Config
         Taskell.Data.Date.Types
+        Taskell.Data.Utility
         Taskell.Events.Actions
         Taskell.Events.Actions.Insert
         Taskell.Events.Actions.Modal
@@ -78,6 +79,7 @@
         Taskell.Events.Actions.Search
         Taskell.Events.State.Modal.Detail
         Taskell.Events.State.Modal.Due
+        Taskell.Events.State.Modal.Help
         Taskell.IO.Config.General
         Taskell.IO.Config.GitHub
         Taskell.IO.Config.Layout
