diff --git a/Weather.cabal b/Weather.cabal
--- a/Weather.cabal
+++ b/Weather.cabal
@@ -2,22 +2,22 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                Weather
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Library for interacting with the Weather Underground JSON API.
 description: Weather is a simple library for interacting with the Weather Underground JSON API. It is not complete, but it may be useful still.
-homepage:            http://bryanstamour.com
+homepage:            https://github.com/bstamour/weather
 license:             BSD3
 license-file:        LICENSE
 author:              Bryan St. Amour
 maintainer:          bryan@bryanstamour.com
 -- copyright:
-category:            Web
+category:            Net
 build-type:          Simple
 -- extra-source-files:
 cabal-version:       >=1.10
 
 library
-  exposed-modules:     Web.Weather
+  exposed-modules:     Net.Weather
   -- other-modules:
   -- other-extensions:
   build-depends: base >= 4.7.0.2 && < 5
diff --git a/Weather.cabal~ b/Weather.cabal~
--- a/Weather.cabal~
+++ b/Weather.cabal~
@@ -4,9 +4,8 @@
 name:                Weather
 version:             0.1.0.0
 synopsis:            Library for interacting with the Weather Underground JSON API.
-description: Weather is a simple library for interacting with the Weather Underground \
-JSON API. It is not complete, but it may be useful still.
-homepage:            http://bryanstamour.com
+description: Weather is a simple library for interacting with the Weather Underground JSON API. It is not complete, but it may be useful still.
+homepage:            https://github.com/bstamour/weather
 license:             BSD3
 license-file:        LICENSE
 author:              Bryan St. Amour
