diff --git a/Network/Mail/SMTP.hs b/Network/Mail/SMTP.hs
--- a/Network/Mail/SMTP.hs
+++ b/Network/Mail/SMTP.hs
@@ -2,30 +2,28 @@
 module Network.Mail.SMTP
     ( -- * Main interface
       sendMail
+    , sendMail'
     , sendMailWithLogin
+    , sendMailWithLogin'
     , simpleMail
     , plainTextPart
     , htmlPart
     , filePart
+
     -- * Types
-    , Command(..)
-    , Response(..)
-    , ReplyCode
+    , module Network.Mail.SMTP.Types
     , SMTPConnection
-      -- * Auth Types (reexports)
-    , UserName
-    , Password
-    , AuthType(..)
-      -- * Network.Mail.Mime types (reexports)
-    , Address (..)
+
       -- * Network.Mail.Mime's sendmail interface (reexports)
     , sendmail
     , sendmailCustom
     , renderSendMail
     , renderSendMailCustom
+
       -- * Establishing Connection
-    , connectSMTPPort
     , connectSMTP
+    , connectSMTP'
+
       -- * Operation to a Connection
     , sendCommand
     , login
@@ -34,6 +32,9 @@
     )
     where
 
+import Network.Mail.SMTP.Auth
+import Network.Mail.SMTP.Types
+
 import System.IO
 import System.FilePath (takeFileName)
 
@@ -43,7 +44,6 @@
 
 import Network
 import Network.BSD (getHostName)
-import Network.Mail.SMTP.Auth
 import Network.Mail.Mime hiding (simpleMail)
 
 import Data.ByteString (ByteString)
@@ -57,58 +57,21 @@
 
 data SMTPConnection = SMTPC !Handle ![ByteString]
 
-data Command = HELO ByteString
-             | EHLO ByteString
-             | MAIL ByteString
-             | RCPT ByteString
-             | DATA ByteString
-             | EXPN ByteString
-             | VRFY ByteString
-             | HELP ByteString
-             | AUTH AuthType UserName Password
-             | NOOP
-             | RSET
-             | QUIT
-               deriving (Show, Eq)
-
-type ReplyCode = Int
+instance Eq SMTPConnection where
+    (==) (SMTPC a _) (SMTPC b _) = a == b
 
-data Response = Ok
-              | SystemStatus
-              | HelpMessage
-              | ServiceReady
-              | ServiceClosing
-              | UserNotLocal
-              | CannotVerify
-              | StartMailInput
-              | ServiceNotAvailable
-              | MailboxUnavailable
-              | ErrorInProcessing
-              | InsufficientSystemStorage
-              | SyntaxError
-              | ParameterError
-              | CommandNotImplemented
-              | BadSequence
-              | ParameterNotImplemented
-              | MailboxUnavailableError
-              | UserNotLocalError
-              | ExceededStorage
-              | MailboxNotAllowed
-              | TransactionFailed
-                deriving (Show, Eq)
+-- | Connect to an SMTP server with the specified host and default port (25)
+connectSMTP :: HostName     -- ^ name of the server
+            -> IO SMTPConnection
+connectSMTP = flip connectSMTP' 25
 
 -- | Connect to an SMTP server with the specified host and port
-connectSMTPPort :: String     -- ^ name of the server
+connectSMTP' :: HostName     -- ^ name of the server
                 -> PortNumber -- ^ port number
                 -> IO SMTPConnection
-connectSMTPPort hostname port =
+connectSMTP' hostname port =
     connectTo hostname (PortNumber port) >>= connectStream
 
--- | Connect to an SMTP server with the specified host and default port (25)
-connectSMTP :: String     -- ^ name of the server
-            -> IO SMTPConnection
-connectSMTP = flip connectSMTPPort 25
-
 -- | Attemp to send a 'Command' to the SMTP server once
 tryOnce :: SMTPConnection -> Command -> ReplyCode -> IO ByteString
 tryOnce = tryCommand 1
@@ -226,17 +189,32 @@
         from = enc mailFrom
         to   = map enc mailTo
 
+-- | Connect to an SMTP server, send a 'Mail', then disconnect.  Uses the default port (25).
+sendMail :: HostName -> Mail -> IO ()
+sendMail host mail = do
+  con <- connectSMTP host
+  renderAndSend con mail
+  closeSMTP con
+
 -- | Connect to an SMTP server, send a 'Mail', then disconnect.
