diff --git a/ble.cabal b/ble.cabal
--- a/ble.cabal
+++ b/ble.cabal
@@ -3,12 +3,12 @@
 -- see: https://github.com/sol/hpack
 
 name:           ble
-version:        0.3.1.0
+version:        0.3.2.0
 synopsis:       Bluetooth Low Energy (BLE) peripherals
 description:    This package provides a Haskell API for writing Bluetooth Low Energy peripherals.
 stability:      alpha
 homepage:       http://github.com/plow-technologies/ble#readme
-bug-reports:    https://github.com/plow-techonologies/ble/issues
+bug-reports:    https://github.com/plow-technologies/ble/issues
 author:         Julian K. Arni
 maintainer:     jkarni@turingjump.com
 copyright:      2016 Julian K. Arni
@@ -25,7 +25,7 @@
 
 source-repository head
   type: git
-  location: https://github.com/plow-techonologies/ble
+  location: https://github.com/plow-technologies/ble
 
 flag bluez543
   description: Bluez version 5.43 or greater
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name:                ble
-version:             0.3.1.0
+version:             0.3.2.0
 synopsis:            Bluetooth Low Energy (BLE) peripherals
 description:         >
     This package provides a Haskell API for writing Bluetooth Low Energy
@@ -11,7 +11,7 @@
 author:              Julian K. Arni
 maintainer:          jkarni@turingjump.com
 copyright:           2016 Julian K. Arni
-github:              plow-techonologies/ble
+github:              plow-technologies/ble
 stability:           alpha
 tested-with:         GHC == 7.10.3, GHC == 8.0.1
 
diff --git a/src/Bluetooth.hs b/src/Bluetooth.hs
--- a/src/Bluetooth.hs
+++ b/src/Bluetooth.hs
@@ -47,8 +47,10 @@
   (
     registerApplication
   , registerAndAdvertiseApplication
+  , unregisterApplication
   , advertise
   , advertisementFor
+  , unadvertise
   , connect
   , runBluetoothM
   , runHandler
diff --git a/src/Bluetooth/Internal/DBus.hs b/src/Bluetooth/Internal/DBus.hs
--- a/src/Bluetooth/Internal/DBus.hs
+++ b/src/Bluetooth/Internal/DBus.hs
@@ -32,13 +32,23 @@
   conn <- ask
   addAllObjs conn app
   () <- toBluetoothM . const
-    $ callMethod bluezName bluezPath (T.pack gattManagerIFace) "RegisterApplication"  args []
+    $ callMethod bluezName bluezPath (T.pack gattManagerIFace)
+        "RegisterApplication" args []
     $ dbusConn conn
-  return ApplicationRegistered
+  return $ ApplicationRegistered (app ^. path)
   where
     args :: (ObjectPath, Map.Map T.Text Any)
     args = (app ^. path, Map.empty)
 
+unregisterApplication :: ApplicationRegistered -> BluetoothM ()
+unregisterApplication (ApplicationRegistered appPath) = do
+  conn <- ask
+  toBluetoothM . const
+    $ callMethod bluezName bluezPath (T.pack gattManagerIFace)
+        "UnregisterApplication" appPath []
+    $ dbusConn conn
+
+
 -- | Adds handlers for all the objects managed by the Application (plus the
 -- Application itself).
 addAllObjs :: Connection -> Application -> BluetoothM ()
@@ -75,6 +85,18 @@
     args :: (ObjectPath, Map.Map T.Text Any)
     args = (adv ^. path, Map.empty)
 
+-- | Unregister an adverstisement.
+unadvertise :: WithObjectPath Advertisement -> BluetoothM ()
+unadvertise adv = do
+  conn <- ask
+  toBluetoothM . const $ do
+    callMethod bluezName bluezPath (T.pack leAdvertisingManagerIFace) "UnregisterAdvertisement" args []
+      $ dbusConn conn
+  where
+    args :: ObjectPath
+    args = adv ^. path
+
+
 -- | Create an advertisement for all of an application's services.
 -- The advertisement will be for peripheral (not broadcast) by default.
 advertisementFor :: Application -> WithObjectPath Advertisement
@@ -86,7 +108,7 @@
 
 -- | Triggers notifications or indications.
 triggerNotification :: ApplicationRegistered -> CharacteristicBS -> BluetoothM ()
-triggerNotification ApplicationRegistered c = do
+triggerNotification (ApplicationRegistered _) c = do
    case c ^. readValue of
      Nothing -> throwError "Handler does not have a readValue implementation!"
      Just readHandler -> do
diff --git a/src/Bluetooth/Internal/Types.hs b/src/Bluetooth/Internal/Types.hs
--- a/src/Bluetooth/Internal/Types.hs
+++ b/src/Bluetooth/Internal/Types.hs
@@ -464,8 +464,8 @@
 -- | This datatype, which is kept opaque, is returned when an application is
 -- successfully registered, and required as an argument from functions that
 -- should only be called after the application has been registered.
-data ApplicationRegistered = ApplicationRegistered
-  deriving (Eq, Show, Read, Generic)
+newtype ApplicationRegistered = ApplicationRegistered ObjectPath
+  deriving (Eq, Show, Generic)
 
 data Status
   = Success
diff --git a/test/BluetoothSpec.hs b/test/BluetoothSpec.hs
--- a/test/BluetoothSpec.hs
+++ b/test/BluetoothSpec.hs
@@ -20,7 +20,9 @@
   return ()
 #else
   registerApplicationSpec
+  unregisterApplicationSpec
   advertiseSpec
+  unadvertiseSpec
   {-notifySpec-}
 #endif
 
@@ -35,6 +37,16 @@
     Left err <- runBluetoothM (registerApplication testApp) conn
     show err `shouldContain` "Already Exists"
 
+unregisterApplicationSpec :: Spec
+unregisterApplicationSpec = describe "unregisterApplication" $ before connect $ do
+
+  it "unregisters the service" $ \conn -> do
+    Right p <- runBluetoothM (registerApplication testApp) conn
+    v1 <- runBluetoothM (unregisterApplication p) conn
+    v1 `shouldSatisfy` isRight
+    v2 <- runBluetoothM (registerApplication testApp) conn
+    v2 `shouldSatisfy` isRight
+
 advertiseSpec :: Spec
 advertiseSpec = describe "advertise" $ before connect $ do
 
@@ -44,6 +56,7 @@
         -- We verify that the advertisement was registered by checking that
         -- attempting to register it again throws an AlreadyExists error.
         Left err <- runBluetoothM (advertise ad) conn
+        _ <- runBluetoothM (unadvertise ad) conn
         show err `shouldContain` "Already Exists"
 
   it "adverstises a set of services" $ \conn -> checkAdvert testAdv conn
@@ -57,6 +70,19 @@
   it "works with manufacturer data" $ \conn -> do
     let adv = testAdv & value . manufacturerData . at 1 ?~ "hi"
     checkAdvert adv conn
+
+unadvertiseSpec :: Spec
+unadvertiseSpec = describe "unadvertise" $ before connect $ do
+
+  it "unregisters an advertisement" $ \conn -> do
+    v1 <- runBluetoothM (advertise testAdv) conn
+    v1 `shouldSatisfy` isRight
+    Left err <- runBluetoothM (advertise testAdv) conn
+    show err `shouldContain` "Already Exists"
+    v2 <- runBluetoothM (unadvertise testAdv) conn
+    v2 `shouldSatisfy` isRight
+    v3 <- runBluetoothM (advertise testAdv) conn
+    v3 `shouldSatisfy` isRight
 
 {-notifySpec :: Spec-}
 {-notifySpec = describe "notification" $ before connect $ do-}
