diff --git a/happstack-server.cabal b/happstack-server.cabal
--- a/happstack-server.cabal
+++ b/happstack-server.cabal
@@ -1,5 +1,5 @@
 Name:                happstack-server
-Version:             7.1.1
+Version:             7.1.2
 Synopsis:            Web related tools and services.
 Description:         Happstack Server provides an HTTP server and a rich set of functions for routing requests, handling query parameters, generating responses, working with cookies, serving files, and more. For in-depth documentation see the Happstack Crash Course <http://happstack.com/docs/crashcourse/index.html>
 License:             BSD3
diff --git a/src/Happstack/Server/FileServe/BuildingBlocks.hs b/src/Happstack/Server/FileServe/BuildingBlocks.hs
--- a/src/Happstack/Server/FileServe/BuildingBlocks.hs
+++ b/src/Happstack/Server/FileServe/BuildingBlocks.hs
@@ -624,7 +624,7 @@
                               if de
                                  then return Directory
                                  else return UnknownKind
-        return (fp, modTime, count, kind)
+        return (if kind == Directory then (fp ++ "/") else fp, modTime, count, kind)
 
 -- | see 'serveDirectory'
 data Browsing
diff --git a/src/Happstack/Server/Internal/Cookie.hs b/src/Happstack/Server/Internal/Cookie.hs
--- a/src/Happstack/Server/Internal/Cookie.hs
+++ b/src/Happstack/Server/Internal/Cookie.hs
@@ -99,7 +99,7 @@
         s f   = '\"' : concatMap e (f cookie) ++ "\""
         e c | fctl c || c == '"' = ['\\',c]
             | otherwise          = [c]
-    in concat $ intersperse ";" ((cookieName cookie++"="++s cookieValue):[ (k++v) | (k,v) <- l, "" /= v ] ++ 
+    in concat $ intersperse ";" ((cookieName cookie++"="++s cookieValue):[ (k++v) | (k,v) <- l, "" /= v ] ++
                                  (if secure cookie then ["Secure"] else []) ++
                                  (if httpOnly cookie then ["HttpOnly"] else []))
 
diff --git a/src/Happstack/Server/Routing.hs b/src/Happstack/Server/Routing.hs
--- a/src/Happstack/Server/Routing.hs
+++ b/src/Happstack/Server/Routing.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE FlexibleInstances, PatternGuards, ScopedTypeVariables, TypeSynonymInstances #-}
 -- | Route an incoming 'Request' to a handler. For more in-depth documentation see this section of the Happstack Crash Course: <http://happstack.com/docs/crashcourse/RouteFilters.html>
-module Happstack.Server.Routing 
+module Happstack.Server.Routing
     ( -- * Route by scheme
       http
     , https
@@ -35,7 +35,7 @@
 -- | instances of this class provide a variety of ways to match on the 'Request' method.
 --
 -- Examples:
--- 
+--
 -- > method GET                  -- match GET or HEAD
 -- > method [GET, POST]          -- match GET, HEAD or POST
 -- > method HEAD                 -- match HEAD /but not/ GET
@@ -124,12 +124,12 @@
 -- > handler =
 -- >     do methodM [GET, HEAD]
 -- >        ...
--- 
+--
 -- NOTE: This function is largely retained for backwards
 -- compatibility. The fact that implicitly calls 'nullDir' is often
 -- forgotten and leads to confusion. It is probably better to just use
 -- 'method' and call 'nullDir' explicitly.
--- 
+--
 -- This function will likely be deprecated in the future.
 methodM :: (ServerMonad m, MonadPlus m, MatchMethod method) => method -> m ()
 methodM meth = methodOnly meth >> nullDir
@@ -153,7 +153,7 @@
 --
 -- > handler :: ServerPart Response
 -- > handler = methodSP [GET, HEAD] $ subHandler
--- 
+--
 -- NOTE: This style of combinator is going to be deprecated in the
 -- future. It is better to just use 'method'.
 --
@@ -166,16 +166,16 @@
 -- | guard which only succeeds if there are no remaining path segments
 --
 -- Often used if you want to explicitly assign a route for '/'
--- 
+--
 nullDir :: (ServerMonad m, MonadPlus m) => m ()
 nullDir = guardRq $ \rq -> null (rqPaths rq)
 
 -- | Pop a path element and run the supplied handler if it matches the
 -- given string.
--- 
+--
 -- > handler :: ServerPart Response
 -- > handler = dir "foo" $ dir "bar" $ subHandler
--- 
+--
 -- The path element can not contain \'/\'. See also 'dirs'.
 dir :: (ServerMonad m, MonadPlus m) => String -> m a -> m a
 dir staticPath handle =
@@ -184,17 +184,17 @@
         case rqPaths rq of
             (p:xs) | p == staticPath -> localRq (\newRq -> newRq{rqPaths = xs}) handle
             _ -> mzero
-            
+
 -- | Guard against a 'FilePath'. Unlike 'dir' the 'FilePath' may
 -- contain \'/\'. If the guard succeeds, the matched elements will be
 -- popped from the directory stack.
 --
 -- > dirs "foo/bar" $ ...
---          
+--
 -- See also: 'dir'.
-dirs :: (ServerMonad m, MonadPlus m) => FilePath -> m a -> m a 
-dirs fp m = 
-     do let parts = splitDirectories (makeRelative "/" fp) 
+dirs :: (ServerMonad m, MonadPlus m) => FilePath -> m a -> m a
+dirs fp m =
+     do let parts = splitDirectories (makeRelative "/" fp)
         foldr dir m parts
 
 -- | Guard against the host.
@@ -202,7 +202,11 @@
 -- This matches against the @host@ header specified in the incoming 'Request'.
 --
 -- Can be used to support virtual hosting, <http://en.wikipedia.org/wiki/Virtual_hosting>
--- 
+--
+-- Note that this matches against the value of the @Host@ header which may include the port number.
+--
+-- <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23>
+--
 -- see also: 'withHost'
 host :: (ServerMonad m, MonadPlus m) => String -> m a -> m a
 host desiredHost handle =
@@ -238,7 +242,7 @@
 uriRest handle = askRq >>= handle . rqURL
 
 -- | Pop any path element and run the handler.
--- 
+--
 -- Succeeds if a path component was popped. Fails is the remaining path was empty.
 anyPath :: (ServerMonad m, MonadPlus m) => m r -> m r
 anyPath x = path $ (\(_::String) -> x)
