diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs
index 778c02481a9199664ba8b73ea5e78ffd76533a6f..26f6b77bbc8503e527069314de97afcfdaf5cc7b 100644
--- a/src/database/entities/user.rs
+++ b/src/database/entities/user.rs
@@ -36,6 +36,24 @@ pub struct User {
 }
 
 impl User {
+    /// Mutate the user object to include relationship as seen by user.
+    pub fn from(mut self, user: &User) -> User {
+        if self.id == user.id {
+            self.relationship = Some(RelationshipStatus::User);
+            return self;
+        }
+
+        if let Some(relations) = &user.relations {
+            if let Some(relationship) = relations.iter().find(|x| self.id == x.id) {
+                self.relationship = Some(relationship.status.clone());
+                return self;
+            }
+        }
+
+        self
+    }
+
+    /// Mutate the user object to appear as seen by user.
     pub fn with(mut self, permissions: UserPermissions<[u32; 1]>) -> User {
         if !permissions.get_view_all() {
             self.relations = None;
diff --git a/src/notifications/payload.rs b/src/notifications/payload.rs
index c81b958ee011b0a89373965726d736e10314b030..b9570dc3429e3ea5f5b03a27704bb65392be43ea 100644
--- a/src/notifications/payload.rs
+++ b/src/notifications/payload.rs
@@ -65,6 +65,7 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> {
         }
     }
 
+    user_ids.remove(&user.id);
     if user_ids.len() > 0 {
         let mut cursor = get_collection("users")
             .find(
@@ -85,33 +86,27 @@ pub async fn generate_ready(mut user: User) -> Result<ClientboundNotification> {
 
         while let Some(result) = cursor.next().await {
             if let Ok(doc) = result {
-                let mut other: User = from_document(doc).map_err(|_| Error::DatabaseError {
+                let other: User = from_document(doc).map_err(|_| Error::DatabaseError {
                     operation: "from_document",
                     with: "user",
                 })?;
 
-                if let Some(relationships) = &user.relations {
-                    other.relationship = Some(
-                        if let Some(relationship) = relationships.iter().find(|x| other.id == x.id)
-                        {
-                            relationship.status.clone()
-                        } else {
-                            RelationshipStatus::None
-                        },
-                    );
-                }
-
                 let permissions = PermissionCalculator::new(&user)
                     .with_mutual_connection()
                     .with_user(&other)
                     .for_user_given()
                     .await?;
 
-                users.push(other.with(permissions));
+                users.push(
+                    other
+                        .from(&user)
+                        .with(permissions)
+                );
             }
         }
     }
 
+    user.relationship = Some(RelationshipStatus::User);
     user.online = Some(true);
     users.push(user);
 
diff --git a/src/routes/users/fetch_user.rs b/src/routes/users/fetch_user.rs
index f2731f88046c85819d5db761b6570bc8e1aa6978..0ca10a4c5d3265d1b108075a911d11fe29ea4484 100644
--- a/src/routes/users/fetch_user.rs
+++ b/src/routes/users/fetch_user.rs
@@ -5,7 +5,7 @@ use rocket_contrib::json::JsonValue;
 
 #[get("/<target>")]
 pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
-    let mut target = target.fetch_user().await?;
+    let target = target.fetch_user().await?;
 
     let perm = permissions::PermissionCalculator::new(&user)
         .with_user(&target)
@@ -16,19 +16,9 @@ pub async fn req(user: User, target: Ref) -> Result<JsonValue> {
         Err(Error::LabelMe)?
     }
 
-    if user.id != target.id {
-        if let Some(relationships) = &user.relations {
-            target.relationship = relationships
-                .iter()
-                .find(|x| x.id == user.id)
-                .map(|x| x.status.clone())
-                .or_else(|| Some(RelationshipStatus::None));
-        } else {
-            target.relationship = Some(RelationshipStatus::None);
-        }
-    } else {
-        target.relationship = Some(RelationshipStatus::User);
-    }
-
-    Ok(json!(target.with(perm)))
+    Ok(json!(
+        target
+            .from(&user)
+            .with(perm)
+    ))
 }