diff --git a/fb.cabal b/fb.cabal
--- a/fb.cabal
+++ b/fb.cabal
@@ -1,5 +1,5 @@
 name:              fb
-version:           0.9
+version:           0.9.1
 license:           BSD3
 license-file:      LICENSE
 author:            Felipe Lessa
diff --git a/src/Facebook.hs b/src/Facebook.hs
--- a/src/Facebook.hs
+++ b/src/Facebook.hs
@@ -41,6 +41,7 @@
       -- * Facebook's Open Graph API
     , createAction
     , Action
+    , createCheckin
     , (#=)
     , SimpleType(..)
 
diff --git a/src/Facebook/Auth.hs b/src/Facebook/Auth.hs
--- a/src/Facebook/Auth.hs
+++ b/src/Facebook/Auth.hs
@@ -237,11 +237,15 @@
 
 
 -- | Extend the expiration time of an user access token (see
--- <https://developers.facebook.com/docs/offline-access-deprecation/>).
--- Returns @Left exc@ if there is an error while extending, or
--- @Right token@ with the new user access token (which could have
--- the same data and expiration time as before, but you can't
--- assume this).  Note that expired access tokens can't be
+-- <https://developers.facebook.com/docs/offline-access-deprecation/>,
+-- <https://developers.facebook.com/roadmap/offline-access-removal/>).
+-- Only short-lived user access tokens may extended into
+-- long-lived user access tokens, you must get a new short-lived
+-- user access token if you need to extend a long-lived
+-- one.  Returns @Left exc@ if there is an error while extending,
+-- or @Right token@ with the new user access token (which could
+-- have the same data and expiration time as before, but you
+-- can't assume this).  Note that expired access tokens can't be
 -- extended, only valid tokens.
 extendUserAccessToken :: (MonadBaseControl IO m, C.MonadResource m) =>
                          UserAccessToken
diff --git a/src/Facebook/OpenGraph.hs b/src/Facebook/OpenGraph.hs
--- a/src/Facebook/OpenGraph.hs
+++ b/src/Facebook/OpenGraph.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE FlexibleContexts, OverloadedStrings #-}
 module Facebook.OpenGraph
     ( createAction
+    , createCheckin
     , Action(..)
     , (#=)
     , SimpleType(..)
@@ -14,6 +15,8 @@
 import Data.Function (on)
 import Data.List (intersperse)
 import Data.Text (Text)
+import qualified Data.Text.Lazy as TL (toStrict)
+import Data.Text.Lazy.Builder (toLazyText)
 -- import Data.Typeable (Typeable, Typeable1)
 import Data.Int (Int8, Int16, Int32)
 import Data.Word (Word8, Word16, Word32, Word)
@@ -22,7 +25,8 @@
 import System.Locale (defaultTimeLocale)
 
 -- import qualified Control.Exception.Lifted as E
--- import qualified Data.Aeson as A
+import qualified Data.Aeson as A
+import qualified Data.Aeson.Encode as AE (fromValue)
 import qualified Data.ByteString.Char8 as B
 import qualified Data.Conduit as C
 -- import qualified Data.Text as T
@@ -63,6 +67,19 @@
     Nothing       -> post "/me/" usertoken
     Just apptoken -> post ("/" <> accessTokenUserId usertoken <> "/") apptoken
 
+-- | Creates a 'check-in' and returns its id. Place and
+-- coordinates are both required by Facebook.
+createCheckin :: (C.MonadResource m, MonadBaseControl IO m)  =>
+                 Id               -- ^ Place Id
+              -> (Double, Double) -- ^ (Latitude, Longitude)
+              -> [Argument]       -- ^ Other arguments of the action.
+              -> UserAccessToken  -- ^ Required user access token.
+              -> FacebookT Auth m Id
+createCheckin pid (lat,lon) args usertoken = do
+  let coords = ("coordinates", toBS $ A.object ["latitude" A..= lat, "longitude" A..= lon])
+      body = ("place" #= pid) : coords : args
+      toBS = TE.encodeUtf8 . TL.toStrict . toLazyText . AE.fromValue
+  postObject "me/checkins" body usertoken
 
 
 -- | An action of your app.  Please refer to Facebook's