diff --git a/src/Net/Weather.hs b/src/Net/Weather.hs
new file mode 100644
--- /dev/null
+++ b/src/Net/Weather.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Net.Weather
+       ( Observation(..)
+       , APIKey
+       , getConditions
+       ) where
+
+import Control.Monad
+import Control.Applicative
+
+import Data.Text (Text)
+import Data.Aeson
+import Data.ByteString.Lazy.Char8 (pack)
+import Network.HTTP (getResponseBody, simpleHTTP, getRequest)
+
+import qualified Data.HashMap.Strict as H
+
+-- | Observation data.
+data Observation =
+  Observation { obsTime        :: String  -- ^ The time the observation was taken.
+              , obsWeather     :: String  -- ^ Description of the weather.
+              , obsTemp        :: Float   -- ^ Temperature (F).
+              , obsRelHumidity :: String  -- ^ Relative humidity (%).
+              , obsWind        :: String  -- ^ Wind condition.
+              , obsFeelsLike   :: String  -- ^ What it feels like.
+              } deriving (Show)
+
+instance FromJSON Observation where
+  parseJSON (Object v) = Observation
+                         <$> v .: "observation_time"
+                         <*> v .: "weather"
+                         <*> v .: "temp_f"
+                         <*> v .: "relative_humidity"
+                         <*> v .: "wind_string"
+                         <*> v .: "feelslike_string"
+  parseJSON _          = mzero
+
+-- | API key. Obtain yours at http://wunderground.com.
+type APIKey = String
+
+-- | Get the current weather conditions of a city.
+getConditions :: APIKey -> String -> String -> IO (Maybe Observation)
+getConditions key city state = do
+  obj <- evalJSONRequest $ conditionsQuery key city state
+  return $ obj >>= getProperty "current_observation"
+
+-- Fetch a property from a JSON object.
+getProperty :: FromJSON a => Text -> Value -> Maybe a
+getProperty property (Object v) = do
+  val <- H.lookup property v
+  case fromJSON val of
+   Error _   -> Nothing
+   Success x -> Just x
+getProperty _ _                 = Nothing
+
+-- Evaluate a JSON request and return the parsed object.
+evalJSONRequest :: FromJSON a => String -> IO (Maybe a)
+evalJSONRequest request = do
+  body <- getResponseBody <=< simpleHTTP $ getRequest request
+  return . decode $ pack body
+
+-- The query used to get weather conditions.
+conditionsQuery :: String -> String -> String -> String
+conditionsQuery key city state =
+  "http://api.wunderground.com/api/" ++ key
+  ++ "/conditions/q/" ++ state
+  ++ "/" ++ city ++ ".json"
diff --git a/src/Net/Weather.hs~ b/src/Net/Weather.hs~
new file mode 100644
--- /dev/null
+++ b/src/Net/Weather.hs~
@@ -0,0 +1,68 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Web.Weather
+       ( Observation(..)
+       , APIKey
+       , getConditions
+       ) where
+
+import Control.Monad
+import Control.Applicative
+
+import Data.Text (Text)
+import Data.Aeson
+import Data.ByteString.Lazy.Char8 (pack)
+import Network.HTTP (getResponseBody, simpleHTTP, getRequest)
+
+import qualified Data.HashMap.Strict as H
+
+-- | Observation data.
+data Observation =
+  Observation { obsTime        :: String  -- ^ The time the observation was taken.
+              , obsWeather     :: String  -- ^ Description of the weather.
+              , obsTemp        :: Float   -- ^ Temperature (F).
+              , obsRelHumidity :: String  -- ^ Relative humidity (%).
+              , obsWind        :: String  -- ^ Wind condition.
+              , obsFeelsLike   :: String  -- ^ What it feels like.
+              } deriving (Show)
+
+instance FromJSON Observation where
+  parseJSON (Object v) = Observation
+                         <$> v .: "observation_time"
+                         <*> v .: "weather"
+                         <*> v .: "temp_f"
+                         <*> v .: "relative_humidity"
+                         <*> v .: "wind_string"
+                         <*> v .: "feelslike_string"
+  parseJSON _          = mzero
+
+-- | API key. Obtain yours at http://wunderground.com.
+type APIKey = String
+
+-- | Get the current weather conditions of a city.
+getConditions :: APIKey -> String -> String -> IO (Maybe Observation)
+getConditions key city state = do
+  obj <- evalJSONRequest $ conditionsQuery key city state
+  return $ obj >>= getProperty "current_observation"
+
+-- Fetch a property from a JSON object.
+getProperty :: FromJSON a => Text -> Value -> Maybe a
+getProperty property (Object v) = do
+  val <- H.lookup property v
+  case fromJSON val of
+   Error _   -> Nothing
+   Success x -> Just x
+getProperty _ _                 = Nothing
+
+-- Evaluate a JSON request and return the parsed object.
+evalJSONRequest :: FromJSON a => String -> IO (Maybe a)
+evalJSONRequest request = do
+  body <- getResponseBody <=< simpleHTTP $ getRequest request
+  return . decode $ pack body
+
+-- The query used to get weather conditions.
+conditionsQuery :: String -> String -> String -> String
+conditionsQuery key city state =
+  "http://api.wunderground.com/api/" ++ key
+  ++ "/conditions/q/" ++ state
+  ++ "/" ++ city ++ ".json"
diff --git a/src/Web/Weather.hs b/src/Web/Weather.hs
deleted file mode 100644
--- a/src/Web/Weather.hs
+++ /dev/null
@@ -1,68 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module Web.Weather
-       ( Observation(..)
-       , APIKey
-       , getConditions
-       ) where
-
-import Control.Monad
-import Control.Applicative
-
-import Data.Text (Text)
-import Data.Aeson
-import Data.ByteString.Lazy.Char8 (pack)
-import Network.HTTP (getResponseBody, simpleHTTP, getRequest)
-
-import qualified Data.HashMap.Strict as H
-
--- | Observation data.
-data Observation =
-  Observation { obsTime        :: String  -- ^ The time the observation was taken.
-              , obsWeather     :: String  -- ^ Description of the weather.
-              , obsTemp        :: Float   -- ^ Temperature (F).
-              , obsRelHumidity :: String  -- ^ Relative humidity (%).
-              , obsWind        :: String  -- ^ Wind condition.
-              , obsFeelsLike   :: String  -- ^ What it feels like.
-              } deriving (Show)
-
-instance FromJSON Observation where
-  parseJSON (Object v) = Observation
-                         <$> v .: "observation_time"
-                         <*> v .: "weather"
-                         <*> v .: "temp_f"
-                         <*> v .: "relative_humidity"
-                         <*> v .: "wind_string"
-                         <*> v .: "feelslike_string"
-  parseJSON _          = mzero
-
--- | API key. Obtain yours at http://wunderground.com.
-type APIKey = String
-
--- | Get the current weather conditions of a city.
-getConditions :: APIKey -> String -> String -> IO (Maybe Observation)
-getConditions key city state = do
-  obj <- evalJSONRequest $ conditionsQuery key city state
-  return $ obj >>= getProperty "current_observation"
-
--- Fetch a property from a JSON object.
-getProperty :: FromJSON a => Text -> Value -> Maybe a
-getProperty property (Object v) = do
-  val <- H.lookup property v
-  case fromJSON val of
-   Error _   -> Nothing
-   Success x -> Just x
-getProperty _ _                 = Nothing
-
--- Evaluate a JSON request and return the parsed object.
-evalJSONRequest :: FromJSON a => String -> IO (Maybe a)
-evalJSONRequest request = do
-  body <- getResponseBody <=< simpleHTTP $ getRequest request
-  return . decode $ pack body
-
--- The query used to get weather conditions.
-conditionsQuery :: String -> String -> String -> String
-conditionsQuery key city state =
-  "http://api.wunderground.com/api/" ++ key
-  ++ "/conditions/q/" ++ state
-  ++ "/" ++ city ++ ".json"
