diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs
index 04238edc99dc0e1836b8d6cb38b0faf74c60bd8a..79463bb713fc3393af93bac57b3682c8e08e8b8e 100644
--- a/src/database/entities/message.rs
+++ b/src/database/entities/message.rs
@@ -30,6 +30,10 @@ pub enum SystemMessage {
     UserLeft { id: String },
     #[serde(rename = "channel_renamed")]
     ChannelRenamed { name: String, by: String },
+    #[serde(rename = "channel_description_changed")]
+    ChannelDescriptionChanged { by: String },
+    #[serde(rename = "channel_icon_changed")]
+    ChannelIconChanged { by: String },
 }
 
 #[derive(Serialize, Deserialize, Debug, Clone)]
diff --git a/src/database/permissions/channel.rs b/src/database/permissions/channel.rs
index c82fb2cee32659e9437481b654a3b1002fefd567..d58886b8a5535805cf34818307e59584382aff9d 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)
+                    Ok(u32::MAX - ChannelPermission::VoiceCall as u32)
                 } else {
                     Ok(0)
                 }
diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs
index 7c4f037cca2d353d5d2b9e8af3fb85bb7bcae28a..d032377f7a517cbe8155665eb19a1d6bad0f8236 100644
--- a/src/routes/channels/edit_channel.rs
+++ b/src/routes/channels/edit_channel.rs
@@ -111,7 +111,29 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
                 Message::create(
                     "00000000000000000000000000".to_string(),
                     id.clone(),
-                    Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id }),
+                    Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id.clone() }),
+                )
+                .publish(&target)
+                .await
+                .ok();
+            }
+
+            if let Some(_) = data.description {
+                Message::create(
+                    "00000000000000000000000000".to_string(),
+                    id.clone(),
+                    Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { by: user.id.clone() }),
+                )
+                .publish(&target)
+                .await
+                .ok();
+            }
+
+            if let Some(_) = data.icon {
+                Message::create(
+                    "00000000000000000000000000".to_string(),
+                    id.clone(),
+                    Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }),
                 )
                 .publish(&target)
                 .await