diff --git a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java
index 57cb619100..07d1198d67 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumService.java
@@ -32,5 +32,10 @@ public interface BasicForumService extends Serializable {
 
     boolean canDelete(ForumPost forumPost);
 
-    void deletePost(ForumPost post);
+    Deletion deletePost(ForumPost post);
+
+    enum Deletion {
+        SINGLE_POST,
+        ENTIRE_THREAD,
+    }
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java
index ed3da2c4a0..a3760aaa8f 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/BasicForumServiceImpl.java
@@ -185,15 +185,17 @@ public class BasicForumServiceImpl implements BasicForumService {
 
     @Override
     @Transactional
-    public void deletePost(ForumPost post) {
+    public Deletion deletePost(ForumPost post) {
         if (!canDelete(post)) {
             throw new PostCantBeDeletedException();
         }
         if (isInitialPost(post)) {
             threadRepository.delete(post.getForumThread());
+            return Deletion.ENTIRE_THREAD;
         } else {
             post.setDeleted(true);
             postRepository.save(post);
+            return Deletion.SINGLE_POST;
         }
     }
 
diff --git a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
index a6ac11ebcd..9269f37f49 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumService.java
@@ -24,4 +24,8 @@ public interface ProjectForumService {
     List<Pair<ProjectThread, ForumPost>> latestPost(Project a, int amount);
 
     long getUnreadThreadsCount(Project project, User user);
+
+    boolean canDelete(ProjectThread projectThread, ForumPost forumPost);
+
+    void deletePost(ProjectThread projectThread, ForumPost forumPost);
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
index 0c6b65227f..5850bffdc0 100644
--- a/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/forum/ProjectForumServiceImpl.java
@@ -121,6 +121,20 @@ public class ProjectForumServiceImpl implements ProjectForumService {
         return basicForumService.countUnreadThreads(list, user);
     }
 
+    @Override
+    public boolean canDelete(ProjectThread projectThread, ForumPost forumPost) {
+        return basicForumService.canDelete(forumPost);
+    }
+
+    @Override
+    @Transactional
+    public void deletePost(ProjectThread projectThread, ForumPost forumPost) {
+        BasicForumService.Deletion deletion = basicForumService.deletePost(forumPost);
+        if (deletion == BasicForumService.Deletion.ENTIRE_THREAD) {
+            projectThreadRepository.delete(projectThread);
+        }
+    }
+
     @Override
     public ProjectThread findOne(long threadId) {
         return projectThreadRepository.findOne(threadId);
diff --git a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java
index 3c35391a5f..d1726b6295 100644
--- a/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/forum/BasicForumServiceIntegrationTest.java
@@ -5,6 +5,7 @@ import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.hasItem;
 import static org.hamcrest.Matchers.not;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -57,7 +58,10 @@ public class BasicForumServiceIntegrationTest extends IntegrationTest {
         setLoggedInAs(commenter);
 
         assertTrue(basicForumService.canDelete(reply));
-        assertDoesNotThrow(() -> basicForumService.deletePost(reply));
+        assertDoesNotThrow(() -> {
+            BasicForumService.Deletion deletion = basicForumService.deletePost(reply);
+            assertEquals(BasicForumService.Deletion.SINGLE_POST, deletion);
+        });
     }
 
     @Test
@@ -204,7 +208,8 @@ public class BasicForumServiceIntegrationTest extends IntegrationTest {
 
         setLoggedInAs(op);
 
-        basicForumService.deletePost(post);
+        BasicForumService.Deletion deletion = basicForumService.deletePost(post);
+        assertEquals(BasicForumService.Deletion.ENTIRE_THREAD, deletion);
 
         ForumThread threadById = basicForumService.findThreadById(thread.getId());
         assertNull(threadById, "Thread was not deleted");
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/ForumThread.java b/view/src/main/java/se/su/dsv/scipro/forum/ForumThread.java
index d291c15e25..a7a321d3d3 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/ForumThread.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/ForumThread.java
@@ -10,4 +10,10 @@ public interface ForumThread<A> extends IClusterable {
     ForumPost reply(A a, User poster, String content, Set<Attachment> attachments);
     String getSubject(A a);
     void setRead(User user, A a);
+
+    default boolean canDelete(A a, ForumPost forumPost) {
+        return false;
+    }
+
+    default void deletePost(A a, ForumPost forumPost) {}
 }
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ForumPostPanel.java b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ForumPostPanel.java
index 225240d8e1..3b03413500 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ForumPostPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ForumPostPanel.java
@@ -1,6 +1,5 @@
 package se.su.dsv.scipro.forum.panels.threaded;
 
-import jakarta.inject.Inject;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.link.Link;
@@ -13,11 +12,9 @@ import se.su.dsv.scipro.components.ListAdapterModel;
 import se.su.dsv.scipro.components.SmarterLinkMultiLineLabel;
 import se.su.dsv.scipro.data.enums.DateStyle;
 import se.su.dsv.scipro.file.FileReference;
-import se.su.dsv.scipro.forum.BasicForumService;
 import se.su.dsv.scipro.forum.dataobjects.ForumPost;
 import se.su.dsv.scipro.profile.UserLinkPanel;
 import se.su.dsv.scipro.repository.panels.ViewAttachmentPanel;
-import se.su.dsv.scipro.session.SciProSession;
 
 public class ForumPostPanel extends Panel {
 
@@ -26,9 +23,6 @@ public class ForumPostPanel extends Panel {
     public static final String CONTENT = "content";
     public static final String ATTACHMENT = "attachment";
 
-    @Inject
-    private BasicForumService basicForumService;
-
     public ForumPostPanel(String id, final IModel<ForumPost> model) {
         super(id);
         add(new UserLinkPanel(POSTED_BY, LambdaModel.of(model, ForumPost::getPostedBy, ForumPost::setPostedBy)));
@@ -75,22 +69,23 @@ public class ForumPostPanel extends Panel {
                 @Override
                 public void onClick() {
                     ForumPost post = getModelObject();
-                    basicForumService.deletePost(post);
-                    onPostDeleted();
+                    deletePost(post).run();
                 }
 
                 @Override
                 protected void onConfigure() {
                     super.onConfigure();
-                    setVisible(allowDeletion() && basicForumService.canDelete(getModelObject()));
+                    setVisible(deletePost(getModelObject()) != null);
                 }
             }
         );
     }
 
-    protected boolean allowDeletion() {
-        return false;
+    /**
+     * @param forumPost the post to delete
+     * @return a runnable that deletes the post, or {@code null} if it can not be deleted
+     */
+    protected Runnable deletePost(ForumPost forumPost) {
+        return null;
     }
-
-    protected void onPostDeleted() {}
 }
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ProjectForumThread.java b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ProjectForumThread.java
index f8239b1732..bcb4bb3449 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ProjectForumThread.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ProjectForumThread.java
@@ -40,4 +40,14 @@ public class ProjectForumThread implements ForumThread<ProjectThread> {
     public void setRead(User user, ProjectThread thread) {
         projectForumService.markRead(user, thread);
     }
+
+    @Override
+    public boolean canDelete(ProjectThread projectThread, ForumPost forumPost) {
+        return projectForumService.canDelete(projectThread, forumPost);
+    }
+
+    @Override
+    public void deletePost(ProjectThread projectThread, ForumPost forumPost) {
+        projectForumService.deletePost(projectThread, forumPost);
+    }
 }
diff --git a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ViewForumThreadPanel.java b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ViewForumThreadPanel.java
index 06b89d7e14..1550ff6310 100644
--- a/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ViewForumThreadPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/forum/panels/threaded/ViewForumThreadPanel.java
@@ -62,14 +62,16 @@ public class ViewForumThreadPanel<A> extends GenericPanel<A> {
                     item.add(
                         new ForumPostPanel(POST, item.getModel()) {
                             @Override
-                            protected boolean allowDeletion() {
-                                return true;
-                            }
-
-                            @Override
-                            protected void onPostDeleted() {
-                                // Refresh the list of posts
-                                listView.detach();
+                            protected Runnable deletePost(ForumPost forumPost) {
+                                if (forumThread.canDelete(ViewForumThreadPanel.this.getModelObject(), forumPost)) {
+                                    return () -> {
+                                        forumThread.deletePost(ViewForumThreadPanel.this.getModelObject(), forumPost);
+                                        // Refresh the list of posts
+                                        listView.detach();
+                                    };
+                                } else {
+                                    return null;
+                                }
                             }
                         }
                     );