diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java
index 2117a3f0852c531c38b620a6208ee3f59ec6f5b9..f829adbef049020735e1c595390dd289eab2d645 100755
--- a/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java
+++ b/src/main/java/no/nibio/vips/logic/controller/servlet/PointOfInterestController.java
@@ -51,6 +51,7 @@ import no.nibio.vips.util.ServletUtil;
 import no.nibio.vips.logic.entity.WeatherForecastProvider;
 import no.nibio.vips.logic.i18n.SessionLocaleUtil;
 import no.nibio.vips.gis.GISUtil;
+import no.nibio.vips.logic.entity.Observation;
 import no.nibio.vips.logic.entity.PointOfInterestType;
 import no.nibio.vips.logic.entity.PointOfInterestTypeFarm;
 import no.nibio.vips.logic.entity.PointOfInterestTypeField;
@@ -780,10 +781,10 @@ public class PointOfInterestController extends HttpServlet {
                         List<ForecastConfiguration> forecastConfigurations = SessionControllerGetter.getForecastBean().getForecastConfigurationsByLocation(poi);
                         
                         // TODO: Are there observations attached to this location?
-                        
+                        List<Observation> observations = SessionControllerGetter.getObservationBean().getObservationsByLocation(poi);
                         // 
                         // If no strings attached, delete immediately
-                        if(forecastConfigurations.isEmpty())
+                        if(forecastConfigurations.isEmpty() && observations.isEmpty())
                         {
                             response.sendRedirect(new StringBuilder(Globals.PROTOCOL + "://")
                                 .append(ServletUtil.getServerName(request))
@@ -798,6 +799,7 @@ public class PointOfInterestController extends HttpServlet {
                             request.setAttribute("poi", poi);
                             request.setAttribute("forecastConfigurations", forecastConfigurations);
                             // TODO Set observations
+                            request.setAttribute("observations", observations);
                             request.setAttribute("modelInformation", modelInformationMap);
                             request.getRequestDispatcher("/poiDeletePreview.ftl").forward(request, response);
                         }
diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java
index 0d9baaa5d081598562f8adb41c7b198325b68777..c7cb8912884ce0f4898d2974c5260e10deb53089 100755
--- a/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/ForecastBean.java
@@ -415,7 +415,7 @@ public class ForecastBean {
      * Deletes all forecasts and results from the given weather station
      * @param weatherStation 
      */
-    public void deleteForecastConfigurations(PointOfInterestWeatherStation weatherStation)
+    public void deleteForecastConfigurationsForWeatherStation(PointOfInterestWeatherStation weatherStation)
     {
         List<ForecastConfiguration> forecastConfigurations = this.getForecastConfigurationsByWeatherStation(weatherStation);
         for(ForecastConfiguration forecastConfiguration:forecastConfigurations)
@@ -427,6 +427,22 @@ public class ForecastBean {
         }
     }
     
+    /**
+     * Deletes all forecasts and results from the given location
+     * @param weatherStation 
+     */
+    public void deleteForecastConfigurationsForLocation(PointOfInterest location)
+    {
+        List<ForecastConfiguration> forecastConfigurations = this.getForecastConfigurationsByLocation(location);
+        for(ForecastConfiguration forecastConfiguration:forecastConfigurations)
+        {
+            em.createNativeQuery("DELETE FROM forecast_result WHERE forecast_configuration_id=:forecastConfigurationId")
+                    .setParameter("forecastConfigurationId", forecastConfiguration.getForecastConfigurationId())
+                    .executeUpdate();
+            em.remove(forecastConfiguration);
+        }
+    }
+    
     /**
      * Fetches one specific forecast configuration
      * @param forecastConfigurationId
@@ -1230,4 +1246,5 @@ public class ForecastBean {
                 .setParameter("year", year)
                 .getResultList();
     }
+
 }
diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
index 253d85b352e8efa899724c0fdc88e187ffe75bec..0dd526fecccc7521f3358f8a9d217bfb0ee92934 100755
--- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java
@@ -25,14 +25,12 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
-import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TimeZone;
 import java.util.stream.Collectors;
 import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
@@ -60,7 +58,7 @@ import org.wololo.geojson.FeatureCollection;
 import org.wololo.geojson.GeoJSONFactory;
 
 /**
- * @copyright 2014-2018 <a href="http://www.nibio.no/">NIBIO</a>
+ * @copyright 2014-2020 <a href="http://www.nibio.no/">NIBIO</a>
  * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
  */
 @Stateless
@@ -749,4 +747,21 @@ public class ObservationBean {
                 .getResultList();
     }
 
+    public List<Observation> getObservationsByLocation(PointOfInterest poi) {
+        return em.createNativeQuery("SELECT * FROM Observation WHERE location_point_of_interest_id=:locationPointOfInterestId", Observation.class)
+                .setParameter("locationPointOfInterestId", poi.getPointOfInterestId())
+                .getResultList();
+    }
+
+    /**
+     * Part of the cleaning up dependencies procedure for when deleting a POI
+     * @param poi 
+     */
+    public void deleteObservationsForLocation(PointOfInterest poi) {
+        em.createNamedQuery("Observation.findByLocationPointOfInterestId", Observation.class)
+                .setParameter("locationPointOfInterestId", poi.getPointOfInterestId())
+                .getResultList().stream()
+                .forEach(obs -> em.remove(obs));
+    }
+
 }
diff --git a/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java b/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java
index bfbc6407725ca57d603602708f090dc74e882f72..3d83a3b3161151017d5617305c626be38275e9f6 100755
--- a/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/PointOfInterestBean.java
@@ -324,7 +324,7 @@ public class PointOfInterestBean {
     public void deleteWeatherStation(Integer pointOfInterestId)
     {
         PointOfInterestWeatherStation weatherStation = em.find(PointOfInterestWeatherStation.class, pointOfInterestId);
-        SessionControllerGetter.getForecastBean().deleteForecastConfigurations(weatherStation);
+        SessionControllerGetter.getForecastBean().deleteForecastConfigurationsForWeatherStation(weatherStation);
         em.remove(weatherStation);
     }
 
@@ -359,7 +359,10 @@ public class PointOfInterestBean {
     }
 
     public void deletePoi(Integer pointOfInterestId) {
-        em.remove(em.find(PointOfInterest.class, pointOfInterestId));
+        PointOfInterest poi = em.find(PointOfInterest.class, pointOfInterestId);
+        SessionControllerGetter.getForecastBean().deleteForecastConfigurationsForLocation(poi);
+        SessionControllerGetter.getObservationBean().deleteObservationsForLocation(poi);
+        em.remove(poi);
     }
 
     public List<PointOfInterest> getRelevantPointOfInterestsForUser(VipsLogicUser user) {
diff --git a/src/main/java/no/nibio/vips/logic/entity/Observation.java b/src/main/java/no/nibio/vips/logic/entity/Observation.java
index 321dfbc3c0a652ff564c95b4651f7b11a7e977d9..594d19751645e761dab01d4746f07074c67cd0c2 100755
--- a/src/main/java/no/nibio/vips/logic/entity/Observation.java
+++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java
@@ -67,6 +67,7 @@ import org.hibernate.annotations.TypeDefs;
     @NamedQuery(name = "Observation.findByObservationId", query = "SELECT o FROM Observation o WHERE o.observationId = :observationId"),
     @NamedQuery(name = "Observation.findByUserId", query = "SELECT o FROM Observation o WHERE o.userId IN(:userId)"),
     @NamedQuery(name = "Observation.findByLastEditedBy", query = "SELECT o FROM Observation o WHERE o.lastEditedBy IN(:lastEditedBy)"),
+    @NamedQuery(name = "Observation.findByLocationPointOfInterestId", query = "SELECT o FROM Observation o WHERE o.locationPointOfInterestId = :locationPointOfInterestId"),
     @NamedQuery(name = "Observation.findByStatusChangedByUserId", query = "SELECT o FROM Observation o WHERE o.statusChangedByUserId IN(:statusChangedByUserId)"),
     @NamedQuery(name = "Observation.findByUserIdAndPeriod", query = "SELECT o FROM Observation o WHERE o.timeOfObservation BETWEEN :start AND :end AND o.userId IN(:userId)"),
     @NamedQuery(name = "Observation.findByUserIdAndStatusTypeId", query = "SELECT o FROM Observation o WHERE o.userId IN(:userId) AND o.statusTypeId= :statusTypeId"),
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
index a5a49fdfc7556c35d74c721469844f51b90c83df..37f6cb51a729d50eb3bbd296c354d66e619ad6fe 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
@@ -488,3 +488,5 @@ task_RunForecastConfigurationsByIdTask_description=Run all forecast configuratio
 forecastConfigurationIds=Forecast configuration ids
 locationIsPublic=Location is public
 maskObservationWith=Mask observation with
+deletePoi=Delete point of interest
+deletePoiPreviewExplanation=The point of interest that you want to delete has the resources below connected to it. When you delete the POI, you also delete these resources.
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
index c8cb25b416518741df79254f424779b7f5965411..53cb3d7d4bad5ce955e41cf5be4a285e5c9badeb 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
@@ -488,3 +488,5 @@ task_RunForecastConfigurationsByIdTask_description=Run all forecast configuratio
 forecastConfigurationIds=Forecast configuration ids
 locationIsPublic=Location is public
 maskObservationWith=Mask observation with
+deletePoi=Delete point of interest
+deletePoiPreviewExplanation=
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
index 74aeaeba73b58dc02b42a5209d11906c8d370532..2ec31284a14ffe5f3d3077a1236159d0f4c9ebcc 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
@@ -487,3 +487,5 @@ task_RunForecastConfigurationsByIdTask_description=Run all forecast configuratio
 forecastConfigurationIds=Forecast configuration ids
 locationIsPublic=Location is public
 maskObservationWith=Mask observation with
+deletePoi=Delete point of interest
+deletePoiPreviewExplanation=
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
index 7ce392cd66f0fd1870f82cf39e95c0507269a0a8..a287d25dfb13e98e0de96eb7a9850d97cb45a111 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties
@@ -488,3 +488,5 @@ task_RunForecastConfigurationsByIdTask_description=Kj\u00f8r alle varlser som ko
 forecastConfigurationIds=Varseloppsett (id'er)
 locationIsPublic=Lokaliteten kan vises offentlig
 maskObservationWith=Masker observasjonen med
+deletePoi=Slett sted
+deletePoiPreviewExplanation=Stedet du \u00f8nsker \u00e5 slette har knyttet til seg de ressursene som er nevnt nedenfor. N\u00e5r du sletter stedet, vil ogs\u00e5 disse ressursene bli slettet.
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
index 6825f3fc5371cd006e62948073816237706412dc..42d27b048f77754edf471e80804098813aeab032 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
@@ -488,3 +488,5 @@ task_RunForecastConfigurationsByIdTask_description=Run all forecast configuratio
 forecastConfigurationIds=Forecast configuration ids
 locationIsPublic=Location is public
 maskObservationWith=Mask observation with
+deletePoi=Delete point of interest
+deletePoiPreviewExplanation=
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
index e84487e09c973081d1ad1f79cc6d4646f5958d34..66f1011fec6990220ed23fb980ca76ebc33abb42 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
@@ -485,3 +485,5 @@ task_RunForecastConfigurationsByIdTask_description=Run all forecast configuratio
 forecastConfigurationIds=Forecast configuration ids
 locationIsPublic=Location is public
 maskObservationWith=Mask observation with
+deletePoi=Delete point of interest
+deletePoiPreviewExplanation=
diff --git a/src/main/webapp/templates/poiDeletePreview.ftl b/src/main/webapp/templates/poiDeletePreview.ftl
new file mode 100644
index 0000000000000000000000000000000000000000..bccee4564c1d02ca082c914c6203c68f1855483c
--- /dev/null
+++ b/src/main/webapp/templates/poiDeletePreview.ftl
@@ -0,0 +1,92 @@
+<#-- 
+  Copyright (c) 2015 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>${i18nBundle.deletePoi}</title>
+</#macro>
+<#macro custom_css>
+	<link rel="stylesheet" type="text/css" href="/css/3rdparty/ol.css"/ >
+</#macro>
+<#macro custom_js>
+	<script type="text/javascript" src="/js/constants.js"></script>
+	<script type="text/javascript" src="/js/resourcebundle.js"></script>
+	<script type="text/javascript" src="/js/validateForm.js"></script>
+</#macro>
+<#macro page_contents>
+<div class="singleBlockContainer">
+	<p><a href="${returnURL}" class="btn btn-default cancel" role="button">${i18nBundle.cancel}</a></p>
+        <h1>${i18nBundle.deletePoi} ${poi.name}</h1>
+        <div id="errorMsgEl" class="alert alert-danger" <#if !formValidation?has_content> style="display:none;"</#if>>
+		<#if formValidation?has_content>${formValidation.validationMessages?replace("\n", "<br>")}</#if>
+	</div>
+	<#if messageKey?has_content>
+		<div class="alert alert-success">${i18nBundle(messageKey)}</div>
+	</#if>
+	<p>${i18nBundle.deletePoiPreviewExplanation}</p>
+	<h2>${i18nBundle.forecasts}</h2>
+	<table class="table table-striped">
+		<thead>
+			<th>${i18nBundle.modelId}</th>
+			<th>${i18nBundle.dateStart}</th>
+			<th>${i18nBundle.dateEnd}</th>
+			<th></th>
+		</thead>
+		<tbody>
+			<#list forecastConfigurations as forecastConfiguration>
+			<tr>
+				<td>
+				<#if i18nBundle.containsKey(forecastConfiguration.modelId)>
+					${i18nBundle[forecastConfiguration.modelId]}
+				<#else>
+					${modelInformation[forecastConfiguration.modelId].defaultName}
+				</#if>
+				</td>
+				<td>${forecastConfiguration.dateStart}</td>
+				<td>${forecastConfiguration.dateEnd}</td>
+				<td><a href="/forecastConfiguration?action=viewForecastConfiguration&forecastConfigurationId=${forecastConfiguration.forecastConfigurationId}" target="new">${i18nBundle.edit}</a></td>
+			</tr>
+			</#list>
+		</tbody>
+	</table>
+        <h2>${i18nBundle.observations}</h2>
+	<table class="table table-striped">
+		<thead>
+                        <th>${i18nBundle.timeOfObservation}</th>
+			<th>${i18nBundle.cropOrganismId}</th>
+			<th>${i18nBundle.pestOrganismId}</th>
+			<th>${i18nBundle.observationHeading}</th>
+			<th></th>
+		</thead>
+		<tbody>
+			<#list observations as observation>
+			<tr>
+				<td>${observation.timeOfObservation}</td>
+				<td>${observation.cropOrganism.latinName}</td>
+				<td>${observation.organism.latinName}</td>
+                                <td>${observation.observationHeading}</td>
+				<td><a href="/observation?action=editObservationForm&observationId=${observation.observationId}" target="new">${i18nBundle.edit}</a></td>
+			</tr>
+			</#list>
+		</tbody>
+	</table>
+	<p>
+		<a href="${returnURL}" class="btn btn-default cancel" role="button">${i18nBundle.cancel}</a>
+		<button type="button" class="btn btn-danger" onclick="if(confirm('${i18nBundle.confirmDelete}')){window.location.href='/poi?action=deletePoi&pointOfInterestId=${poi.pointOfInterestId}';}">${i18nBundle.deletePoi}</button>
+	</p>
+</div>
+</#macro>
+<@page_html/>