-sendMail :: String -> PortNumber -> Mail -> IO ()
-sendMail host port mail = do
-  con <- connectSMTPPort host port
+sendMail' :: HostName -> PortNumber -> Mail -> IO ()
+sendMail' host port mail = do
+  con <- connectSMTP' host port
   renderAndSend con mail
   closeSMTP con
 
+-- | Connect to an SMTP server, login, send a 'Mail', disconnect.  Uses the default port (25).
+sendMailWithLogin :: HostName -> UserName -> Password -> Mail -> IO ()
+sendMailWithLogin host user pass mail = do
+  con <- connectSMTP host
+  _ <- sendCommand con (AUTH LOGIN user pass)
+  renderAndSend con mail
+  closeSMTP con
+
 -- | Connect to an SMTP server, login, send a 'Mail', disconnect.
-sendMailWithLogin :: String -> PortNumber -> UserName -> Password -> Mail -> IO ()
-sendMailWithLogin host port user pass mail = do
-  con <- connectSMTPPort host port
+sendMailWithLogin' :: HostName -> PortNumber -> UserName -> Password -> Mail -> IO ()
+sendMailWithLogin' host port user pass mail = do
+  con <- connectSMTP' host port
   _ <- sendCommand con (AUTH LOGIN user pass)
   renderAndSend con mail
   closeSMTP con
diff --git a/Network/Mail/SMTP/Types.hs b/Network/Mail/SMTP/Types.hs
new file mode 100644
--- /dev/null
+++ b/Network/Mail/SMTP/Types.hs
@@ -0,0 +1,58 @@
+module Network.Mail.SMTP.Types (
+    Command(..),
+    ReplyCode,
+    Response(..),
+
+    -- * Auth types (re-exports)
+    UserName,
+    Password,
+    AuthType(..),
+
+    -- * "Network.Mail.Mime" types (re-exports)
+    Address(..),
+) where
+
+import Network.Mail.SMTP.Auth
+
+import Data.ByteString (ByteString)
+import Network.Mail.Mime
+
+data Command = HELO ByteString
+             | EHLO ByteString
+             | MAIL ByteString
+             | RCPT ByteString
+             | DATA ByteString
+             | EXPN ByteString
+             | VRFY ByteString
+             | HELP ByteString
+             | AUTH AuthType UserName Password
+             | NOOP
+             | RSET
+             | QUIT
+               deriving (Show, Eq)
+
+type ReplyCode = Int
+
+data Response = Ok
+              | SystemStatus
+              | HelpMessage
+              | ServiceReady
+              | ServiceClosing
+              | UserNotLocal
+              | CannotVerify
+              | StartMailInput
+              | ServiceNotAvailable
+              | MailboxUnavailable
+              | ErrorInProcessing
+              | InsufficientSystemStorage
+              | SyntaxError
+              | ParameterError
+              | CommandNotImplemented
+              | BadSequence
+              | ParameterNotImplemented
+              | MailboxUnavailableError
+              | UserNotLocalError
+              | ExceededStorage
+              | MailboxNotAllowed
+              | TransactionFailed
+                deriving (Show, Eq)
diff --git a/smtp-mail.cabal b/smtp-mail.cabal
--- a/smtp-mail.cabal
+++ b/smtp-mail.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                smtp-mail
-version:             0.1.4.0
+version:             0.1.4.1
 synopsis:            Simple email sending via SMTP
 -- description:         
 homepage:            http://github.com/jhickner/smtp-mail
@@ -20,18 +20,22 @@
   location: git@github.com:jhickner/smtp-mail.git
 
 library
-  exposed-modules:     Network.Mail.SMTP, Network.Mail.SMTP.Auth
-  -- other-modules:       
-  build-depends:       
-    base >= 4.5 && < 5,
-    network,
-    filepath,
-    mime-mail,
-    bytestring,
-    text,
-    cryptohash,
-    base16-bytestring,
-    base64-bytestring,
-    array
+  exposed-modules:
+    Network.Mail.SMTP
+    Network.Mail.SMTP.Auth
+    Network.Mail.SMTP.Types
+
+  -- other-modules:
+
+  build-depends: base >= 4.5 && < 5
+               , array
+               , base16-bytestring
+               , base64-bytestring
+               , bytestring
+               , cryptohash
+               , filepath
+               , mime-mail
+               , network
+               , text
 
   ghc-options: -Wall -fwarn-tabs
