diff --git a/src/database/permissions/channel.rs b/src/database/permissions/channel.rs
index e4f27d57ebcd1b39c91f102d930181e972ccfcaa..1ff0770204bd90ff2efce4ae2718d17c2a09799b 100644
--- a/src/database/permissions/channel.rs
+++ b/src/database/permissions/channel.rs
@@ -40,7 +40,7 @@ impl<'a> PermissionCalculator<'a> {
         match channel {
             Channel::SavedMessages { user: owner, .. } => {
                 if &self.perspective.id == owner {
-                    Ok(u32::MAX - ChannelPermission::VoiceCall as u32)
+                    Ok(u32::MAX)
                 } else {
                     Ok(0)
                 }
@@ -81,8 +81,14 @@ impl<'a> PermissionCalculator<'a> {
                     Ok(0)
                 }
             }
-            Channel::TextChannel { .. } => {
-                Ok(ChannelPermission::View + ChannelPermission::SendMessage)
+            Channel::TextChannel { server, .. } => {
+                let server = Server::get(server).await?;
+
+                if self.perspective.id == server.owner {
+                    Ok(u32::MAX)
+                } else {
+                    Ok(ChannelPermission::View + ChannelPermission::SendMessage)
+                }
             }
         }
     }
diff --git a/src/routes/channels/join_call.rs b/src/routes/channels/join_call.rs
index 02d0db842c2500378096c04469a9a5cf9c7f1c95..25b47839cd2954ee9d7eb1ab67b4b319673d00fe 100644
--- a/src/routes/channels/join_call.rs
+++ b/src/routes/channels/join_call.rs
@@ -17,6 +17,12 @@ pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
     }
 
     let target = target.fetch_channel().await?;
+    match target {
+        Channel::SavedMessages { .. }
+        | Channel::TextChannel { .. } => return Err(Error::CannotJoinCall),
+        _ => {}
+    }
+
     let perm = permissions::PermissionCalculator::new(&user)
         .with_channel(&target)
         .for_channel()
diff --git a/src/util/result.rs b/src/util/result.rs
index c00dca4af7725d696ecb1157da3a637fd94308b3..922245b8c94f806d8f235963657fe4a0c6229f10 100644
--- a/src/util/result.rs
+++ b/src/util/result.rs
@@ -27,6 +27,7 @@ pub enum Error {
     UnknownChannel,
     UnknownAttachment,
     CannotEditMessage,
+    CannotJoinCall,
     EmptyMessage,
     CannotRemoveYourself,
     GroupTooLarge {
@@ -77,6 +78,7 @@ impl<'r> Responder<'r, 'static> for Error {
             Error::UnknownChannel => Status::NotFound,
             Error::UnknownAttachment => Status::BadRequest,
             Error::CannotEditMessage => Status::Forbidden,
+            Error::CannotJoinCall => Status::BadRequest,
             Error::EmptyMessage => Status::UnprocessableEntity,
             Error::CannotRemoveYourself => Status::BadRequest,
             Error::GroupTooLarge { .. } => Status::Forbidden,