diff --git a/Commands/Download.hs b/Commands/Download.hs
--- a/Commands/Download.hs
+++ b/Commands/Download.hs
@@ -42,6 +42,7 @@
 import Data.String.Utils
 import Data.Either.Utils
 import Data.List
+import Data.Char
 import System.Exit
 import Control.Exception
 import Data.Progress.Tracker
@@ -259,10 +260,13 @@
                  d $ "  gettypecommand sent to stdout: " ++ show c
                  d $ "  original type was: " ++ show (eptype ep)
                  case ec of
-                   ExitSuccess -> case (strip c) of
+                   ExitSuccess -> case (stripToken c) of
                                     "" -> return (eptype ep)
                                     x -> return x
                    _ -> return (eptype ep)
+	
+          stripToken = takeWhile intoken
+              where intoken c = not $ isSpace c || c == ';'
 
           getRenameTypes =
               case getList (gcp gi) idstr "renametypes" of
@@ -284,6 +288,7 @@
                          ("FEEDURL", feedurl . podcast $ ep),
                          ("SAFECASTTITLE", sanitize_fn . castname . podcast $ ep),
                          ("SAFEEPTITLE", sanitize_fn . eptitle $ ep),
+                         ("EPID", show . epid $ ep),
                          ("EPTITLE", eptitle ep)]
 
 -- | Runs a hook script.
diff --git a/Commands/SetStatus.hs b/Commands/SetStatus.hs
--- a/Commands/SetStatus.hs
+++ b/Commands/SetStatus.hs
@@ -57,7 +57,7 @@
                       Nothing -> fail "setstatus: --castid required; see hpodder setstatus --help"
        newstatus <- case lookup "status" args of
                       Just x -> E.catch (E.evaluate (read x))
-                                  (\_ -> fail $ "Invalid status supplied; use one of: " ++ possibleStatuses)
+                                  ((\_ -> fail $ "Invalid status supplied; use one of: " ++ possibleStatuses) :: E.SomeException -> IO a)
                       Nothing -> fail "setstatus: --status required; see hpodder setstatus --help"
        podcastlist <- getPodcast (gdbh gi) podcastid
        pc <- case podcastlist of
diff --git a/Commands/Setup.hs b/Commands/Setup.hs
--- a/Commands/Setup.hs
+++ b/Commands/Setup.hs
@@ -101,10 +101,10 @@
 sampleurls = 
     ["http://soundofhistory.complete.org/files_soh/podcast.xml",
      "http://www.thelinuxlink.net/tllts/tllts.rss",
-     "http://www.itconversations.com/rss/recentWithEnclosures.php",
+     "http://feeds.conversationsnetwork.org/channel/itc",
      "http://www.sciam.com/podcast/sciam_podcast_r.xml",
      "http://www.npr.org/rss/podcast.php?id=510019",
-     "http://amateurtraveler.com/podcast/rss.xml",
+     "http://feeds.feedburner.com/AmateurTravelerPodcast",
      "http://broadband.wgbh.org/amex/rss/podcast_np.xml",
      "http://www.npr.org/rss/podcast.php?id=700000"]
 
diff --git a/Config.hs b/Config.hs
--- a/Config.hs
+++ b/Config.hs
@@ -74,7 +74,7 @@
                  cp <- set cp "DEFAULT" "renametypes" "audio/mpeg:.mp3,audio/mp3:.mp3,x-audio/mp3:.mp3"
                  cp <- set cp "DEFAULT" "postproctypes" "audio/mpeg,audio/mp3,x-audio/mp3"
                  cp <- set cp "DEFAULT" "gettypecommand" "file -b -i \"${EPFILENAME}\""
-                 cp <- set cp "DEFAULT" "postproccommand" "id3v2 -A \"${CASTTITLE}\" -t \"${EPTITLE}\" --WOAF \"${EPURL}\" --WOAS \"${FEDDURL}\" \"${EPFILENAME}\""
+                 cp <- set cp "DEFAULT" "postproccommand" "mid3v2 -T \"${EPID}\" -A \"${CASTTITLE}\" -t \"${EPTITLE}\" --WOAF \"${EPURL}\" --WOAS \"${FEEDURL}\" \"${EPFILENAME}\""
                  return cp
 
 startingcp = emptyCP {accessfunc = interpolatingAccess 10}
diff --git a/Download.hs b/Download.hs
--- a/Download.hs
+++ b/Download.hs
@@ -65,6 +65,7 @@
             "-L",               -- Follow redirects
             "-y", "60", "-Y", "1", -- Timeouts
             "--retry", "2",     -- Retry twice
+            "--globoff",        -- Disable globbing on URLs (#79)
             "-f"                -- Fail on server errors
            ]
 
diff --git a/FeedParser.hs b/FeedParser.hs
--- a/FeedParser.hs
+++ b/FeedParser.hs
@@ -33,6 +33,7 @@
 import Types
 import Text.XML.HaXml
 import Text.XML.HaXml.Parse
+import Text.XML.HaXml.Posn
 import Utils
 import Data.Maybe.Utils
 import Data.Char
@@ -76,9 +77,9 @@
                 let feeditems = getEnclosures doc
                 return $ Right $
                            (Feed {channeltitle = title, items = feeditems})
-       where getContent (Document _ _ e _) = CElem e
+       where getContent (Document _ _ e _) = CElem e noPos
 
-unifrob ('\xef':'\xbb':'\xbf':x) = x -- Strip off unicode BOM
+unifrob ('\xfeff':x) = x -- Strip off unicode BOM
 unifrob x = x
 
 unesc = xmlUnEscape stdXmlEscaper
