diff --git a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
index 9d13ac32d2d5a3794f403847a34548bac5e3eff1..557b06f15341549b911200f6756b5da01f594c2e 100755
--- a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
+++ b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
@@ -50,6 +50,7 @@ public class VIPSLogicApplication extends Application
         resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class);
         resources.add(no.nibio.vips.logic.modules.wheatleafblotch.WheatLeafBlotchModelService.class);
         resources.add(no.nibio.vips.logic.modules.roughage.RoughageService.class);
+        resources.add(no.nibio.vips.logic.modules.barkbeetle.BarkbeetleService.class);
         resources.add(no.nibio.vips.observationdata.ObservationDataService.class);
         resources.add(no.nibio.vips.logic.messaging.sms.SMSHandlingService.class);
         resources.add(no.nibio.vips.logic.modules.applefruitmoth.AppleFruitMothService.class);
@@ -70,6 +71,7 @@ public class VIPSLogicApplication extends Application
     private void addRestResourceClasses(Set<Class<?>> resources) {
         resources.add(no.nibio.vips.logic.messaging.sms.SMSHandlingService.class);
         resources.add(no.nibio.vips.logic.modules.applefruitmoth.AppleFruitMothService.class);
+        resources.add(no.nibio.vips.logic.modules.barkbeetle.BarkbeetleService.class);
         resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class);
         resources.add(no.nibio.vips.logic.modules.roughage.RoughageService.class);
         resources.add(no.nibio.vips.logic.modules.wheatleafblotch.WheatLeafBlotchModelService.class);
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 2b4bda1c285afa66108ed5c13f248bb25faa15cf..7112c88362f2b1bf8a52a31673955bc501efc646 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
@@ -19,6 +19,11 @@
 
 package no.nibio.vips.logic.modules.barkbeetle;
 
+import de.micromata.opengis.kml.v_2_2_0.Coordinate;
+import de.micromata.opengis.kml.v_2_2_0.Document;
+import de.micromata.opengis.kml.v_2_2_0.Kml;
+import de.micromata.opengis.kml.v_2_2_0.KmlFactory;
+import de.micromata.opengis.kml.v_2_2_0.Placemark;
 import java.util.List;
 import javax.ejb.LocalBean;
 import javax.ejb.Stateless;
@@ -26,8 +31,9 @@ import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import no.nibio.vips.logic.util.GISEntityUtil;
+import no.nibio.vips.logic.util.Globals;
 import no.nibio.vips.logic.util.SessionControllerGetter;
