diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/HttpErrorServlet.java b/src/main/java/no/nibio/vips/logic/controller/servlet/HttpErrorServlet.java
index a5412020d9fd70a41688c2ee69e8bf4a1b29e6ba..8fc80543ad2bf86191a8b77ea331b9948f905dfb 100755
--- a/src/main/java/no/nibio/vips/logic/controller/servlet/HttpErrorServlet.java
+++ b/src/main/java/no/nibio/vips/logic/controller/servlet/HttpErrorServlet.java
@@ -62,6 +62,10 @@ public class HttpErrorServlet extends HttpServlet {
         {
             request.getRequestDispatcher("/404.ftl").forward(request, response);
         }
+        else if(statusCode.equals(400))
+        {
+            request.getRequestDispatcher("/400.ftl").forward(request, response);
+        }
         else
         {
             request.getRequestDispatcher("/error_unknown.ftl").forward(request, response);
diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java
index 8ac185403ae0f889b69a6bd9b45df8321d6c25f5..d798eb42f14ef1797225bbc36328380b280cdd36 100644
--- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java
+++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java
@@ -228,4 +228,19 @@ public class BarkbeetleBean {
         });
         return kml;
     }
+    
+    public Boolean deleteSeasonTrapsite(Integer seasonTrapsiteId)
+    {
+        SeasonTrapsite stToDelete = em.find(SeasonTrapsite.class, seasonTrapsiteId);
+        if(stToDelete == null)
+        {
+            return false;
+        }
+        // Need to manually delete bivolt model calculations for this trap site
+        em.createNativeQuery("DELETE FROM barkbeetle.season_trapsite_bivolt WHERE season_trapsite_id = :seasonTrapsiteId")
+                .setParameter("seasonTrapsiteId", seasonTrapsiteId)
+                .executeUpdate();
+        em.remove(stToDelete);
+        return true;
+    }
 }
diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleController.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleController.java
index ccd032f8e4662994958f477fc04927cd0427904a..56c796ae9b6253ee05fa83ff4125c73a23a257bb 100644
--- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleController.java
+++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleController.java
@@ -32,6 +32,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 import java.util.stream.Collectors;
+import javax.ejb.EJBException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -82,6 +83,7 @@ public class BarkbeetleController extends HttpServlet {
                 Collections.sort(seasonTrapSites);
                 request.setAttribute("season", season);
                 request.setAttribute("seasonTrapsites", seasonTrapSites);
+                request.setAttribute("messageKey", request.getParameter("messageKey"));
                 request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl").forward(request, response);
             }
             else if(action.equals("editSeasonTrapsite"))
@@ -277,6 +279,62 @@ public class BarkbeetleController extends HttpServlet {
                     response.sendError(Response.Status.BAD_REQUEST.getStatusCode(),"Kan ikke registrere data, fordi fellelokalitet med id=" + request.getParameter("seasonTrapsiteId") + " ikke ble funnet.");
                 }
             }
