diff --git a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImpl.java
index 11ff634ce7..e36da9723a 100755
--- a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImpl.java
@@ -71,6 +71,7 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
     }
 
     @Override
+    @Transactional
     public Either<SchedulingError, FinalSeminar> schedule(Project project, LocalDateTime when, FinalSeminarDetails details) {
         if (project.isFinalSeminarRuleExempted()) {
             return createSeminar(project, when, details);
@@ -86,7 +87,14 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
             return Either.left(new RoughDraftNotApproved());
         }
 
-        return createSeminar(project, when, details);
+        final FinalSeminar current = findByProject(project);
+        if (current == null) {
+            return createSeminar(project, when, details);
+        }
+        else {
+            // Assume double click sends the same data so no need to change anything
+            return Either.right(current);
+        }
     }
 
     private MovingError validateSchedulingRules(LocalDate date) {
diff --git a/view/src/main/java/se/su/dsv/scipro/SciProApplication.java b/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
index fded3c3d5b..41c2fb5aec 100755
--- a/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
+++ b/view/src/main/java/se/su/dsv/scipro/SciProApplication.java
@@ -5,6 +5,7 @@ import org.apache.wicket.*;
 import org.apache.wicket.authorization.strategies.CompoundAuthorizationStrategy;
 import org.apache.wicket.csp.CSPDirective;
 import org.apache.wicket.csp.CSPDirectiveSrcValue;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.resource.JQueryResourceReference;
@@ -24,6 +25,7 @@ import se.su.dsv.scipro.checklists.AdminChecklistPage;
 import se.su.dsv.scipro.checklists.AdminEditChecklistTemplatePage;
 import se.su.dsv.scipro.checklists.ProjectViewChecklistPage;
 import se.su.dsv.scipro.checklists.SupervisorViewChecklistPage;
+import se.su.dsv.scipro.components.DisableSubmitButtonsOnSubmit;
 import se.su.dsv.scipro.examiner.pages.ExaminerStartPage;
 import se.su.dsv.scipro.finalseminar.*;
 import se.su.dsv.scipro.finalthesis.SupervisorFinalThesisListingPage;
@@ -157,6 +159,12 @@ public class SciProApplication extends LifecycleManagedWebApplication {
                 .add(CSPDirective.IMG_SRC, "data:");
 
         WicketWebjars.install(this);
+
+        getComponentInstantiationListeners().add(component -> {
+            if (component instanceof Form) {
+                component.add(new DisableSubmitButtonsOnSubmit());
+            }
+        });
     }
 
     private void mountForumPage() {
diff --git a/view/src/main/java/se/su/dsv/scipro/components/DisableSubmitButtonsOnSubmit.java b/view/src/main/java/se/su/dsv/scipro/components/DisableSubmitButtonsOnSubmit.java
new file mode 100644
index 0000000000..3a98b9e500
--- /dev/null
+++ b/view/src/main/java/se/su/dsv/scipro/components/DisableSubmitButtonsOnSubmit.java
@@ -0,0 +1,30 @@
+package se.su.dsv.scipro.components;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnEventHeaderItem;
+import org.apache.wicket.markup.html.form.Form;
+
+/**
+ * Disables all elements with {@code [type=submit]}
+ */
+public class DisableSubmitButtonsOnSubmit extends Behavior {
+    @Override
+    public void bind(Component component) {
+        super.bind(component);
+        if (!(component instanceof Form<?>)) {
+            throw new RuntimeException("Can only be used on Form components");
+        }
+    }
+
+    @Override
+    public void renderHead(Component component, IHeaderResponse response) {
+        super.renderHead(component, response);
+        final String javaScript = "const submitButtons = event.target.querySelectorAll(\"[type=submit]\");\n" +
+                                  "for (const button of submitButtons) {\n" +
+                                  "    button.disabled = true;\n" +
+                                  "}\n";
+        response.render(OnEventHeaderItem.forComponent(component, "submit", javaScript));
+    }
+}
\ No newline at end of file