@@ -121,13 +122,13 @@
 -- Utilities
 --------------------------------------------------
 
-attrofelem :: String -> Content -> Maybe AttValue
-attrofelem attrname (CElem inelem) =
+attrofelem :: String -> Content Posn -> Maybe AttValue
+attrofelem attrname (CElem inelem _) =
     case unesc inelem of
       Elem name al _ -> lookup attrname al
 attrofelem _ _ =
     error "attrofelem: called on something other than a CElem"
-stratt :: String -> Content -> Maybe [String]
+stratt :: String -> Content Posn -> Maybe [String]
 stratt attrname content =
     case attrofelem attrname content of
       Just (AttValue x) -> Just (concat . map mapfunc $ x)
@@ -136,17 +137,18 @@
           mapfunc (Right _) = []
 
 -- Finds the literal children of the named tag, and returns it/them
-tagof :: String -> CFilter
+tagof :: String -> CFilter Posn
 tagof x = keep /> tag x -- /> txt
 
 -- Retruns the literal string that tagof would find
-strof :: String -> Content -> String
+strof :: String -> Content Posn -> String
 strof x y = forceEither $ strof_either x y
 
-strof_either :: String -> Content -> Either String String
+strof_either :: String -> Content Posn -> Either String String
 strof_either x y =
     case tagof x $ y of
-      [CElem elem] -> Right $ verbatim $ tag x /> txt $ CElem (unesc elem)
+      [CElem elem pos] -> Right $ verbatim $ tag x /> txt
+           $ CElem (unesc elem) pos
       z -> Left $ "strof: expecting CElem in " ++ x ++ ", got "
            ++ verbatim z ++ " at " ++ verbatim y
 
diff --git a/INSTALL b/INSTALL
--- a/INSTALL
+++ b/INSTALL
@@ -1,18 +1,2 @@
 
-Sorry, I need to work on this some more...
-
-PREREQUISITES:
-
- * GHC 6.6          http://www.haskell.org/ghc
- * Curl             http://curl.haxx.se
- * id3v2            http://download.sourceforge.net/id3v2/id3v2-0.1.11.tar.gz
- * hslogger         http://software.complete.org/hslogger
- * MissingH 0.18.0  http://software.complete.org/missingh
-   hpodder also uses these libraries that MissingH also depends upon:
-   FilePath, mtl
- * ConfigFile       http://software.complete.org/configfile
- * Sqlite3          http://www.sqlite.org/
- * HDBC-sqlite3     http://quux.org/devel/hdbc
- * HaXml>=1.13.2    http://www.cs.york.ac.uk/fp/HaXml/
- * HDBC             http://quux.org/devel/hdbc
-
+Run "cabal install" to fetch all dependencies and build.
diff --git a/doc/hpodder-manpage.sgml b/doc/hpodder-manpage.sgml
--- a/doc/hpodder-manpage.sgml
+++ b/doc/hpodder-manpage.sgml
@@ -1025,7 +1025,7 @@
               </para>
               <para>
                 The default value adds ID3 tags to MP3 files.  It is:
-                <literal>id3v2 -A "${CASTTITLE}" -t "${EPTITLE}" --WOAF
+                <literal>mid3v2 -T "${EPID}" -A "${CASTTITLE}" -t "${EPTITLE}" --WOAF
                   "${EPURL}" --WOAS "${FEEDURL}" "${EPFILENAME}"</literal>
               </para>
             </listitem>
@@ -1225,11 +1225,11 @@
     <title>See Also</title>
     <para>
       <application>curl</application>(1),
-      <application>id3v2</application>(1)
+      <application>mid3v2</application>(1)
     </para>
     <para>
       The &hpodder; homepage at <ulink
-      url="http://quux.org/devel/hpodder"></>,
+      url="http://software.complete.org/hpodder"></>,
       a general description of podcasting at
       <ulink url="http://en.wikipedia.org/wiki/Podcast"></>
     </para>
diff --git a/hpodder.cabal b/hpodder.cabal
--- a/hpodder.cabal
+++ b/hpodder.cabal
@@ -1,10 +1,10 @@
 Name: hpodder
-Version: 1.1.5
+Version: 1.1.6
 License: GPL
 Maintainer: John Goerzen <jgoerzen@complete.org>
 Author: John Goerzen
 Stability: Stable
-Copyright: Copyright (c) 2006-2008 John Goerzen
+Copyright: Copyright (c) 2006-2011 John Goerzen
 license-file: COPYRIGHT
 extra-source-files: COPYING, INSTALL, doc/SConstruct,
   doc/hpodder-manpage.sgml, doc/hpodder.sgml, doc/local.dsl,
@@ -68,8 +68,8 @@
  hpodder is SAFE and is designed with data integrity in mind from the
  beginning.  It should be exceedingly difficult to lose a podcast
  episode, even in the event of a power failure.
-Build-Depends: haskell98, network, unix, parsec, MissingH>=1.0.0,
- HDBC>=1.1.0, HDBC-sqlite3>=1.1.0, mtl, base, HaXml>=1.13.2, HaXml<1.19, hslogger,
+Build-Depends: network, unix, parsec, MissingH>=1.0.0,
+ HDBC>=1.1.0, HDBC-sqlite3>=1.1.0, mtl, base>=3 && < 5, HaXml >= 1.20 && < 1.21, hslogger,
  ConfigFile, filepath, old-time, directory, process
 
 Executable: hpodder
