diff --git a/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java b/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java
index 24315611140e1243edc12a0d0376aa0835566a21..04db0628f62c6fae7e840310a594a927eca58672 100644
--- a/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java
+++ b/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java
@@ -18,22 +18,22 @@
 package no.nibio.vips.logic.entity;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-
 import jakarta.persistence.*;
-import jakarta.validation.constraints.NotNull;
+import no.nibio.vips.logic.util.GISEntityUtil;
+
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
-import java.util.Date;
+import java.util.*;
 
 @Entity
 @Table(name = "observation_time_series")
 @XmlRootElement
 @NamedQueries({
-        @NamedQuery(name = "ObservationTimeSeries.findAll", query = "SELECT ots FROM ObservationTimeSeries ots"),
-        @NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId = :id"),
-        @NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesIds", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId IN :observationTimeSeriesIds"),
-        @NamedQuery(name = "ObservationTimeSeries.findByOrganizationId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(SELECT v.userId FROM VipsLogicUser v WHERE v.organizationId.organizationId = :organizationId OR  v.organizationId.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId.organizationId = :organizationId))"),
-        @NamedQuery(name = "ObservationTimeSeries.findByUserId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(:userId)")
+    @NamedQuery(name = "ObservationTimeSeries.findAll", query = "SELECT ots FROM ObservationTimeSeries ots"),
+    @NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId = :id"),
+    @NamedQuery(name = "ObservationTimeSeries.findByObservationTimeSeriesIds", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.observationTimeSeriesId IN :observationTimeSeriesIds"),
+    @NamedQuery(name = "ObservationTimeSeries.findByUserId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(:userId)")
 })
 public class ObservationTimeSeries implements Serializable {
 
@@ -53,10 +53,14 @@ public class ObservationTimeSeries implements Serializable {
     private VipsLogicUser lastModifiedByUser; // Transient
     private Integer locationPointOfInterestId;
     private PointOfInterest locationPointOfInterest;
+    private List<Gis> geoInfoList;
     private Boolean locationIsPrivate;
     private PolygonService polygonService;
 
+    private GISEntityUtil GISEntityUtil;
+
     public ObservationTimeSeries() {
+        this.GISEntityUtil = new GISEntityUtil();
     }
 
     public ObservationTimeSeries(String source) {
@@ -324,6 +328,17 @@ public class ObservationTimeSeries implements Serializable {
         this.locationPointOfInterest = locationPointOfInterest;
     }
 
+    public void setGeoInfoList(List<Gis> geoInfoList) {
+        this.geoInfoList = geoInfoList;
+    }
+
+    @Transient
+    public String getGeoInfo() {
+        Map<String, Object> properties = new HashMap<>();
+        properties.put("observationTimeSeriesId", this.getObservationTimeSeriesId());
+        return this.GISEntityUtil.getGeoJSONFromGis(this.geoInfoList, properties);
+    }
+
     /**
      * @return the locationIsPrivate
      */
@@ -373,24 +388,25 @@ public class ObservationTimeSeries implements Serializable {
     @Override
     public String toString() {
         return "ObservationTimeSeries{" +
-                "observationTimeSeriesId=" + observationTimeSeriesId +
-                ", cropOrganism=" + cropOrganism +
-                ", organism=" + organism +
-                ", year=" + year +
-                ", name='" + name + '\'' +
-                ", description='" + description + '\'' +
-                ", created=" + created +
-                ", userId=" + userId +
-                ", user=" + user +
-                ", source=" + source +
-                ", lastModified=" + lastModified +
-                ", lastModifiedBy=" + lastModifiedBy +
-                ", lastModifiedByUser=" + lastModifiedByUser +
-                ", locationPointOfInterestId=" + locationPointOfInterestId +
-                ", locationPointOfInterest=" + locationPointOfInterest +
-                ", locationIsPrivate=" + locationIsPrivate +
-                ", polygonService=" + polygonService +
-                '}';
+            "observationTimeSeriesId=" + observationTimeSeriesId +
+            ", cropOrganism=" + cropOrganism +
+            ", organism=" + organism +
+            ", year=" + year +
+            ", name='" + name + '\'' +
+            ", description='" + description + '\'' +
+            ", created=" + created +
+            ", userId=" + userId +
+            ", user=" + user +
+            ", source=" + source +
+            ", lastModified=" + lastModified +
+            ", lastModifiedBy=" + lastModifiedBy +
+            ", lastModifiedByUser=" + lastModifiedByUser +
+            ", locationPointOfInterestId=" + locationPointOfInterestId +
+            ", locationPointOfInterest=" + locationPointOfInterest +
+            ", geoInfoList=" + geoInfoList +
+            ", locationIsPrivate=" + locationIsPrivate +
+            ", polygonService=" + polygonService +
+            '}';
     }
 
     public int compareTo(ObservationTimeSeries other) {
diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java
index 600ba45032fefc4916db8fad82cfaf7528b2a297..e18d4d5333d34da98f695329e3c269f0aa84408c 100644
--- a/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java
+++ b/src/main/java/no/nibio/vips/logic/service/ObservationTimeSeriesService.java
@@ -33,9 +33,9 @@ import java.util.stream.Collectors;
 
 @Path("rest/observationtimeseries")
 public class ObservationTimeSeriesService {
+    private final static Logger LOGGER = LoggerFactory.getLogger(ObservationTimeSeriesService.class);
 
     public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
-    private final static Logger LOGGER = LoggerFactory.getLogger(ObservationTimeSeriesService.class);
     private static final String DELETED = "deleted";
     private static final String OBSERVATION_TIME_SERIES_ID = "observationTimeSeriesId";
     private static final String ORGANISM_ID = "organismId";
@@ -62,7 +62,6 @@ public class ObservationTimeSeriesService {
     @Produces(APPLICATION_JSON)
     @TypeHint(ObservationTimeSeries[].class)
     public Response getObservationsTimeSeriesForUser(@QueryParam("observationTimeSeriesIds") String otsIds) {
-        LOGGER.info("In getObservationsTimeSeriesForUser observationTimeSeriesIds=" + otsIds);
         try {
             VipsLogicUser user = userBean.getUserFromUUID(httpServletRequest);
             if (user != null) {
@@ -112,9 +111,15 @@ public class ObservationTimeSeriesService {
         boolean requesterNotValidUser = requester == null;
         boolean requesterRegularUser = requester != null && !requester.isSuperUser() && !requester.isOrganizationAdmin();
         boolean requesterNotCreator = requester != null && !ots.getUserId().equals(requester.getUserId());
+
         if (requesterNotValidUser || requesterRegularUser) {
+            // Hide completely for all users except creator, super and orgadmin
+            if (ots.getLocationIsPrivate() && (requesterNotValidUser || requesterNotCreator)) {
+                ots.setGeoInfoList(new ArrayList<>());
+            }
             // Mask for all users except creator, super and orgadmin
-            if (!(ots.getLocationIsPrivate() && (requesterNotValidUser || requesterNotCreator)) && ots.getPolygonService() != null) {
+            else if (ots.getPolygonService() != null) {
+                observationTimeSeriesBean.enrichObservationTimeSeriesWithPointOfInterest(ots);
                 this.maskLocation(ots.getPolygonService(), ots);
             }
         }
@@ -141,16 +146,17 @@ public class ObservationTimeSeriesService {
         // We need to loop through the observations and find corresponding featurecollections and replace those
         Map<Integer, Feature> indexedPolygons = new HashMap<>();
         for (Feature feature : response.getFeatureCollection().getFeatures()) {
-            indexedPolygons.put((Integer) feature.getProperties().get(OBSERVATION_TIME_SERIES_ID), feature);
+            indexedPolygons.put((Integer) feature.getProperties().get("id"), feature);
         }
         GISEntityUtil gisEntityUtil = new GISEntityUtil();
         for (Map mapping : response.getMapping()) {
-            Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get(OBSERVATION_TIME_SERIES_ID));
+            Integer observationTimeSeriesId = Integer.valueOf((String) mapping.get("id"));
             if (observationTimeSeries.getObservationTimeSeriesId().equals(observationTimeSeriesId)) {
                 Integer borderId = (Integer) mapping.get("borderid");
                 Gis polygon = gisEntityUtil.getGisFromFeature(indexedPolygons.get(borderId));
                 List<Gis> gis = new ArrayList<>();
                 gis.add(polygon);
+                observationTimeSeries.setGeoInfoList(gis);
                 observationTimeSeries.setLocationPointOfInterest(null);
                 observationTimeSeries.setLocationPointOfInterestId(null);
             }