diff --git a/htsn.cabal b/htsn.cabal
--- a/htsn.cabal
+++ b/htsn.cabal
@@ -1,5 +1,5 @@
 name:           htsn
-version:        0.0.6
+version:        0.0.7
 cabal-version:  >= 1.8
 author:         Michael Orlitzky
 maintainer:	Michael Orlitzky <michael@orlitzky.com>
@@ -11,6 +11,7 @@
   doc/htsnrc.example
   doc/man1/htsn.1
   doc/init.openrc
+  test/shell/*.test
   test/xml/*.xml
 synopsis:
   Parse XML files from The Sports Network feed.
@@ -272,6 +273,44 @@
     hxt                         == 9.3.*,
     MissingH                    == 1.2.*,
     network                     == 2.4.*,
+    tasty                       == 0.7.*,
+    tasty-hunit                 == 0.4.*,
+    unix                        == 2.6.*
+
+  -- It's not entirely clear to me why I have to reproduce all of this.
+  ghc-options:
+    -Wall
+    -fwarn-hi-shadowing
+    -fwarn-missing-signatures
+    -fwarn-name-shadowing
+    -fwarn-orphans
+    -fwarn-type-defaults
+    -fwarn-tabs
+    -fwarn-incomplete-record-updates
+    -fwarn-monomorphism-restriction
+    -fwarn-unused-do-bind
+    -O2
+
+
+-- These won't work without shelltestrunner installed in your
+-- $PATH. Maybe there is some way to tell Cabal that.
+test-suite shelltests
+  type: exitcode-stdio-1.0
+  hs-source-dirs: src test
+  main-is: ShellTests.hs
+  build-depends:
+    base                        == 4.*,
+    cmdargs                     >= 0.10.6,
+    configurator                == 0.2.*,
+    directory                   == 1.2.*,
+    filepath                    == 1.3.*,
+    hdaemonize                  == 0.4.*,
+    hslogger                    == 1.2.*,
+    htsn-common                 == 0.0.1,
+    hxt                         == 9.3.*,
+    MissingH                    == 1.2.*,
+    network                     == 2.4.*,
+    process                     == 1.1.*,
     tasty                       == 0.7.*,
     tasty-hunit                 == 0.4.*,
     unix                        == 2.6.*
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -297,15 +297,7 @@
   let cfg = (def :: Configuration) `merge_optional` opt_config
   init_logging (log_level cfg) (log_file cfg) (syslog cfg)
 
-  -- Check the optional config for missing required options. This is
-  -- necessary because if the user specifies an empty list of
-  -- hostnames in e.g. the config file, we want to bail rather than
-  -- fall back on the default list (which was merged from a default
-  -- Configuration above).
-  when (null $ get_feed_hosts (OC.feed_hosts opt_config)) $ do
-    report_error "No feed hosts supplied."
-    exitWith (ExitFailure exit_no_feed_hosts)
-
+  -- Check the optional config for missing required options.
   when (isNothing (OC.password opt_config)) $ do
     report_error "No password supplied."
     exitWith (ExitFailure exit_no_password)
@@ -313,6 +305,18 @@
   when (isNothing (OC.username opt_config)) $ do
     report_error "No username supplied."
     exitWith (ExitFailure exit_no_username)
+
+  -- This should be impossible. We had a choice to make: since the
+  -- command-line feed_hosts are usually not supplied, we don't want
+  -- to take the empty list supplied on the command-line and use
+  -- that. But that means that we need to do the same thing if the
+  -- user supplies an empty list in the config file. That "same thing"
+  -- is to use the default list. So, this should never be empty,
+  -- because if the optional config has no feed hosts, we use the
+  -- default list.
+  when (null $ get_feed_hosts (feed_hosts cfg)) $ do
+    report_error "No feed hosts supplied."
+    exitWith (ExitFailure exit_no_feed_hosts)
 
   when (daemonize cfg) $ do
     -- Old PID files can be left around after an unclean shutdown. We
diff --git a/test/ShellTests.hs b/test/ShellTests.hs
new file mode 100644
--- /dev/null
+++ b/test/ShellTests.hs
@@ -0,0 +1,10 @@
+module Main
+where
+
+import System.Cmd ( system )
+import System.Exit ( exitWith )
+
+main :: IO ()
+main = do
+  result <- system "shelltest test/shell/*.test"
+  exitWith result
diff --git a/test/shell/command-line-feed-hosts.test b/test/shell/command-line-feed-hosts.test
new file mode 100644
--- /dev/null
+++ b/test/shell/command-line-feed-hosts.test
@@ -0,0 +1,9 @@
+#
+# If a feed host is supplied on the command-line, it should override
+# the default list. Since htsn attempts to run forever, we sleep for a
+# second after starting it and then kill it ($! is its pid).
+#
+dist/build/htsn/htsn -u foo --password bar localhost & sleep 1; kill $!
+>>> /Connecting to localhost./
+>>>2 /ERROR: connect: does not exist \(Connection refused\)/
+>>>=0