+            // Only admins can do this
+            else if(action.equals("seasonTrapsiteDeleteForm"))
+            {
+                if(SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.BARKBEETLE_ADMIN, VipsLogicRole.SUPERUSER))
+                {
+                    SeasonTrapsite trapsite = request.getParameter("seasonTrapsiteId") != null ? 
+                        BarkbeetleBean.getInstance().getSeasonTrapsite(Integer.valueOf(request.getParameter("seasonTrapsiteId")))
+                        : null;
+                
+                    if(trapsite != null)
+                    {
+                        // Get any registrations
+                        request.setAttribute("seasonTrapsite", trapsite);
+                        // Display them
+                        
+                        request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteDeleteForm.ftl").forward(request, response);
+                    }
+                    else
+                    {
+                        response.sendError(404,"Den etterspurte fellelokaliteten finnes ikke i databasen"); // HTTP Forbidden
+                    }
+                }
+                else
+                {
+                    response.sendError(403,"Access not authorized"); // HTTP Forbidden
+                }
+            }
+            // Only admins can do this
+            else if(action.equals("seasonTrapsiteDelete"))
+            {
+                if(SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.BARKBEETLE_ADMIN, VipsLogicRole.SUPERUSER))
+                {
+                    try
+                    {
+                        if(BarkbeetleBean.getInstance().deleteSeasonTrapsite(Integer.valueOf(request.getParameter("seasonTrapsiteId"))))
+                        {
+                            response.sendRedirect(Globals.PROTOCOL + "://"
+                                    + ServletUtil.getServerName(request)
+                                    + "/barkbeetle?messageKey=deleteOK"
+                            );
+                        }
+                        else
+                        {
+                            response.sendError(404,"Den etterspurte fellelokaliteten finnes ikke i databasen. <a href='/barkbeetle'>Gå tilbake til listen over fellelokaliteter</a>."); // HTTP Not found
+                        }
+                    }
+                    catch(NumberFormatException ex)
+                    {
+                        response.sendError(400, "Feil med id for fellelokalitet. <a href='/barkbeetle'>Gå tilbake til listen over fellelokaliteter</a>."); // HTTP Bad request
+                    }
+                }
+                else
+                {
+                    response.sendError(403,"Access not authorized"); // HTTP Forbidden
+                }
+            }
         }
         else
         {
diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java
index 316145894830de3173783536e2d80a82a6568b94..fca1de2c5f183955bfc62829ab92c7b3aafaf96d 100644
--- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java
+++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java
@@ -120,7 +120,7 @@ public class SeasonTrapsite implements Serializable, Comparable {
     private Integer propertyNo;
     @Column(name = "property_section_no")
     private Integer propertySectionNo;
-    @OneToMany(cascade = CascadeType.MERGE, mappedBy = "seasonTrapsite", fetch = FetchType.EAGER)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "seasonTrapsite", fetch = FetchType.EAGER)
     private Collection<TrapsiteRegistration> trapsiteRegistrationCollection;
     @JoinColumn(name = "trapsite_type", referencedColumnName = "trapsite_type_id")
     @ManyToOne
diff --git a/src/main/java/no/nibio/vips/logic/util/Globals.java b/src/main/java/no/nibio/vips/logic/util/Globals.java
index fa4bac9ace1d6099154373f08c315db1d9ff6495..407c77c74eb97674895ff5478560f7455a69cf71 100755
--- a/src/main/java/no/nibio/vips/logic/util/Globals.java
+++ b/src/main/java/no/nibio/vips/logic/util/Globals.java
@@ -42,6 +42,7 @@ public class Globals {
         "/css",
         "/403",
         "/404",
+        "/400",
         "/rest",
         "/user",
         "/test/testlogin.jsp",
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 2b0f993a745b2a4b3046d9ad61aef23be41c9b72..39d9ae9147275900d44614c1ed5173d58df3d4a6 100755
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -123,11 +123,6 @@
         <servlet-name>ResourceBundleJSServlet</servlet-name>
         <url-pattern>/js/resourcebundle.js</url-pattern>
     </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>HttpErrorServlet</servlet-name>
-        <url-pattern>/error/404</url-pattern>
-        <url-pattern>/error/403</url-pattern>
-    </servlet-mapping>
     <servlet-mapping>
         <servlet-name>ForecastController</servlet-name>
         <url-pattern>/forecastConfiguration</url-pattern>
@@ -177,6 +172,12 @@
         <servlet-name>CorsProxyServlet</servlet-name>
         <url-pattern>/corsproxy/*</url-pattern>
     </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>HttpErrorServlet</servlet-name>
+        <url-pattern>/error/400</url-pattern>
+        <url-pattern>/error/404</url-pattern>
+        <url-pattern>/error/403</url-pattern>
+    </servlet-mapping>
     <welcome-file-list>
         <welcome-file>index.html</welcome-file>
     </welcome-file-list>
diff --git a/src/main/webapp/templates/400.ftl b/src/main/webapp/templates/400.ftl
new file mode 100644
index 0000000000000000000000000000000000000000..b4954ed2136e997dfa50ad98a40b23b8264346ed
--- /dev/null
+++ b/src/main/webapp/templates/400.ftl
@@ -0,0 +1,14 @@
+<#include "master.ftl">
+<#macro navbar_collapse>
+</#macro>
+<#macro page_head>
+        <title>ERROR 400</title>
+</#macro>
+<#macro page_contentwrap_start></#macro>
+<#macro page_contentwrap_end></#macro>
+<#macro page_contents>
+ <h1>ERROR 400 - bad request</h1>
+  <p>${message}</p>
+  <p><a href="/">To front page</a></p>
+</#macro>
+<@page_html/>
diff --git a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteDeleteForm.ftl b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteDeleteForm.ftl
new file mode 100644
index 0000000000000000000000000000000000000000..1769fd87e623c50d850d0175e339e4e53af6e452
--- /dev/null
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteDeleteForm.ftl
@@ -0,0 +1,47 @@
+<#--
+    Copyright (c) 2020 NIBIO <http://www.nibio.no/>. 
+  
+  This file is part of VIPSLogic.
+  VIPSLogic is free software: you can redistribute it and/or modify
+  it under the terms of the NIBIO Open Source License as published by 
+  NIBIO, either version 1 of the License, or (at your option) any
+  later version.
+  
+  VIPSLogic is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  NIBIO Open Source License for more details.
+  
+  You should have received a copy of the NIBIO Open Source License
+  along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
+	
+--><#include "../../master.ftl">
+<#macro page_head>
+	<title>Barkbilleregistrering: Slett fellelokalitet for ${seasonTrapsite.season}</title>
+</#macro>
+<#macro custom_js>
+	
+</#macro>
+<#macro custom_css>
+	
+</#macro>
+<#macro page_contents>
+	
+	<h1>Slett fellelokalitet for sesongen ${seasonTrapsite.season}</h1>
+	
+	
+	
+<div class="singleBlockContainer">
+	<div class="row">
+	<div class="col-md-12">
+		<h2>${seasonTrapsite.countyName}/${seasonTrapsite.municipalityName}</h2>
+		<p>Denne lokaliteten har <a href="/barkbeetle?action=registerData&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" target="new">${seasonTrapsite.trapsiteRegistrationCollection?size} registreringer</a></p>
+		<#if userIsAdmin && seasonTrapsite.seasonTrapsiteId?has_content>
+		  	<button type="button" class="btn btn-danger" onclick="window.location.href='/barkbeetle?action=seasonTrapsiteDelete&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';">Jeg er ved mine fulle fem. Slett!</button>
+		  	<button type="button" class="btn btn-primary" onclick="window.location.href='/barkbeetle?action=editSeasonTrapsite&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';">Avbryt</button>
+		  </#if>
+	</div>
+
+</div>
+</#macro>
+<@page_html/>
\ No newline at end of file
diff --git a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl
index 5ab1126e617f51a46aea67df370dcb4077fc63bd..fb448d739d87e3f3c9dcd5a3b48a1eb7c46353fc 100644
--- a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl
@@ -275,6 +275,9 @@
 				<span class="help-block" id="${formId}_installationRemarks_validation"></span>
 		  </div>
 		  <button type="submit" class="btn btn-default">Lagre</button>
+		  <#if userIsAdmin && seasonTrapsite.seasonTrapsiteId?has_content>
+		  	<button type="button" class="btn btn-danger" onclick="if(confirm('Ønsker du virkelig å slette?')){window.location.href='/barkbeetle?action=seasonTrapsiteDeleteForm&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';}">Slett</button>
+		  </#if>
 	</form>
 	</div>
 	<div class="col-md-4">
diff --git a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
index 31450f759690e15fa3930b45db6fd7af8a7fe890..3e6cb54f373d1787233062ff3d1c2d5ffcfa7b40 100644
--- a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
@@ -20,6 +20,9 @@
 	<title>Barkbilleregistrering: Fellelokaliteter for sesongen ${season}</title>
 </#macro>
 <#macro page_contents>
+<#if messageKey?has_content && messageKey=="deleteOK">
+		<div class="alert alert-success">Fellelokaliteten ble slettet</div>
+	</#if>
 <h1>Fellelokaliteter for sesongen ${season}</h1>
 <div class="row">
 	<div class="col-md-7">