diff --git a/lib/grammers-client/src/client/chats.rs b/lib/grammers-client/src/client/chats.rs
index e669f189..5a609b9e 100644
--- a/lib/grammers-client/src/client/chats.rs
+++ b/lib/grammers-client/src/client/chats.rs
@@ -384,7 +384,7 @@ impl Client {
                 channel_id: chat_id,
             }) => chats
                 .into_iter()
-                .map(Chat::from_chat)
+                .map(Chat::from_raw)
                 .find(|chat| chat.id() == chat_id),
         })
     }
@@ -651,7 +651,7 @@ impl Client {
                 if res.len() != 1 {
                     panic!("fetching only one chat should exactly return one chat");
                 }
-                Chat::from_chat(res.pop().unwrap())
+                Chat::from_raw(res.pop().unwrap())
             }
             PackedType::Megagroup | PackedType::Broadcast | PackedType::Gigagroup => {
                 let mut res = match self
@@ -669,7 +669,7 @@ impl Client {
                 if res.len() != 1 {
                     panic!("fetching only one chat should exactly return one chat");
                 }
-                Chat::from_chat(res.pop().unwrap())
+                Chat::from_raw(res.pop().unwrap())
             }
         })
     }
@@ -846,7 +846,7 @@ impl Client {
         };
 
         match update_chat {
-            Some(chats) if !chats.is_empty() => Ok(Some(Chat::from_chat(chats[0].clone()))),
+            Some(chats) if !chats.is_empty() => Ok(Some(Chat::from_raw(chats[0].clone()))),
             Some(chats) if chats.is_empty() => Ok(None),
             None => Ok(None),
             Some(_) => Ok(None),
diff --git a/lib/grammers-client/src/types/chat/mod.rs b/lib/grammers-client/src/types/chat/mod.rs
index 07729c80..4c9909ed 100644
--- a/lib/grammers-client/src/types/chat/mod.rs
+++ b/lib/grammers-client/src/types/chat/mod.rs
@@ -41,7 +41,7 @@ impl Chat {
         Self::User(User::from_raw(user))
     }
 
-    pub(crate) fn from_chat(chat: tl::enums::Chat) -> Self {
+    fn _from_raw(chat: tl::enums::Chat) -> Self {
         use tl::enums::Chat as C;
 
         match chat {
@@ -205,6 +205,16 @@ impl Chat {
             }),
         }
     }
+
+    #[cfg(feature = "unstable_raw")]
+    pub fn from_raw(chat: tl::enums::Chat) -> Self {
+        Self::_from_raw(chat)
+    }
+
+    #[cfg(not(feature = "unstable_raw"))]
+    pub(crate) fn from_raw(chat: tl::enums::Chat) -> Self {
+        Self::_from_raw(chat)
+    }
 }
 
 impl From<Chat> for PackedChat {
diff --git a/lib/grammers-client/src/types/chat_map.rs b/lib/grammers-client/src/types/chat_map.rs
index a053d748..900ac97b 100644
--- a/lib/grammers-client/src/types/chat_map.rs
+++ b/lib/grammers-client/src/types/chat_map.rs
@@ -46,7 +46,7 @@ impl ChatMap {
             map: users
                 .into_iter()
                 .map(Chat::from_user)
-                .chain(chats.into_iter().map(Chat::from_chat))
+                .chain(chats.into_iter().map(Chat::from_raw))
                 .map(|chat| ((&chat.pack().to_peer()).into(), chat))
                 .collect(),
         })