diff --git a/src/modules/project/ProjectModule.vue b/src/modules/project/ProjectModule.vue
index ad174642c6e1f24a39fca5401c7c27c1e86cf6e0..4c37c6bb4a00dae935b0e2149e08d5fd125625bd 100644
--- a/src/modules/project/ProjectModule.vue
+++ b/src/modules/project/ProjectModule.vue
@@ -98,10 +98,6 @@ export default defineComponent({
       if (this.projectStore.roles === null) {
         this.projectStore.retrieveRoles();
       }
-      // Load Invitations for the project if not present
-      if (this.projectStore.currentInvitations === null) {
-        this.projectStore.retrieveInvitations(this.project);
-      }
     },
   },
 });
diff --git a/src/modules/project/pages/Members.vue b/src/modules/project/pages/Members.vue
index c942998064a1dc2a96388ee21ddc7c756cfa52ea..ea239bab55975e866c5c4dda7da3f0039e06127c 100644
--- a/src/modules/project/pages/Members.vue
+++ b/src/modules/project/pages/Members.vue
@@ -8,6 +8,7 @@
         :member-role="memberRole"
         :project="project"
         :roles="roles"
+        :is-owner="isOwner"
         @addUser="addUser"
         @prepareInvitation="prepareInvitation"
         @setFilter="setFilter"
@@ -31,6 +32,7 @@
                 :remove-text="$t('buttons.remove')"
                 :owner-count="ownerCount"
                 :owner-role="ownerRole"
+                :is-owner="isOwner"
                 @tableFilteredRows="onFilteredRows"
                 @setRole="setRole"
                 @selectedItem="prepareDeletion"
@@ -38,7 +40,10 @@
             </b-tab>
 
             <!-- Invited Users  -->
-            <b-tab :title="$t('page.members.externalUsersTabTitle')">
+            <b-tab
+              v-if="isOwner"
+              :title="$t('page.members.externalUsersTabTitle')"
+            >
               <MembersTable
                 id="invitationTable"
                 :headers="invitationHeaders"
@@ -271,6 +276,19 @@ export default defineComponent({
         },
       ];
     },
+    isOwner(): boolean | undefined {
+      return this.projectStore.currentUserRoleIsOwner;
+    },
+  },
+
+  created() {
+    // Load Invitations for the project if not present
+    if (
+      this.projectStore.currentInvitations === null &&
+      this.projectStore.currentUserRoleIsOwner
+    ) {
+      this.projectStore.retrieveInvitations(this.project);
+    }
   },
 
   methods: {
diff --git a/src/modules/project/pages/components/MembersTable.vue b/src/modules/project/pages/components/MembersTable.vue
index ae5037576f12a055b9bcb9b6b781069862d9311e..bb0fc214aad1d3021c0ac0f50732860aefa62c94 100644
--- a/src/modules/project/pages/components/MembersTable.vue
+++ b/src/modules/project/pages/components/MembersTable.vue
@@ -36,7 +36,7 @@
             v-model="row.item.role.id"
             :options="roles"
             :disabled="
-              ownerCount === 1 && ownerRole && row.item.role.id === ownerRole.id
+              (ownerCount === 1 && ownerRole && row.item.role.id === ownerRole.id) || !isOwner
             "
             text-field="displayName"
             value-field="id"
@@ -61,7 +61,7 @@
             variant="danger"
             size="sm"
             :disabled="
-              ownerCount === 1 && ownerRole && row.item.role.id === ownerRole.id
+              (ownerCount === 1 && ownerRole && row.item.role.id === ownerRole.id) || !isOwner
             "
             @click="deleteItem(row.item)"
             >{{ removeText }}</b-button
@@ -171,6 +171,10 @@ export default defineComponent({
       default: "user.surname",
       type: String,
     },
+    isOwner: {
+      default: false,
+      type: Boolean,
+    }
   },
   data() {
     return {
diff --git a/src/modules/project/pages/components/UserSearchRow.vue b/src/modules/project/pages/components/UserSearchRow.vue
index cef3bbf3183518e8eb51aea2ad0ec36076c2a0bb..4130a9b08edeed22cfbe4982f317e68b168a4455 100644
--- a/src/modules/project/pages/components/UserSearchRow.vue
+++ b/src/modules/project/pages/components/UserSearchRow.vue
@@ -12,6 +12,7 @@
                 adaptSelect: true,
                 'no-results': queriedUsers.length === 0,
               }"
+              :disabled="!isOwner"
               :options="queriedUsers"
               :filter-by="filterMock"
               :selectable="(option) => !option.hasProjectRole"
@@ -67,6 +68,7 @@
                   ? memberRole.id
                   : null
               "
+              :disabled="!isOwner"
               text-field="displayName"
               value-field="id"
               @input="setNewRole"
@@ -80,7 +82,7 @@
             <b-button
               v-if="validInvitation && !validSelection"
               name="inviteUserToProject"
-              :disabled="!validInvitation"
+              :disabled="!validInvitation || !isOwner"
               @click="prepareInvitation(newUserRole)"
               >{{ $t("buttons.invite") }}</b-button
             >
@@ -88,12 +90,13 @@
             <b-button
               v-else
               name="addUserToProject"
-              :disabled="!validSelection"
+              :disabled="!validSelection || !isOwner"
               @click="addUser(newUserRole)"
               >{{ $t("buttons.addUser") }}</b-button
             >
             <b-button
               name="importUser"
+              :disabled="!isOwner"
               @click="$bvModal.show('importUserModal')"
               >{{ $t("buttons.import") }}</b-button
             >
@@ -155,6 +158,10 @@ export default defineComponent({
       default: null,
       type: [Array, null] as PropType<RoleObject[] | null>,
     },
+    isOwner: {
+      default: false,
+      type: Boolean,
+    }
   },
   setup() {
     const userStore = useUserStore();
@@ -266,10 +273,8 @@ export default defineComponent({
     async fetchUserOptions(search: string, loading: (value: boolean) => void) {
       if (search && this.project && this.project.id) {
         loading(true);
-        this.queriedUsers = await this.userStore.getUser(
-          search,
-          this.project.id
-        );
+        this.queriedUsers =
+          (await this.userStore.getUser(search, this.project.id)) ?? [];
         loading(false);
         if (this.validEmail && this.queriedUsers.length == 0) {
           // Add unknown entry as an entry to the list (email address of user to invite)