diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,4 +8,13 @@
 * Define `Member` datatype
 * Add new `Membership` constructor to `Update` datatype
 * Define `Has` typeclass to get access objects within other objects
-* Replace `chat` lens on `Has Update Chat` instance
+* Replace `chat` lens on `Access Update Chat` instance
+
+# 0.1.3
+* Rename `Has` typeclass to `Access` and swap parameters
+* Rename `Member` datatype to `Moving`
+* Define `Access Chat Callback` instance
+* Define `Access From Callback` instance
+* Define `Access From Moving` instance
+* Define `Access Chat Message` instance
+* Define `Access From Message` instance
diff --git a/Network/Telegram/API/Bot.hs b/Network/Telegram/API/Bot.hs
--- a/Network/Telegram/API/Bot.hs
+++ b/Network/Telegram/API/Bot.hs
@@ -3,5 +3,5 @@
 import Network.Telegram.API.Bot.Property as Exports
 import Network.Telegram.API.Bot.Capacity as Exports
 import Network.Telegram.API.Bot.Object as Exports
-import Network.Telegram.API.Bot.Has as Exports
+import Network.Telegram.API.Bot.Access as Exports
 import Network.Telegram.API.Bot.Core as Exports
diff --git a/Network/Telegram/API/Bot/Access.hs b/Network/Telegram/API/Bot/Access.hs
new file mode 100644
--- /dev/null
+++ b/Network/Telegram/API/Bot/Access.hs
@@ -0,0 +1,6 @@
+module Network.Telegram.API.Bot.Access (Access (..)) where
+
+import "lens" Control.Lens (Lens')
+
+class Access target source where
+	access :: Lens' source target
diff --git a/Network/Telegram/API/Bot/Has.hs b/Network/Telegram/API/Bot/Has.hs
deleted file mode 100644
--- a/Network/Telegram/API/Bot/Has.hs
+++ /dev/null
@@ -1,6 +0,0 @@
-module Network.Telegram.API.Bot.Has (Has (..)) where
-
-import "lens" Control.Lens (Lens')
-
-class Has source target where
-	focus :: Lens' source target
diff --git a/Network/Telegram/API/Bot/Object.hs b/Network/Telegram/API/Bot/Object.hs
--- a/Network/Telegram/API/Bot/Object.hs
+++ b/Network/Telegram/API/Bot/Object.hs
@@ -2,7 +2,7 @@
 
 import Network.Telegram.API.Bot.Object.Update as Exports
 import Network.Telegram.API.Bot.Object.Notification as Exports
-import Network.Telegram.API.Bot.Object.Member as Exports
+import Network.Telegram.API.Bot.Object.Moving as Exports
 import Network.Telegram.API.Bot.Object.Message as Exports
 import Network.Telegram.API.Bot.Object.Keyboard as Exports
 import Network.Telegram.API.Bot.Object.From as Exports
diff --git a/Network/Telegram/API/Bot/Object/Callback.hs b/Network/Telegram/API/Bot/Object/Callback.hs
--- a/Network/Telegram/API/Bot/Object/Callback.hs
+++ b/Network/Telegram/API/Bot/Object/Callback.hs
@@ -3,6 +3,9 @@
 import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
 import "text" Data.Text (Text)
 
+import Network.Telegram.API.Bot.Access (Access (access))
+import Network.Telegram.API.Bot.Object.Chat (Chat)
+import Network.Telegram.API.Bot.Object.From (From)
 import Network.Telegram.API.Bot.Object.Message (Message)
 
 data Callback = Datatext Text Message Text deriving Show
@@ -10,3 +13,9 @@
 instance FromJSON Callback where
 	parseJSON = withObject "Callback" $ \v ->
 		Datatext <$> v .: "id" <*> v .: "message" <*> v .: "data"
+
+instance Access Chat Callback where
+	access f (Datatext cq_id msg dttxt) = flip (Datatext cq_id) dttxt <$> access f msg
+
+instance Access From Callback where
+	access f (Datatext cq_id msg dttxt) = flip (Datatext cq_id) dttxt <$> access f msg
diff --git a/Network/Telegram/API/Bot/Object/Member.hs b/Network/Telegram/API/Bot/Object/Member.hs
deleted file mode 100644
--- a/Network/Telegram/API/Bot/Object/Member.hs
+++ /dev/null
@@ -1,19 +0,0 @@
-module Network.Telegram.API.Bot.Object.Member (Member (..)) where
-
-import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
-import "aeson" Data.Aeson.Types (Object, Parser)
-import "base" Control.Applicative (Alternative ((<|>)))
-
-import Network.Telegram.API.Bot.Object.Chat (Chat)
-import Network.Telegram.API.Bot.Object.From (From)
-
-data Member = Gone Chat From | Joined Chat [From] deriving Show
-
-instance FromJSON Member where
-	parseJSON = withObject "Member" $ \v -> gone v <|> joined v where
-
-		gone :: Object -> Parser Member
-		gone v = Gone <$> v .: "chat" <*> v .: "left_chat_member"
-
-		joined :: Object -> Parser Member
-		joined v = Joined <$> v .: "chat" <*> v .: "new_chat_members"
diff --git a/Network/Telegram/API/Bot/Object/Message.hs b/Network/Telegram/API/Bot/Object/Message.hs
--- a/Network/Telegram/API/Bot/Object/Message.hs
+++ b/Network/Telegram/API/Bot/Object/Message.hs
@@ -9,6 +9,7 @@
 
 import qualified "text" Data.Text as T (drop, take)
 
+import Network.Telegram.API.Bot.Access (Access (access))
 import Network.Telegram.API.Bot.Object.Chat (Chat)
 import Network.Telegram.API.Bot.Object.From (From)
 import Network.Telegram.API.Bot.Object.Keyboard (Keyboard)
@@ -66,3 +67,11 @@
 	marking_value (chat_id, message_id) =
 		object ["chat_id" .= chat_id, "message_id" .= message_id]
 	purge_endpoint _ = "deleteMessage"
+
+instance Access Chat Message where
+	access f (Textual msg_id chat from txt) = (\chat' -> Textual msg_id chat' from txt) <$> f chat
+	access f (Command msg_id chat from cmd) = (\chat' -> Command msg_id chat' from cmd) <$> f chat
+
+instance Access From Message where
+	access f (Textual msg_id chat from txt) = (\from' -> Textual msg_id chat from' txt) <$> f from
+	access f (Command msg_id chat from cmd) = (\from' -> Command msg_id chat from' cmd) <$> f from
diff --git a/Network/Telegram/API/Bot/Object/Moving.hs b/Network/Telegram/API/Bot/Object/Moving.hs
new file mode 100644
--- /dev/null
+++ b/Network/Telegram/API/Bot/Object/Moving.hs
@@ -0,0 +1,24 @@
+module Network.Telegram.API.Bot.Object.Moving (Moving (..)) where
+
+import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
+import "aeson" Data.Aeson.Types (Object, Parser)
+import "base" Control.Applicative (Alternative ((<|>)))
+
+import Network.Telegram.API.Bot.Access (Access (access))
+import Network.Telegram.API.Bot.Object.Chat (Chat)
+import Network.Telegram.API.Bot.Object.From (From)
+
+data Moving = Gone Chat From | Joined Chat [From] deriving Show
+
+instance FromJSON Moving where
+	parseJSON = withObject "Moving" $ \v -> gone v <|> joined v where
+
+		gone :: Object -> Parser Moving
+		gone v = Gone <$> v .: "chat" <*> v .: "left_chat_member"
+
+		joined :: Object -> Parser Moving
+		joined v = Joined <$> v .: "chat" <*> v .: "new_chat_members"
+
+instance Access Chat Moving where
+	access f (Gone chat from) = (\chat' -> Gone chat' from) <$> f chat
+	access f (Joined chat froms) = (\chat' -> Joined chat' froms) <$> f chat
diff --git a/Network/Telegram/API/Bot/Object/Update.hs b/Network/Telegram/API/Bot/Object/Update.hs
--- a/Network/Telegram/API/Bot/Object/Update.hs
+++ b/Network/Telegram/API/Bot/Object/Update.hs
@@ -3,19 +3,18 @@
 import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
 import "aeson" Data.Aeson.Types (Object, Parser)
 import "base" Control.Applicative (Alternative ((<|>)))
-import "lens" Control.Lens (Lens')
 
-import Network.Telegram.API.Bot.Has (Has (focus))
-import Network.Telegram.API.Bot.Object.Callback (Callback (Datatext))
+import Network.Telegram.API.Bot.Access (Access (access))
+import Network.Telegram.API.Bot.Object.Callback (Callback)
 import Network.Telegram.API.Bot.Object.Chat (Chat)
-import Network.Telegram.API.Bot.Object.Member (Member (Gone, Joined))
-import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command))
+import Network.Telegram.API.Bot.Object.Moving (Moving)
+import Network.Telegram.API.Bot.Object.Message (Message)
 import Network.Telegram.API.Bot.Property.Identifiable
 	(Identifiable (identificator), Identificator)
 
 data Update
 	= Query Int Callback
-	| Membership Int Member
+	| Membership Int Moving
 	| Incoming Int Message
 	deriving Show
 
@@ -39,16 +38,7 @@
 		incoming :: Object -> Parser Update
 		incoming v = Incoming <$> v .: "update_id" <*> v .: "message"
 
-instance Has Update Chat where
-	focus f (Incoming upd_id (Command msg_id chat_ from cmd)) =
-		(\chat' -> Incoming upd_id (Command msg_id chat' from cmd)) <$> f chat_
-	focus f (Incoming upd_id (Textual msg_id chat_ from txt)) =
-		(\chat' -> Incoming upd_id (Textual msg_id chat' from txt)) <$> f chat_
-	focus f (Query upd_id (Datatext cq_id (Command msg_id chat_ from cmd) dttxt)) =
-		(\chat' -> Query upd_id (Datatext cq_id (Command msg_id chat' from cmd) dttxt)) <$> f chat_
-	focus f (Query upd_id (Datatext cq_id (Textual msg_id chat_ from txt) dttxt)) =
-		(\chat' -> Query upd_id (Datatext cq_id (Textual msg_id chat' from txt) dttxt)) <$> f chat_
-	focus f (Membership upd_id (Gone chat_ users)) =
-		(\chat' -> Membership upd_id (Gone chat' users)) <$> f chat_
-	focus f (Membership upd_id (Joined chat_ users)) =
-		(\chat' -> Membership upd_id (Joined chat' users)) <$> f chat_
+instance Access Chat Update where
+	access f (Incoming upd_id msg) = Incoming upd_id <$> access f msg
+	access f (Query upd_id cb) = Query upd_id <$> access f cb
+	access f (Membership upd_id mmb) = Membership upd_id <$> access f mmb
diff --git a/telega.cabal b/telega.cabal
--- a/telega.cabal
+++ b/telega.cabal
@@ -1,5 +1,5 @@
 name:                telega
-version:             0.1.2
+version:             0.1.3
 synopsis:            Telegram Bot API binding
 description:         High-level bindings, typed entities, inline mode only
 homepage:            https://github.com/iokasimov/telega
@@ -21,14 +21,14 @@
   exposed-modules:
     Network.Telegram.API.Bot
     Network.Telegram.API.Bot.Core
-    Network.Telegram.API.Bot.Has
+    Network.Telegram.API.Bot.Access
     Network.Telegram.API.Bot.Object
     Network.Telegram.API.Bot.Object.Chat
     Network.Telegram.API.Bot.Object.From
     Network.Telegram.API.Bot.Object.Button
     Network.Telegram.API.Bot.Object.Callback
     Network.Telegram.API.Bot.Object.Keyboard
-    Network.Telegram.API.Bot.Object.Member
+    Network.Telegram.API.Bot.Object.Moving
     Network.Telegram.API.Bot.Object.Message
     Network.Telegram.API.Bot.Object.Notification
     Network.Telegram.API.Bot.Object.Update
