diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.4.3 (2021-02-06)
+
+- Use System.Console.GetOpt instead of cmdargs
+
 # 0.4.2 (2021-01-31)
 
 - Fix "Error: ..." message
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
 Licensor is a program that generates a report of the dependencies and
 transitive dependencies of a Haskell project and their licenses.
 
-NOTE: Currently, [Stack][https://haskellstack.org/] and a `stack.yaml` file are
+NOTE: Currently, [Stack](https://haskellstack.org/) and a `stack.yaml` file are
 required.
 
 ## Description
@@ -84,16 +84,10 @@
 For more information, run `licensor --help`:
 
 ```
-licensor 0.4.0
-
-licensor [OPTIONS]
-
-Common flags:
-  -? --help             Display help message
-  -V --version          Print version information
-     --numeric-version  Print just the version number
-  -v --verbose          Loud verbosity
-  -q --quiet            Quiet verbosity
+usage: licensor
+  -q, -s  --quiet, --silent  Quiet/silent mode
+  -h      --help             Display help message
+  -V      --version          Print version information
 ```
 
 ## Notes
@@ -145,24 +139,24 @@
 
 ### License report
 
-Licensor (0.4.0) depends on the following libraries:
+Licensor (0.4.3) depends on the following libraries:
 
 Library                   | License
 ------------------------- | -------------------------
-base                      | BSD3
-Cabal                     | BSD3
-cmdargs                   | BSD3
-containers                | BSD3
-directory                 | BSD3
-process                   | BSD3
+Cabal                     | BSD-3
+base                      | BSD-3
+containers                | BSD-3
+directory                 | BSD-3
+process                   | BSD-3
 
 And the following licenses (including transitive dependencies):
 
 License                   | Number of libraries
 ------------------------- | -------------------------
-BSD3                      | 20
+BSD-2                     | 1
+BSD-3                     | 20
 
-(Tested with Licensor 0.4.0, Stack 2.1.3, and LTS Haskell 11.11.)
+(Tested with Licensor 0.4.3, Stack 2.5.1, and LTS Haskell 15.8.)
 
 ## Additional resources
 
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,6 +1,3 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE NamedFieldPuns #-}
-
 ----------------------------------------------------------------------
 -- |
 -- Module: Main
@@ -15,22 +12,19 @@
   )
   where
 
--- licensor
-import Licensor
-
--- base
-import Control.Monad
-import Data.List
-import qualified Data.Version as Version
-import System.Environment
-import qualified System.Exit as Exit
-
 -- Cabal
 import Distribution.PackageDescription
 import Distribution.Text
 
--- cmdargs
-import System.Console.CmdArgs
+-- base
+import Control.Monad (unless)
+import Data.Foldable (for_)
+import Data.List (foldl', intercalate)
+import Data.Version (showVersion)
+import System.Console.GetOpt
+import System.Environment (getArgs, getProgName)
+import System.Exit (die, exitFailure, exitSuccess)
+import System.IO (hPutStrLn, stderr, stdout)
 
 -- containers
 import qualified Data.Map.Strict as Map
@@ -39,43 +33,64 @@
 -- directory
 import System.Directory (doesFileExist)
 
+-- licensor
+import Licensor
 
--- |
---
---
 
-data LiArgs =
-  LiArgs
-    {
-    }
-  deriving (Data)
+prettyUsageInfo :: String -> String
+prettyUsageInfo progName =
+  "usage: " <> usageInfo progName optDescrs
 
 
--- |
---
---
+prettyVersion :: String -> String
+prettyVersion progName =
+  unwords [progName, showVersion version]
 
-liArgs :: String -> Mode (CmdArgs LiArgs)
-liArgs s =
-  cmdArgsMode $
-    LiArgs
-      {
-      }
-  &= program s
-  &= summary (unwords ["licensor", Version.showVersion version])
-  &= verbosity
 
+optDescrs :: [OptDescr (Bool -> IO Bool)]
+optDescrs =
+  [ Option ['q', 's'] ["quiet", "silent"]
+      (NoArg (\_ -> pure False))
+      "Quiet/silent mode"
+  , Option ['h'] ["help"]
+      (NoArg (\_ -> exitWith prettyUsageInfo))
+      "Display help message"
+  , Option ['V'] ["version"]
+      (NoArg (\_ -> exitWith prettyVersion))
+       "Print version information"
+   ]
+   where
+     exitWith f = do
+       progName <- getProgName
+       hPutStrLn stdout (f progName)
+       exitSuccess
 
--- |
---
---
 
 main :: IO ()
 main = do
-  LiArgs <- cmdArgsRun . liArgs =<< getProgName
+  args <- getArgs
+  progName <- getProgName
+  case getOpt' Permute optDescrs args of
+    (opts, [], [], []) -> do
+      verbose <- foldl' (>>=) (pure True) opts
+      main' verbose
+    (_, command:_, _, _) -> do
+      hPutStrLn stderr ("unknown command: " <> command)
+      hPutStrLn stderr (prettyUsageInfo progName)
+      exitFailure
+    (_, _, option:_, _) -> do
+      hPutStrLn stderr ("unknown option: " <> option)
+      hPutStrLn stderr (prettyUsageInfo progName)
+      exitFailure
+    (_, _, _, _) -> do
+      hPutStrLn stderr (prettyUsageInfo progName)
+      exitFailure
 
-  quiet <- fmap not isNormal
 
+main' :: Bool -> IO ()
+main' verbose = do
+  let silent = not verbose
+
   maybePackage <- getPackage
 
   pid <-
@@ -87,7 +102,7 @@
             putStrLn "Found stack.yaml..."
             pure Nothing
           else
-            Exit.die "Error: No stack.yaml file found."
+            die "Error: No stack.yaml file found."
 
       Just pd -> do
         putStrLn $
@@ -105,11 +120,11 @@
   case (maybeDependencies, maybeLicenses) of
     (Just dependencies, Just licenses) -> do
       (dependenciesByLicense', failed) <-
-        orderPackagesByLicense quiet pid licenses dependencies
+        orderPackagesByLicense silent pid licenses dependencies
 
       let dependenciesByLicense = fmap (Set.map display) dependenciesByLicense'
 
-      forM_ (Map.keys dependenciesByLicense) $
+      for_ (Map.keys dependenciesByLicense) $
         \li ->
           let
             n = dependenciesByLicense Map.! li
@@ -127,4 +142,4 @@
         putStr "Failed: "
         print failed
     _ ->
-      Exit.die "Error: Unable to run 'stack ls dependencies'"
+      die "Error: Unable to run 'stack ls dependencies'"
diff --git a/licensor.cabal b/licensor.cabal
--- a/licensor.cabal
+++ b/licensor.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:           licensor
-version:        0.4.2
+version:        0.4.3
 synopsis:       A license compatibility helper
 description:    A license compatibility helper.
 category:       Distribution
@@ -51,8 +51,7 @@
   main-is:
       Main.hs
   build-depends:
-      cmdargs
-    , licensor
+      licensor
   ghc-options:
       -threaded -rtsopts -with-rtsopts=-N
 
