diff --git a/src/backoffice/templates/backoffice/assembly-confirm_delete.html b/src/backoffice/templates/backoffice/assembly-confirm_delete.html
new file mode 100644
index 0000000000000000000000000000000000000000..b444e2bdff072b290a0a5dd6e300e83d107e177f
--- /dev/null
+++ b/src/backoffice/templates/backoffice/assembly-confirm_delete.html
@@ -0,0 +1,29 @@
+{% extends 'backoffice/base.html' %}
+{% load bootstrap4 %}
+{% load humanize %}
+{% load i18n %}
+
+{% block content %}
+
+<h1>{% trans 'Assembly' %} {{ object.id }}</h1>
+
+<div class="card mb-3">
+    <div class="card-header">Assembly <code>{{ object.assembly_id }}</code></div>
+  <div class="card-body">
+    <p>Slug: <strong>{{ object.slug }}</strong></p>
+    <p>Name: <strong>{{ object.name }}</strong></p>
+  </div>
+</div>
+
+<div class="card mb-3 border-danger">
+  <div class="card-header bg-danger text-white">CONFIRM</div>
+  <div class="card-body">
+    <form method="POST" action="{% url 'backoffice:assembly-delete' pk=object.id %}">
+      {% csrf_token %}
+        <button type="submit" class="btn btn-danger">yes, nuke it</button>
+        <a href="{% url 'backoffice:assembly' pk=object.id %}" class="btn btn-outline-primary">no, back to safety</a>
+    </form>
+  </div>
+</div>
+
+{% endblock %}
diff --git a/src/backoffice/templates/backoffice/index.html b/src/backoffice/templates/backoffice/index.html
index 47e05f8eab3c64e93e9a3f47fe2134c69d773b38..ac96f820fee4a6f0876de7f1b4a65cab3286276f 100644
--- a/src/backoffice/templates/backoffice/index.html
+++ b/src/backoffice/templates/backoffice/index.html
@@ -21,6 +21,7 @@
     		<tr>
     			<th>{% trans "assembly_name" %}</th>
     			<th>{% trans "assembly_state" %}</th>
+          <th>&nbsp;</th>
     		</tr>
     	</thead>
     	<tbody>
@@ -31,9 +32,14 @@
                     {{ assembly.get_state_assembly_display }}
                     {% if assembly.state_assembly == 'planned' %}<span class="text-danger font-weight-bold" title="{% trans "Assembly__state_assembly-planned__hint" %}">⚠</span>{% endif %}
                 </td>
+                <td>
+                  {% if assembly.state_assembly == 'planned' %}
+                  <a class="btn btn-sm btn-danger" href="{% url 'backoffice:assembly-delete' pk=assembly.pk %}">{% trans 'Delete' %}</a>
+                  {% endif %}
+                </td>
     		</tr>
     	{% empty %}
-    	  <tr><td colspan="2">:-(</td></tr>
+    	  <tr><td colspan="3">:-(</td></tr>
     	{% endfor %}
     	</tbody>
     </table>
diff --git a/src/backoffice/urls.py b/src/backoffice/urls.py
index 039086b4d61c67d1adbf353b7fab7db6c65c7907..0fe90766e19161506a06a635e54f389d360b1b11 100644
--- a/src/backoffice/urls.py
+++ b/src/backoffice/urls.py
@@ -62,6 +62,7 @@ urlpatterns = [
     path('assembly/<uuid:pk>/members/add', assemblies.MembersAddView.as_view(), name='assembly-members-add'),
     path('assembly/<uuid:pk>/members/edit/<str:uname>', assemblies.MembersEditView.as_view(), name='assembly-members-edit'),
     path('assembly/<uuid:pk>/vouchers', assemblies.VouchersView.as_view(), name='assembly-vouchers'),
+    path('assembly/<uuid:pk>/delete', assemblies.AssemblyDeleteView.as_view(), name='assembly-delete'),
 
     path('assembly/<uuid:assembly>/auth', assemblies.AuthView.as_view(), name='assembly-auth'),
     path('assembly/<uuid:assembly>/auth/app/<int:pk>', assemblies.AuthAppView.as_view(), name='assembly-auth-app'),
diff --git a/src/backoffice/views/assemblies.py b/src/backoffice/views/assemblies.py
index 01399aada915890c2047d23b9eabff03fafd55de..f9eb25e76ef2bd4a99a67c93a1d0985d7d0f590b 100644
--- a/src/backoffice/views/assemblies.py
+++ b/src/backoffice/views/assemblies.py
@@ -487,6 +487,19 @@ class AssemblyView(AssemblyMixin, TemplateView):
     require_conference = True
     template_name = 'backoffice/assembly_detail.html'
 
+class AssemblyDeleteView(AssemblyMixin, DeleteView):
+    assembly_management = True
+    model = Assembly
+    template_name = 'backoffice/assembly-confirm_delete.html'
+
+    def get_object(self, *args, **kwargs):
+        obj = super().get_object(*args, **kwargs)
+        if obj.state_assembly != Assembly.State.PLANNED:
+            raise PermissionDenied()
+        return obj
+
+    def get_success_url(self, *args, **kwargs):
+        return reverse('backoffice:index')
 
 class AssemblyRoomView(AssemblyMixin, UpdateView):
     model = Room