-import org.locationtech.jts.geom.Point;
 
 /**
  * @copyright 2020 <a href="http://www.nibio.no/">NIBIO</a>
@@ -117,4 +123,51 @@ public class BarkbeetleBean {
         trapsite.setTrapsiteRegistrationCollection(registrations);
         return em.merge(trapsite);
     }
+
+    public Kml getSeasonTrapsitesKml(Integer season, Integer excludeSeasonTrapsiteId, String serverName) {
+        String iconPath = Globals.PROTOCOL + "://" + serverName + "/images/modules/barkbeetle/";
+        List<SeasonTrapsite> traps = this.getSeasonTrapsites(season);
+        // Initialization
+        final Kml kml = KmlFactory.createKml();
+        final Document document = kml.createAndSetDocument()
+        .withName("Barkbillefellelokaliteter").withDescription("Barkbillefellelokaliteter for sesongen " + season);
+        
+        document.createAndAddStyle()
+            .withId("trapsite_icon")
+        .createAndSetIconStyle()
+                .withScale(0.55)
+                .createAndSetIcon()
+                    .withHref(iconPath + "dot_blue.png");
+        
+        document.createAndAddStyle()
+            .withId("trapsite_icon_highlighted")
+        .createAndSetIconStyle()
+                .withScale(0.55)
+                .createAndSetIcon()
+                    .withHref(iconPath + "trapsite.png");
+        
+        String styleUrl = "#trapsite_icon";
+        GISEntityUtil gisUtil = new GISEntityUtil();
+        for(SeasonTrapsite trap:traps)
+        {
+            if(excludeSeasonTrapsiteId != null && excludeSeasonTrapsiteId.equals(trap.getSeasonTrapsiteId()))
+            {
+                continue;
+            }
+            final Placemark placemark = document.createAndAddPlacemark()
+            .withName(trap.getCountyName() + "/" + trap.getMunicipalityName())
+            .withDescription(
+                    "<ul>"
+                    + "<li>Eier: " + trap.getOwnerName() + ", tlf: " + trap.getOwnerPhone() + "</li>"
+                    + "<li>Registrant: <a href='mailto:" + trap.getUserId().getEmail() + "'>" + trap.getUserId().getFirstName() + " " + trap.getUserId().getLastName() + "</a>, tlf: " + trap.getUserId().getPhone() + "</li>"
+                    + "</ul>")
+            .withStyleUrl(styleUrl)
+            .withId(trap.getSeasonTrapsiteId().toString());
+            
+            final de.micromata.opengis.kml.v_2_2_0.Point point = placemark.createAndSetPoint();
+            List<Coordinate> coord = point.createAndSetCoordinates();
+            coord.add(gisUtil.getKMLCoordinateFromJTSCoordinate(trap.getGisGeom().getCoordinate()));
+        }
+        return kml;
+    }
 }
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 ba9f62197d5ca739ccd8d370a31f6e0c69defbf7..303af3041eb04934090c7ebb4ec784c1b6b14711 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
@@ -49,8 +49,6 @@ import no.nibio.vips.util.ServletUtil;
 import no.nibio.web.forms.FormValidation;
 import no.nibio.web.forms.FormValidationException;
 import no.nibio.web.forms.FormValidator;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.CoordinateXYZM;
 import org.locationtech.jts.geom.Point;
 
 /**
@@ -171,6 +169,7 @@ public class BarkbeetleController extends HttpServlet {
                 {
                     request.setAttribute("userIsAdmin",SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.BARKBEETLE_ADMIN, VipsLogicRole.BARKBEETLE_COUNTY_ADMIN, VipsLogicRole.SUPERUSER));
                     request.setAttribute("seasonTrapsite", trapsite);
+                    request.setAttribute("isExtended", trapsite.getTrapsiteType().getTrapsiteTypeId().equals(TrapsiteType.TRAPSITE_TYPE_EXTENDED));
                     Set<Integer> missingWeeks = new HashSet(trapsite.getTrapsiteType().getTrapsiteTypeId().equals(TrapsiteType.TRAPSITE_TYPE_STANDARD)?
                             Arrays.asList(new Integer[]{21,24,28,33})
                             : Arrays.asList(new Integer[]{21,24,28,33,37}));
diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleService.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleService.java
new file mode 100644
index 0000000000000000000000000000000000000000..97eb00baab00fe7e95e149f7788e6c50e01b7a1e
--- /dev/null
+++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleService.java
@@ -0,0 +1,54 @@
+/*
+ * 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/>.
+ * 
+ */
+
+package no.nibio.vips.logic.modules.barkbeetle;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import no.nibio.vips.util.ServletUtil;
+
+/**
+ * @copyright 2020 <a href="http://www.nibio.no/">NIBIO</a>
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+@Path("rest/barkbeetle")
+public class BarkbeetleService {
+    @PersistenceContext(unitName="VIPSLogic-PU")
+    EntityManager em;
+    @Context
+    private HttpServletRequest httpServletRequest;
+    
+    @GET
+    @Path("seasontrapsites/{season}/kml")
+    @Produces("application/vnd.google-earth.kml+xml;charset=utf-8")
+    public Response getSeasonTrapsites(
+            @PathParam("season") Integer season,
+            @QueryParam("excludeSeasonTrapsiteId") Integer excludeSeasonTrapsiteId)
+    {
+        return Response.ok().entity(BarkbeetleBean.getInstance().getSeasonTrapsitesKml(season, excludeSeasonTrapsiteId, ServletUtil.getServerName(httpServletRequest))).build();
+    }
+}
diff --git a/src/main/webapp/images/modules/barkbeetle/Instruks_Barkbillefylkeskontakter.pdf b/src/main/webapp/images/modules/barkbeetle/Instruks_Barkbillefylkeskontakter.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..fb97915d688ac090c23bb22a204d78dc5942a335
Binary files /dev/null and b/src/main/webapp/images/modules/barkbeetle/Instruks_Barkbillefylkeskontakter.pdf differ
diff --git a/src/main/webapp/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf b/src/main/webapp/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..4fa735140bcc107cb0ef59d59787bf855e7b9d28
Binary files /dev/null and b/src/main/webapp/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf differ
diff --git a/src/main/webapp/images/modules/barkbeetle/Instruks_utvidet_sesong.pdf b/src/main/webapp/images/modules/barkbeetle/Instruks_utvidet_sesong.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a22bc8e7385d482d5d169cd21d3802ccc79d61f0
Binary files /dev/null and b/src/main/webapp/images/modules/barkbeetle/Instruks_utvidet_sesong.pdf differ
diff --git a/src/main/webapp/images/modules/barkbeetle/dot_blue.png b/src/main/webapp/images/modules/barkbeetle/dot_blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fcfc846ea66b315f8ae7e0a72c47e2f4e2fcf0f
Binary files /dev/null and b/src/main/webapp/images/modules/barkbeetle/dot_blue.png differ
diff --git a/src/main/webapp/images/modules/barkbeetle/trapsite.png b/src/main/webapp/images/modules/barkbeetle/trapsite.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f5db98a49b38563161f9f21dcadb49ad64d8600
Binary files /dev/null and b/src/main/webapp/images/modules/barkbeetle/trapsite.png differ
diff --git a/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteFormMap.js b/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteFormMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..256c13a12cd0741468154f67c9e7910908ae004a
--- /dev/null
+++ b/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteFormMap.js
@@ -0,0 +1,114 @@
+/*
+ * 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/>.
+ * 
+ */
+ 
+ /*
+ * Map with barkbeetle trap information
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+ 
+ var map;
+ var trapMarker;
+ 
+ function initMap(season, currentSeasonTrapsiteId, currentSeasonTrapsiteCoordinate){
+ 	 // Background layer is OpenStreetMap
+    var backgroundLayer = new ol.layer.Tile({
+                    source: new ol.source.OSM({
+                        attributions: [
+                            new ol.Attribution({
+                              html: mapConstants.MAP_ATTRIBUTION
+                            })
+                          ]
+                    })
+    });
+    
+    // The trapsite layer
+    var trapLayer = new ol.layer.Vector({
+    source: new ol.source.Vector({
+        url: "/rest/barkbeetle/seasontrapsites/" + season + "/kml/" + (currentSeasonTrapsiteId != null ? "?excludeSeasonTrapsiteId=" + currentSeasonTrapsiteId : ""),
+		projection: "EPSG:3857",
+		format: new ol.format.KML()
+      })
+    });
+    
+    // Creating the map
+    map = new ol.Map({
+                    target: 'seasonTrapsiteFormMap',
+                    layers: [backgroundLayer, trapLayer],
+                    //overlays: [popOverlay],
+                    renderer: 'canvas'
+    });
+    
+    // Setting zoom and center for the map (need to do this after creating map. so that we kan transform our
+    // center to correct map projection)
+    var view = new ol.View({
+            center: ol.proj.transform([10.0,63.0], 'EPSG:4326', map.getView().getProjection().getCode()),
+            zoom: 5
+    });
+    map.setView(view);
+    
+    // Marker overlay
+    trapMarker = new ol.Overlay({
+      position: currentSeasonTrapsiteId !== null ? ol.proj.transform(currentSeasonTrapsiteCoordinate, 'EPSG:4326', map.getView().getProjection().getCode()) : undefined,
+      positioning: 'bottom-center',
+      element: document.getElementById('trapMarker'),
+      stopEvent: false
+    });
+    
+    map.addOverlay(trapMarker);
+    
+    // Listening for single clicks, position observation pin and updating form element
+    map.on(['singleclick'], function(evt) {
+        updateLocationPosition(evt.coordinate);
+    });
+ }
+ 
+ function updateLocationPosition(coordinate)
+{
+    var locationPosition = ol.coordinate.toStringXY(ol.proj.transform(coordinate, map.getView().getProjection().getCode(), 'EPSG:4326'),4);
+    // Set/move location pin
+    trapMarker.setPosition(coordinate);
+    // Update form field "location"
+    var locationEl = document.getElementById("gisGeom");
+    //console.log(locationEl);
+    locationEl.value=locationPosition;
+
+    // Adding a little animation
+    $("#gisGeom").animate({borderWidth: "4"},500, function(){
+        $("#gisGeom").animate({borderWidth: "1"},500, function(){});
+    });
+    
+    handleLocationChanged(locationEl);
+}
+
+/**
+ * Places the station marker on the coordinates given in Location input field,
+ * and centers the map around these coordinates
+ */
+function updateMarkerPosition()
+{
+    var locationEl = document.getElementById("gisGeom");
+   
+   var coordinate = locationEl.value.split(",");
+   coordinate[0] = parseFloat(coordinate[0]);
+   coordinate[1] = parseFloat(coordinate[1]);
+   //console.log(coordinate);
+   var markerPosition = ol.proj.transform(coordinate, 'EPSG:4326', map.getView().getProjection().getCode());
+   
+   trapMarker.setPosition(markerPosition);
+}
\ No newline at end of file
diff --git a/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteListMap.js b/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteListMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ff61bda8687e699609701bbc449cff23cf92430
--- /dev/null
+++ b/src/main/webapp/js/modules/barkbeetle/seasonTrapsiteListMap.js
@@ -0,0 +1,113 @@
+/*
+ * 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/>.
+ * 
+ */
+ 
+ /*
+ * Map with barkbeetle trap information
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+ 
+ var map;
+ var popOverlay;
+ var poiDetails;
+ 
+ function initMap(season){
+ 	 // Background layer is OpenStreetMap
+    var backgroundLayer = new ol.layer.Tile({
+                    source: new ol.source.OSM({
+                        attributions: [
+                            new ol.Attribution({
+                              html: mapConstants.MAP_ATTRIBUTION
+                            })
+                          ]
+                    })
+    });
+    
+    // The trapsite layer
+    var trapLayer = new ol.layer.Vector({
+    source: new ol.source.Vector({
+        url: "/rest/barkbeetle/seasontrapsites/" + season + "/kml/",
+		projection: "EPSG:3857",
+		format: new ol.format.KML()
+      })
+    });
+    
+    // Using Bootstrap's popover plugin. See http://getbootstrap.com/javascript/#popovers
+    poiDetails = $("#popover");
+    
+    // Layer for popup
+    popOverlay = new ol.Overlay({
+      element: document.getElementById("popover")
+    });
+    
+    // Creating the map
+    map = new ol.Map({
+                    target: 'seasonTrapsiteListMap',
+                    layers: [backgroundLayer, trapLayer],
+                    overlays: [popOverlay],
+                    renderer: 'canvas'
+    });
+    
+    // Setting zoom and center for the map (need to do this after creating map. so that we kan transform our
+    // center to correct map projection)
+    var view = new ol.View({
+            center: ol.proj.transform([10.0,63.0], 'EPSG:4326', map.getView().getProjection().getCode()),
+            zoom: 5
+    });
+    map.setView(view);
+    
+    // On click, display site details in popup
+    map.on('singleclick', function(evt) {
+            var pixel = map.getEventPixel(evt.originalEvent);
+              displayFeatureDetails(pixel);
+            });
+ }
+ 
+ // Displays popup with forecasts for a given station
+    // (if there is a station where the click event is fired)
+    var displayFeatureDetails = function(pixel, coordinate) {
+          var feature = map.forEachFeatureAtPixel(pixel, function(feature,layer){
+             return feature; 
+          });
+
+          if (feature) {
+              // Position the popup, and hiding it
+              // Resetting information from (possible) former popups
+              var geometry = feature.getGeometry();
+              popOverlay.setPosition(geometry.getCoordinates());
+              poiDetails.popover('destroy');
+              // Create the popup, showing it
+              poiDetails.popover({
+                    animation: true,
+                    trigger: 'manual',
+                    html: true,
+                    placement: "auto top",
+                    title: feature.get("name"),
+                    content: feature.get("description")
+            });
+
+            poiDetails.popover('show');
+
+
+          } else {
+              poiDetails.popover('destroy');
+          }
+
+    };
+    
+ 
\ 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 55df07a269d6691e77fac4c0de24f8f5bf1bc689..4873122b0225948ab1f4d4c84fca8d272c21edc9 100644
--- a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteForm.ftl
@@ -20,6 +20,9 @@
 	<title>Barkbilleregistrering: Rediger fellelokalitet for ${season}</title>
 </#macro>
 <#macro custom_js>
+	<script type="text/javascript" src="/js/constants.js"></script>
+	<script type="text/javascript" src="/js/3rdparty/ol.js"></script>
+	<script type="text/javascript" src="/js/modules/barkbeetle/seasonTrapsiteFormMap.js"></script>
 	<script type="text/javascript" src="/js/resourcebundle.js"></script>
 	<script src="/js/validateForm.js"></script>
 	<script src="//code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
@@ -27,17 +30,17 @@
 	<script type="text/javascript" src="/js/3rdparty/proj4.js"></script>
 	<script type="text/javascript">
 		var theForm = document.getElementById("${formId}"); 
-		// Make sure that there is a date picker present for HTML5 
-		// date input fields
-		if (!Modernizr.inputtypes.date) {
-		    $('input[type=date]').datepicker({ dateFormat: 'yy-mm-dd' });
-		}
-		// Load main form definition (for validation)
-		loadFormDefinition("seasonTrapsiteForm","/formdefinitions/modules/barkbeetle/");
+		$(document).ready(function() {
+			// Make sure that there is a date picker present for HTML5 
+			// date input fields
+			if (!Modernizr.inputtypes.date) {
+				$('input[type=date]').datepicker({ dateFormat: 'yy-mm-dd' });
+			}
+			// Load main form definition (for validation)
+			loadFormDefinition("seasonTrapsiteForm","/formdefinitions/modules/barkbeetle/");
+			initMap(${season},${seasonTrapsite.seasonTrapsiteId!"null"},[${(seasonTrapsite.longitude?c)!"0"},${(seasonTrapsite.latitude?c)!"0"}]);
+		});
 		
-		function updateMarkerPosition(){
-			console.info("TODO: updateMarkerPosition");
-		}
 		
 		function handleLocationChanged(locationField){
 			// Input control first
@@ -71,10 +74,21 @@
 			fetch("/corsproxy/https://proxy1.nibio.no/municipality_cache_ws/kommuneListe/N2000/4326/2019?lon=" + lon + "&lat=" + lat)
 			.then(response => response.json())
 			.then(municInfo =>{
-					theForm["countyNo"].value=municInfo[0]["fylkenr"];
-					theForm["countyName"].value=municInfo[0]["fylkenavn"];
-					theForm["municipalityNo"].value=municInfo[0]["komnr"];
-					theForm["municipalityName"].value=municInfo[0]["komnavn"];
+					if(municInfo.length == 0)
+					{
+						alert("Posisjonen er utenfor Norges grenser. Vennligst korriger dette");
+						theForm["countyNo"].value = 0;
+						theForm["countyName"].value = "Utlandet";
+						theForm["municipalityNo"].value = 0;
+						theForm["municipalityName"].value = "Utlandet";
+					}
+					else
+					{
+						theForm["countyNo"].value=municInfo[0]["fylkenr"];
+						theForm["countyName"].value=municInfo[0]["fylkenavn"];
+						theForm["municipalityNo"].value=municInfo[0]["komnr"];
+						theForm["municipalityName"].value=municInfo[0]["komnavn"];
+					}
 				}
 			)
 			.catch( error => console.info(error));;
@@ -104,31 +118,45 @@
 </#macro>
 <#macro custom_css>
 	<link href="//code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" rel="stylesheet" />
+	<link rel="stylesheet" type="text/css" href="/css/3rdparty/ol.css"/ >
+	<style type="text/css">
+		#seasonTrapsiteFormMap {
+			height: 600px;	
+		}
+	</style>
 </#macro>
 <#macro page_contents>
 	<#if messageKey?has_content>
 		<div class="alert alert-success">Data ble lagret ${.now}</div>
 	</#if>
+	<p>
+		<a href="/barkbeetle?season=${season}" class="btn btn-default back" role="button">${i18nBundle.back}</a>
+	</p>
 	<h1><#if seasonTrapsite.seasonTrapsiteId?has_content>Rediger<#else>Ny</#if> fellelokalitet</h1>
 	<div class="row">
 		<div class="col-md-11">
-		<p style="clear: left;">
-			[Her trengs tekstforslag]: Barkbilleregistreringen er organisert gjennom XXX 
-			og slik og sånn. Alle feller må være av typen BEKA (også kalt Novefella) (se bildet), og feromonet som 
-			brukes må være av typen <a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>. Les <a href="/images/modules/barkbeetle/Instruks_2020.pdf">årets instruks</a>
-			og <a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">monteringsanvisningen.</a>
+		<p>Alle feller må være av typen BEKA (=Nove, se bildet) og feromon av typen 
+		<a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>
+		(=Norlure; tilsendt fra Nibio). Plasser lokaliteten med et trykk 
+		på kartet, så genereres koordinater og flere av feltene automatisk. Alle 
+		øvrige felt med stjerne må fylles inn. Fyll også inn dato og kommentar 
+		nederst i skjemaet dersom montering av feller skjer senere enn 20. april.
+		Se utdypende informasjon i 
+		<a href="/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf" target="new">Instruks registranter</a> 
+		og <a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">Monteringsanvisning
+	Beka-felle</a>
+	   </p>
+		<p>
+			<#if seasonTrapsite.seasonTrapsiteId?has_content>
+			<a href="/barkbeetle?action=registerData&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" class="btn btn-default" role="button">Registrer data</a>
+			</#if>
 		</p>
 		</div>
 		<div class="col-md-1">
 		<img src="/images/modules/barkbeetle/Bilde_BEKA_felle.jpg" style="height: 150px;"/>
 		</div>
 	</div>
-	<p>
-		<a href="/barkbeetle?season=${season}" class="btn btn-default back" role="button">${i18nBundle.back}</a>
-		<#if seasonTrapsite.seasonTrapsiteId?has_content>
-		<a href="/barkbeetle?action=registerData&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" class="btn btn-default" role="button">Registrer data</a>
-		</#if>
-	</p>
+	
 <div class="singleBlockContainer">
 	<div class="row">
 	<div class="col-md-8">
@@ -167,7 +195,7 @@
 				<button class="btn btn-default" type="button" onclick="convertProjection();">Konverter til WGS84</button>
 			</div>
 			</label>
-			<input type="text" class="form-control" id="gisGeom" name="gisGeom" placeholder="Lokalitet" value="${(seasonTrapsite.longitude?c)!""},${(seasonTrapsite.latitude?c)!""}" onblur="validateField(this);" onchange="if(validateField(this)){handleLocationChanged(this);}" />
+			<input type="text" class="form-control" id="gisGeom" name="gisGeom" placeholder="Lokalitet" value="${(seasonTrapsite.longitude?c)!""},${(seasonTrapsite.latitude?c)!""}" onblur="validateField(this);" onchange="if(validateField(this)){handleLocationChanged(this);updateMarkerPosition();}" />
 			<span class="help-block" id="${formId}_gisGeom_validation"></span>
 		  </div>
 		  <div class="form-group">
@@ -250,9 +278,12 @@
 	</form>
 	</div>
 	<div class="col-md-4">
-	Kartet kommer her!
+		<div id="seasonTrapsiteFormMap" class="map">
+				<div id="popover"></div>
+			</div>
 	</div>
 	</div>
+	<div style="display: none;"><div id="trapMarker" title="Marker"><img src="/images/modules/barkbeetle/trapsite.png"/></div></div>
 </div>
 </#macro>
 <@page_html/>
\ No newline at end of file
diff --git a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
index 91021c12bac72986b791558d8a1f9be5ebdb0e56..0f961def2f16c8e9ba318fd1482de80de94d4f5b 100644
--- a/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl
@@ -22,16 +22,53 @@
 <#macro page_contents>
 <h1>Fellelokaliteter for sesongen ${season}</h1>
 <div class="row">
-	<div class="col-md-11">
-	<p style="clear: left;">
-		[Her trengs tekstforslag]: Barkbilleregistreringen er organisert gjennom XXX 
-			og slik og sånn. Alle feller må være av typen BEKA (også kalt Novefella) (se bildet), og feromonet som 
-			brukes må være av typen <a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>. Les <a href="/images/modules/barkbeetle/Instruks_2020.pdf">årets instruks</a>
-			og <a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">monteringsanvisningen.</a>
-	</p>
+	<div class="col-md-7">
+	<p>Barkbilleovervåkingen er organisert gjennom «"Barkbilleadministratorer» 
+	ved Nibio, «Barkbillefylkeskontakter» og «Registranter». Alle feller må være 
+	av typen BEKA (også kalt Novefella) (se bildet), og feromonet som brukes må 
+	være av typen <a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>
+	(=Norlure; tilsendt fra Nibio). Les instruksjoner som 
+	er aktuelle for deg nøye, slik som 
+	<a href="/images/modules/barkbeetle/Instruks_Barkbillefylkeskontakter.pdf" target="new">Instruks
+	Barkbillefylkeskontakter</a>,
+	<a href="/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf" target="new">Instruks registranter</a>, og 
+	<a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">Monteringsanvisning
+	Beka-felle</a> (kun noen få har i tillegg 
+	<a href="/images/modules/barkbeetle/Instruks_utvidet_sesong.pdf" target="new">utvidet 
+	sesong</a> med egen instruksjon).</p>
+	
+	<p><strong>Barkbillefylkeskontakt</strong> oppretter her lokaliteter for sitt fylke («Legg til 
+	ny») og tildeler disse registranter som sørger for fellemontering, tømming 
+	av feller og fortløpende innlegging av data gjennom sesongen. Det bør være 
+	lokaliteter i alle kommuner som tidligere har vært med (<strong>NB</strong> kommuner før 
+	sammenslåinger etter 2012). Liste over registranter, inkludert navn/telefon 
+	og epost, sendes tor-einar.skog@nibio.no så	tidlig som mulig før sesong for 
+	å opprette tilgang i systemet for registrantene. Etter dette får registrantene 
+	innloggingsadgang tilsendt per epost. Se utdypende informasjon i 
+	<a href="/images/modules/barkbeetle/Instruks_Barkbillefylkeskontakter.pdf" target="new">Instruks
+	Barkbillefylkeskontakter</a> (se også 
+	<a href="/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf" target="new">Instruks 
+	Registranter</a> for å forstå deres oppgaver).</p>
+	
+	<p><strong>Registranter</strong> må oppdatere informasjon under «Endre lokalitetsinfo» for 
+	sin(e) lokalitet(er) så snart som mulig og sørge for at feller blir montert 
+	innen 20. april. Fellene i standardlokaliteter tømmes etter hver av fire 
+	perioder, dvs. på mandag eller tirsdag i ukene 21, 24, 28 og 33. Data fra 
+	hver tømming skal legges inn under «Registrer» innen mandag i påfølgende uke, 
+	og blir dermed del av en fortløpende kartvisning av barkbillenivået gjennom 
+	sesongen. Se utdypende informasjon i 
+	<a href="/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf" target="new">Instruks 
+	Registranter</a>, og 
+	<a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">Monteringsanvisning
+	Beka-felle</a></p>
 	</div>
 	<div class="col-md-1">
-	<img src="/images/modules/barkbeetle/Bilde_BEKA_felle.jpg" style="height: 150px;"/>
+	<img src="/images/modules/barkbeetle/Bilde_BEKA_felle.jpg" style="height: 250px;"/>
+	</div>
+	<div class="col-md-4">
+		<div id="seasonTrapsiteListMap" class="map">
+				<div id="popover"></div>
+		</div>
 	</div>
 </div>
 <#if userIsAdmin>
@@ -40,11 +77,6 @@
 </p>
 </#if>
 <div class="singleBlockContainer">
-	<div class="row">
-	<div class="col-md-12">
-	<h1>Kartet kommer her!</h1>
-	</div>
-	</div>
 	<div class="row">
 	<table class="table table-striped">
 		<thead>
@@ -80,12 +112,17 @@
 </div>
 </#macro>
 <#macro custom_js>
+	<script type="text/javascript" src="/js/constants.js"></script>
+	<script type="text/javascript" src="/js/3rdparty/ol.js"></script>
+	<script type="text/javascript" src="/js/modules/barkbeetle/seasonTrapsiteListMap.js"></script>
 <script type="text/javascript">
-// TODO?		
+$(document).ready(function() {
+		initMap(${season});
+});
 </script>
 </#macro>
 <#macro custom_css>
-
+	<link rel="stylesheet" type="text/css" href="/css/3rdparty/ol.css"/ >
 	<style type="text/css">
 		td.status_1 {
 			background-color: #ffe066 !important;
@@ -97,7 +134,9 @@
 			background-color: #ff6e66 !important;
 		}
 
-			
+		#seasonTrapsiteListMap {
+			height: 500px;	
+		}	
 	</style>
 </#macro>
 <@page_html/>
\ No newline at end of file
diff --git a/src/main/webapp/templates/modules/barkbeetle/barkbeetleTrapsiteRegistrationForm.ftl b/src/main/webapp/templates/modules/barkbeetle/barkbeetleTrapsiteRegistrationForm.ftl
index c644067d1119aaacf75bbd51e9b4411777836e40..61b427f2c742f37fd9617c5e38be02179b17acd4 100644
--- a/src/main/webapp/templates/modules/barkbeetle/barkbeetleTrapsiteRegistrationForm.ftl
+++ b/src/main/webapp/templates/modules/barkbeetle/barkbeetleTrapsiteRegistrationForm.ftl
@@ -24,23 +24,33 @@
 	<#if messageKey?has_content>
 		<div class="alert alert-success">Data ble lagret ${.now}</div>
 	</#if>
+	<p>
+		<a href="/barkbeetle?action=editSeasonTrapsite&season=${seasonTrapsite.season}&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" class="btn btn-default back" role="button">${i18nBundle.back}</a>
+	</p>
 	<h1>Registrer data for lokalitet ${siteName}, sesong ${seasonTrapsite.season}</h1>
 	<div class="row">
 		<div class="col-md-11">
-		<p style="clear: left;">
-			[Her trengs tekstforslag]: Barkbilleregistreringen er organisert gjennom XXX 
-			og slik og sånn. Alle feller må være av typen BEKA (også kalt Novefella) (se bildet), og feromonet som 
-			brukes må være av typen <a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>. Les <a href="/images/modules/barkbeetle/Instruks_2020.pdf">årets instruks</a>
-			og <a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">monteringsanvisningen.</a>
+		<p>
+		Påse at
+		</p>
+		<ul>
+			<li>alle feller er av typen <strong>BEKA</strong> (=Nove, se bildet) og feromon av typen 
+			<a href="http://kjemikonsult.no/Norsk/Produkter.html" target="new">Ipslure</a>
+			(= Norlure; tilsendt fra Nibio).</li>
+			<li>antall biller legges inn for rett tømmeperiode i rett ukenummer</li>
+			<li>tallet legges inn på rett sted, som enten antall biller eller antall ml (volum målt med målebeger; omregning til antall biller skjer automatisk).</li>
+		</ul>
+		<p>
+		Se utdypende informasjon i 
+		<a href="/images/modules/barkbeetle/Instruks_registranter_i_Barkbilleovervakingen.pdf" target="new">Instruks registranter</a>
+		og <a href="/images/modules/barkbeetle/Montering_av_barkbillefelle.pdf">Monteringsanvisning
+	Beka-felle</a>
 		</p>
 		</div>
 		<div class="col-md-1">
 		<img src="/images/modules/barkbeetle/Bilde_BEKA_felle.jpg" style="height: 150px;"/>
 		</div>
 	</div>
-	<p>
-		<a href="/barkbeetle?action=editSeasonTrapsite&season=${seasonTrapsite.season}&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" class="btn btn-default back" role="button">${i18nBundle.back}</a>
-	</p>
 	<#if userIsAdmin>
 	<div class="alert alert-info">Registrant: <strong>${seasonTrapsite.userId.firstName} ${seasonTrapsite.userId.lastName}</strong>, tlf <strong>${seasonTrapsite.userId.phone!"Ikke oppgitt"}</strong>, e-post <strong>${seasonTrapsite.userId.email}</strong></div>
 	</#if>
@@ -84,10 +94,10 @@
 					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap1" value="${reg.trap1!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
 					<td><input class="form-control" type="number" name="${reg.trapsiteRegistrationPK.week}_trap2_ml" onblur="setCalculatedAmount(this);" value=""<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
 					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap2" value="${reg.trap2!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td><input class="form-control" type="number" name="${reg.trapsiteRegistrationPK.week}_trap3_ml" onblur="setCalculatedAmount(this);" value=""<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap3" value="${reg.trap3!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td><input class="form-control" type="number" name="${reg.trapsiteRegistrationPK.week}_trap4_ml" onblur="setCalculatedAmount(this);" value=""<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap4" value="${reg.trap4!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
+					<td><input class="form-control" type="number" name="${reg.trapsiteRegistrationPK.week}_trap3_ml" onblur="setCalculatedAmount(this);" value=""<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
+					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap3" value="${reg.trap3!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
+					<td><input class="form-control" type="number" name="${reg.trapsiteRegistrationPK.week}_trap4_ml" onblur="setCalculatedAmount(this);" value=""<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
+					<td><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap4" value="${reg.trap4!"M"}"<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
 					
 					<td rowspan="2">
 					<#if reg.dateRegistration?has_content>
@@ -105,8 +115,8 @@
 				<tr>
 					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap1Remarks" placeholder="Kommentar felle 1" value="${reg.trap1Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
 					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap2Remarks" placeholder="Kommentar felle 2" value="${reg.trap2Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap3Remarks" placeholder="Kommentar felle 3" value="${reg.trap3Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
-					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap4Remarks" placeholder="Kommentar felle 4" value="${reg.trap4Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek> disabled="disabled"</#if>/></td>
+					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap3Remarks" placeholder="Kommentar felle 3" value="${reg.trap3Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
+					<td colspan="2"><input class="form-control" type="text" name="${reg.trapsiteRegistrationPK.week}_trap4Remarks" placeholder="Kommentar felle 4" value="${reg.trap4Remarks!""}"<#if reg.trapsiteRegistrationPK.week gt currentWeek || isExtended> disabled="disabled"</#if>/></td>
 
 				</tr>
 			</#list>