diff --git a/lib/shift73k/shift_templates.ex b/lib/shift73k/shift_templates.ex
index c3079102..b5f7139a 100644
--- a/lib/shift73k/shift_templates.ex
+++ b/lib/shift73k/shift_templates.ex
@@ -22,7 +22,7 @@ defmodule Shift73k.ShiftTemplates do
   end
 
   def list_shift_templates_by_user_id(user_id) do
-    (from s in ShiftTemplate, where: s.user_id == ^user_id)
+    from(s in ShiftTemplate, where: s.user_id == ^user_id)
     |> Repo.all()
   end
 
@@ -42,6 +42,8 @@ defmodule Shift73k.ShiftTemplates do
   """
   def get_shift_template!(id), do: Repo.get!(ShiftTemplate, id)
 
+  def get_shift_template(id), do: Repo.get(ShiftTemplate, id)
+
   @doc """
   Creates a shift_template.
 
diff --git a/lib/shift73k_web/live/shift_template_live/delete_component.ex b/lib/shift73k_web/live/shift_template_live/delete_component.ex
new file mode 100644
index 00000000..47f62f73
--- /dev/null
+++ b/lib/shift73k_web/live/shift_template_live/delete_component.ex
@@ -0,0 +1,44 @@
+defmodule Shift73kWeb.ShiftTemplateLive.DeleteComponent do
+  use Shift73kWeb, :live_component
+
+  alias Shift73k.ShiftTemplates
+
+  @impl true
+  def update(assigns, socket) do
+    socket
+    |> assign(assigns)
+    |> live_okreply()
+  end
+
+  @impl true
+  def handle_event("cancel", _, socket) do
+    {:noreply, push_event(socket, "modal-please-hide", %{})}
+  end
+
+  @impl true
+  def handle_event("confirm", %{"id" => id, "subject" => subject}, socket) do
+    id
+    |> ShiftTemplates.get_shift_template()
+    |> ShiftTemplates.delete_shift_template()
+    |> case do
+      {:ok, _} ->
+        flash = {:info, "Shift template deleted successfully: \"#{subject}\""}
+        send(self(), {:put_flash_message, flash})
+
+        socket
+        |> push_event("modal-please-hide", %{})
+        |> live_noreply()
+
+      {:error, _} ->
+        flash =
+          {:error,
+           "Some error trying to delete shift template \"#{subject}\". Possibly already deleted? Reloading list..."}
+
+        send(self(), {:put_flash_message, flash})
+
+        socket
+        |> push_event("modal-please-hide", %{})
+        |> live_noreply()
+    end
+  end
+end
diff --git a/lib/shift73k_web/live/shift_template_live/delete_component.html.leex b/lib/shift73k_web/live/shift_template_live/delete_component.html.leex
new file mode 100644
index 00000000..8047f7c8
--- /dev/null
+++ b/lib/shift73k_web/live/shift_template_live/delete_component.html.leex
@@ -0,0 +1,23 @@
+<div class="modal-body">
+
+  Are you sure you want to delete "<%= @delete_shift_template.subject %>
+    (<%= @delete_shift_template.start_time |> Calendar.strftime("%I:%M%P") %>
+    &mdash;
+    <%=
+      @delete_shift_template.start_time
+      |> Time.add((60 * 60 * @delete_shift_template.length_hours) + ((@delete_shift_template.length_minutes || 0) * 60))
+      |> Calendar.strftime("%I:%M%P")
+      %>)"?
+
+</div>
+<div class="modal-footer">
+
+  <%= link "Cancel", to: "#", class: "btn me-2", phx_click: "cancel", phx_target: @myself %>
+  <%= link "Confirm Delete", to: "#",
+      class: "btn btn-danger",
+      phx_click: "confirm",
+      phx_target: @myself,
+      phx_value_id: @delete_shift_template.id,
+      phx_value_subject: @delete_shift_template.subject %>
+
+</div>
diff --git a/lib/shift73k_web/live/shift_template_live/index.ex b/lib/shift73k_web/live/shift_template_live/index.ex
index 65efc1cc..467afd4c 100644
--- a/lib/shift73k_web/live/shift_template_live/index.ex
+++ b/lib/shift73k_web/live/shift_template_live/index.ex
@@ -19,7 +19,6 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
     live_action = socket.assigns.live_action
     shift_template = shift_template_from_params(params)
 
-
     if Roles.can?(current_user, shift_template, live_action) do
       socket
       |> assign_shift_templates()
@@ -66,15 +65,19 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
 
   defp shift_template_from_params(_params), do: %ShiftTemplate{}
 
-
   @impl true
-  def handle_event("delete", %{"id" => id}, socket) do
-    shift_template = ShiftTemplates.get_shift_template!(id)
-    {:ok, _} = ShiftTemplates.delete_shift_template(shift_template)
-
-    {:noreply, assign_shift_templates(socket)}
+  def handle_event("delete-modal", %{"id" => id}, socket) do
+    {:noreply, assign(socket, :delete_shift_template, ShiftTemplates.get_shift_template!(id))}
   end
 
+  # @impl true
+  # def handle_event("delete", %{"id" => id}, socket) do
+  #   shift_template = ShiftTemplates.get_shift_template!(id)
+  #   {:ok, _} = ShiftTemplates.delete_shift_template(shift_template)
+
+  #   {:noreply, assign_shift_templates(socket)}
+  # end
+
   @impl true
   def handle_info({:close_modal, _}, %{assigns: %{modal_return_to: to}} = socket) do
     socket |> copy_flash() |> push_patch(to: to) |> live_noreply()
