diff --git a/Linux/Arch/Aur/Pkgbuild.hs b/Linux/Arch/Aur/Pkgbuild.hs
--- a/Linux/Arch/Aur/Pkgbuild.hs
+++ b/Linux/Arch/Aur/Pkgbuild.hs
@@ -13,12 +13,10 @@
     , pkgbuild'
     , pkgbuildUrl ) where
 
-import           Control.Applicative ((<$>))
 import           Control.Exception (SomeException, catch)
 import           Control.Lens ((^?))
 import           Control.Monad ((>=>))
 import           Control.Monad.Trans (MonadIO, liftIO)
-import           Data.Monoid ((<>))
 import           Data.Text hiding (take)
 import qualified Data.Text.Lazy as TL
 import           Data.Text.Lazy.Encoding
@@ -30,11 +28,11 @@
 type E = SomeException
 
 baseUrl :: String
-baseUrl = "https://aur.archlinux.org/packages/"
+baseUrl = "https://aur4.archlinux.org/"
 
 -- | The location of a given package's PKGBUILD on the AUR servers.
 pkgbuildUrl :: String -> String
-pkgbuildUrl p = baseUrl </> take 2 p </> p </> "PKGBUILD"
+pkgbuildUrl p = baseUrl </> "cgit/aur.git/plain/PKGBUILD?h=" ++ p
 
 -- | The PKGBUILD of a given package, retrieved from the AUR servers.
 pkgbuild :: MonadIO m => String -> m (Maybe Text)
diff --git a/Linux/Arch/Aur/Rpc.hs b/Linux/Arch/Aur/Rpc.hs
--- a/Linux/Arch/Aur/Rpc.hs
+++ b/Linux/Arch/Aur/Rpc.hs
@@ -7,22 +7,31 @@
 -- Maintainer: Colin Woodbury <colingw@gmail.com>
 
 module Linux.Arch.Aur.Rpc
-       ( -- * Queries
+       ( -- * AUR4 Queries
          info
        , multiinfo
        , search
        , msearch
-       -- * As JSON
+       -- * AUR4 Queries as JSON
+       , infoJ
+       , multiinfoJ
+       , searchJ
+       , msearchJ
+       -- * Explicit API version/endpoint
        , info'
        , multiinfo'
        , search'
        , msearch'
+       -- * Explicit API version/endpoint as JSON
+       , infoJ'
+       , multiinfoJ'
+       , searchJ'
+       , msearchJ'
        -- * Pretty JSON
        , pretty) where
 
 import           Linux.Arch.Aur.Types
 
-import           Control.Applicative ((<$>))
 import           Control.Lens
 import           Control.Monad.Trans (MonadIO, liftIO)
 import           Data.Aeson (Value(..), FromJSON, Result(..), fromJSON)
@@ -37,53 +46,79 @@
 
 ---
 
-rpcUrl :: String
-rpcUrl = "https://aur.archlinux.org/rpc.php?"
+aurUrl :: String
+aurUrl = "https://aur.archlinux.org/rpc.php?"
 
-apiVersion :: Text
-apiVersion = "3"
+aur4Url :: String
+aur4Url = "https://aur4.archlinux.org/rpc.php?"
 
 -- | Returns all information about one package.
-info :: (MonadIO m, Functor m) => Text -> m (Maybe AurInfo)
-info p = (>>= extract) <$> info' p
-
--- | `info` call as Haskellised JSON.
-info' :: (MonadIO m, Functor m) => Text -> m (Maybe Value)
-info' pkg = (>>= (^? nth 0)) <$> multiinfo' [pkg]
+info :: MonadIO m => Text -> m (Maybe AurInfo)
+info p = (>>= extract) <$> infoJ p
 
 -- | Like `info`, but can handle requests for multiple packages at once.
 -- More efficient than using `info` multiple times.
-multiinfo :: (MonadIO m, Functor m) => [Text] -> m [AurInfo]
-multiinfo p = mapArray <$> multiinfo' p
-
--- | `multiinfo` call as Haskellised JSON.
-multiinfo' :: MonadIO m => [Text] -> m (Maybe Value)
-multiinfo' pkgs = rpc "multiinfo" pkgs "arg[]"
+multiinfo :: MonadIO m => [Text] -> m [AurInfo]
+multiinfo ps = mapArray <$> multiinfoJ ps
 
 -- | Yields any matches to the input as `AurInfo`, but
 -- doesn't include dependency information.
-search :: (MonadIO m, Functor m) => Text -> m [AurInfo]
-search s = mapArray <$> search' s
-
--- | `search` call as Haskellised JSON.
-search' :: MonadIO m => Text -> m (Maybe Value)
-search' query = rpc "search" [query] "arg"
+search :: MonadIO m => Text -> m [AurInfo]
+search s = mapArray <$> searchJ s
 
 -- | Search the AUR by Maintainer name.
-msearch :: (MonadIO m, Functor m) => Text -> m [AurInfo]
-msearch m = mapArray <$> msearch' m
+msearch :: MonadIO m => Text -> m [AurInfo]
+msearch m = mapArray <$> msearchJ m
 
+-- | `info` call as Haskellised JSON.
+infoJ :: MonadIO m => Text -> m (Maybe Value)
+infoJ p = (>>= (^? nth 0)) <$> multiinfoJ [p]
+
+-- | `multiinfo` call as Haskellised JSON.
+multiinfoJ :: MonadIO m => [Text] -> m (Maybe Value)
+multiinfoJ ps = multiinfoJ' ps aur4Url "4"
+
+-- | `search` call as Haskellised JSON.
+searchJ :: MonadIO m => Text -> m (Maybe Value)
+searchJ s = searchJ' s aur4Url "4"
+
 -- | `msearch` call as Haskellised JSON.
-msearch' :: MonadIO m => Text -> m (Maybe Value)
-msearch' maintainer = rpc "msearch" [maintainer] "arg"
+msearchJ :: MonadIO m => Text -> m (Maybe Value)
+msearchJ m = msearchJ' m aur4Url "4"
 
+-- | `info` with explicit RPC endpoint and API version.
+info' :: MonadIO m => Text -> String -> Text -> m (Maybe AurInfo)
+info' p url ver = (>>= extract) <$> infoJ' p url ver
+
+-- | `multiinfo` with explicit RPC endpoint and API version.
+multiinfo' :: MonadIO m => [Text] -> String -> Text -> m [AurInfo]
+multiinfo' ps url ver = mapArray <$> multiinfoJ' ps url ver
+
+search' :: MonadIO m => Text -> String -> Text -> m [AurInfo]
+search' s url ver = mapArray <$> searchJ' s url ver
+
+msearch' :: MonadIO m => Text -> String -> Text -> m [AurInfo]
+msearch' m url ver = mapArray <$> msearchJ' m url ver
+
+infoJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)
+infoJ' p url ver = (>>= (^? nth 0)) <$> multiinfoJ' [p] url ver
+
+multiinfoJ' :: MonadIO m => [Text] -> String -> Text -> m (Maybe Value)
+multiinfoJ' ps url ver = rpc "multiinfo" ps "arg[]" url ver
+
+searchJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)
+searchJ' s url ver = rpc "search" [s] "arg" url ver
+
+msearchJ' :: MonadIO m => Text -> String -> Text -> m (Maybe Value)
+msearchJ' m url ver = rpc "msearch" [m] "arg" url ver
+
 -- | Call the RPC.
 -- Doesn't fail elegantly when there is a connection failure.