@@ -84,5 +87,4 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
   def handle_info({:put_flash_message, {flash_type, msg}}, socket) do
     socket |> put_flash(flash_type, msg) |> live_noreply()
   end
-
 end
diff --git a/lib/shift73k_web/live/shift_template_live/index.html.leex b/lib/shift73k_web/live/shift_template_live/index.html.leex
index a88400e2..22c4a554 100644
--- a/lib/shift73k_web/live/shift_template_live/index.html.leex
+++ b/lib/shift73k_web/live/shift_template_live/index.html.leex
@@ -7,6 +7,14 @@
     current_user: @current_user %>
 <% end %>
 
+<%= if @delete_shift_template do %>
+  <%= live_modal @socket, Shift73kWeb.ShiftTemplateLive.DeleteComponent,
+      id: @delete_shift_template.id,
+      title: "Delete Shift Template",
+      delete_shift_template: @delete_shift_template,
+      current_user: @current_user %>
+<% end %>
+
 
 <div class="row justify-content-start justify-content-sm-center">
   <div class="col-md-12 col-lg-10 col-xl-9">
@@ -83,22 +91,20 @@
                 </tbody>
               </table>
 
-              <div class="text-end">
-
-                <%= if Roles.can?(@current_user, shift, :delete) do %>
-                  <%= link to: "#", phx_click: "delete", phx_value_id: shift.id, data: [confirm: "Are you sure?"], class: "btn btn-outline-danger btn-sm text-nowrap" do %>
-                    <%= icon_div @socket, "bi-trash", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
-                    Delete
-                  <% end %>
+              <%= if Roles.can?(@current_user, shift, :edit) do %>
+                <%= live_patch to: Routes.shift_template_index_path(@socket, :edit, shift), class: "btn btn-primary btn-sm text-nowrap" do %>
+                  <%= icon_div @socket, "bi-pencil", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
+                  Edit
                 <% end %>
+              <% end %>
+
+              <%= if Roles.can?(@current_user, shift, :delete) do %>
+                <button class="btn btn-outline-danger btn-sm text-nowrap" phx-click="delete-modal" phx-value-id="<%= shift.id %>">
+                  <%= icon_div @socket, "bi-trash", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
+                  Delete
+                </button>
+              <% end %>
 
-                <%= if Roles.can?(@current_user, shift, :edit) do %>
-                  <%= live_patch to: Routes.shift_template_index_path(@socket, :edit, shift), class: "btn btn-primary btn-sm text-nowrap" do %>
-                    <%= icon_div @socket, "bi-pencil", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
-                    Edit
-                  <% end %>
-                <% end %>
-              </div>
             </div>
           </div>
 
@@ -108,41 +114,5 @@
 
     </div>
 
-
-
-    <div class="table-responsive">
-    <table class="table">
-      <thead>
-        <tr>
-          <th>Subject</th>
-          <th>Description</th>
-          <th>Location</th>
-          <th>Timezone</th>
-          <th>Start time</th>
-          <th>Length</th>
-
-          <th></th>
-        </tr>
-      </thead>
-      <tbody id="shift_templates">
-        <%= for shift <- @shift_templates do %>
-          <tr id="shift_template-<%= shift.id %>">
-            <td><%= shift.subject %></td>
-            <td><%= shift.description %></td>
-            <td><%= shift.location %></td>
-            <td><%= shift.timezone %></td>
-            <td><%= shift.start_time |> Calendar.strftime("%I:%M %p") %></td>
-            <td><%= shift.length_hours %>h <%= shift.length_minutes || 0 %>m</td>
-
-            <td>
-              <span><%= live_patch "Edit", to: Routes.shift_template_index_path(@socket, :edit, shift) %></span>
-              <span><%= link "Delete", to: "#", phx_click: "delete", phx_value_id: shift.id, data: [confirm: "Are you sure?"] %></span>
-            </td>
-          </tr>
-        <% end %>
-      </tbody>
-    </table>
-    </div>
-
   </div>
 </div>
diff --git a/lib/shift73k_web/live/user_management/index.ex b/lib/shift73k_web/live/user_management/index.ex
index 1b92e9b4..782c7cc4 100644
--- a/lib/shift73k_web/live/user_management/index.ex
+++ b/lib/shift73k_web/live/user_management/index.ex
@@ -97,7 +97,7 @@ defmodule Shift73kWeb.UserManagementLive.Index do
 
   @impl true
   def handle_event("delete-modal", %{"id" => id}, socket) do
-    {:noreply, assign(socket, :delete_user, Accounts.get_user(id))}
+    {:noreply, assign(socket, :delete_user, Accounts.get_user!(id))}
   end
 
   @impl true
diff --git a/lib/shift73k_web/live/user_management/index.html.leex b/lib/shift73k_web/live/user_management/index.html.leex
index 8861fc1a..714346b2 100644
--- a/lib/shift73k_web/live/user_management/index.html.leex
+++ b/lib/shift73k_web/live/user_management/index.html.leex
@@ -94,7 +94,7 @@
           </dl>
 
           <%= if Roles.can?(@current_user, user, :edit) do %>
-            <%= live_patch to: Routes.user_management_index_path(@socket, :edit, user.id, Enum.into(@query, [])), class: "btn btn-outline-primary btn-sm text-nowrap" do %>
+            <%= live_patch to: Routes.user_management_index_path(@socket, :edit, user.id, Enum.into(@query, [])), class: "btn btn-primary btn-sm text-nowrap" do %>
               <%= icon_div @socket, "bi-pencil", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
               Edit
             <% end %>