-rpc :: MonadIO m => Text -> [Text] -> Text -> m (Maybe Value)
-rpc method args argLabel = liftIO (rpcResults <$> getWith opts rpcUrl)
+rpc :: MonadIO m => Text -> [Text] -> Text -> String -> Text -> m (Maybe Value)
+rpc method args argLabel url ver = liftIO (rpcResults <$> getWith opts url)
     where opts = defaults & param "type"   .~ [method]
                           & param argLabel .~ args
-                          & param "v"      .~ [apiVersion]
+                          & param "v"      .~ [ver]
 
 rpcResults :: AsValue r => Response r -> Maybe Value
 rpcResults r = r ^? responseBody . key "results"
@@ -101,6 +136,7 @@
           f _           = Nothing
 
 -- There must be a better way to do this.
+-- Use lenses, child.
 mapArray :: FromJSON a => Maybe Value -> [a]
 mapArray (Just (Array v)) = catMaybes . V.toList . V.map extract $ v
 mapArray _                = []
diff --git a/Linux/Arch/Aur/Types.hs b/Linux/Arch/Aur/Types.hs
--- a/Linux/Arch/Aur/Types.hs
+++ b/Linux/Arch/Aur/Types.hs
@@ -9,7 +9,6 @@
 module Linux.Arch.Aur.Types
     ( AurInfo(..) ) where
 
-import Control.Applicative
 import Control.Monad (mzero)
 import Data.Aeson
 import Data.Text
@@ -21,16 +20,16 @@
                        , pkgBaseIdOf      :: Int
                        , pkgBaseOf        :: Text
                        , aurVersionOf     :: Text
-                       , aurCategoryOf    :: Int
                        , aurDescriptionOf :: Text
                        , licenseOf        :: [Text]
                        , urlOf            :: Text
                        , aurVotesOf       :: Int
+                       , popularityOf     :: Float
                        , isOutOfDate      :: Bool
                        , aurMaintainerOf  :: Maybe Text
                        , submissionDatOf  :: Int
                        , modifiedDateOf   :: Int
-                       , aurTarballUrlOf  :: Text
+                       , urlPathOf        :: Text
                        , dependsOf        :: [Text]
                        , makeDepsOf       :: [Text]
                        , optDepsOf        :: [Text]
@@ -44,12 +43,12 @@
                            v .:  "PackageBaseID"      <*>
                            v .:  "PackageBase"        <*>
                            v .:  "Version"            <*>
-                           v .:  "CategoryID"         <*>
                            v .:  "Description"        <*>
                            v .:? "License"     .!= [] <*>
                            v .:  "URL"                <*>
                            v .:  "NumVotes"           <*>
-                           (f <$> (v .:  "OutOfDate")) <*>
+                           v .:  "Popularity"         <*>
+                           (f <$> (v .: "OutOfDate")) <*>
                            v .:? "Maintainer"         <*>
                            v .:  "FirstSubmitted"     <*>
                            v .:  "LastModified"       <*>
diff --git a/aur.cabal b/aur.cabal
--- a/aur.cabal
+++ b/aur.cabal
@@ -4,7 +4,7 @@
 -- The name of the package.
 name:                aur
 
-version:             2.0.4
+version:             3.0.0
 
 synopsis:            Access metadata from the Arch Linux User Repository.
 
@@ -61,7 +61,7 @@
   
   other-extensions:    OverloadedStrings, ScopedTypeVariables
   
-  build-depends:       base >=4.7 && <4.9,
+  build-depends:       base >=4.8 && <4.9,
                        aeson >=0.7 && <1,
                        aeson-pretty >=0.7 && <1,
                        filepath,
@@ -70,7 +70,7 @@
                        mtl >=2.1 && <3,
                        text >=1.1 && <1.3,
                        vector >=0.10 && <0.11,
-                       wreq-sb >= 0.4
+                       wreq >=0.4
   
   -- Directories containing source files.
   -- hs-source-dirs:      
