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 626424722cfc63ee27c0361afd0282a531edb1ff..e205348f4a9e392b952760fb525d084c284033a6 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
@@ -29,18 +29,9 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.Path;
 import java.nio.file.StandardOpenOption;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.ResourceBundle;
-import java.util.Set;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.ejb.EJB;
 import javax.ejb.Stateless;
@@ -78,6 +69,9 @@ public class ObservationBean {
     @EJB
     UserBean userBean;
 
+    @EJB
+    ObservationTimeSeriesBean observationTimeSeriesBean;
+
     public List<Observation> getObservations(Integer organizationId) {
         Organization organization = em.find(Organization.class, organizationId);
         List<Observation> observations = em.createNamedQuery("Observation.findByOrganizationId")
@@ -508,6 +502,30 @@ public class ObservationBean {
         return observations;
     }
 
+    public List<Observation> getObservationsWithTimeSeries(List<Observation> observations) {
+        Set<Integer> observationTimeSeriesIds = observations.stream()
+                .map(Observation::getObservationTimeSeriesId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        if (observationTimeSeriesIds.isEmpty()) {
+            return observations;
+        }
+
+        List<ObservationTimeSeries> timeSeriesList = observationTimeSeriesBean.getObservationTimeSeriesList(observationTimeSeriesIds);
+        Map<Integer, ObservationTimeSeries> timeSeriesMap = timeSeriesList.stream()
+                .collect(Collectors.toMap(ObservationTimeSeries::getObservationTimeSeriesId, Function.identity()));
+
+        observations.stream()
+                .filter(o -> o.getObservationTimeSeriesId() != null)
+                .forEach(o -> o.setObservationTimeSeries(timeSeriesMap.get(o.getObservationTimeSeriesId())));
+
+        for (Observation o : observations) {
+            LOGGER.info("{}", o);
+        }
+
+        return observations;
+    }
     private List<Observation> getObservationsWithObservers(List<Observation> observations) {
         Set<Integer> userIds = new HashSet<>();
         observations.stream().filter((o) -> (o.getUserId() != null)).forEach((o) -> {
@@ -642,11 +660,10 @@ public class ObservationBean {
             //start = new Date();
             retVal = this.getObservationsWithLocations(retVal);
             //System.out.println("Finding locations took " + (new Date().getTime() - start.getTime()) + " milliseconds");
+            retVal = this.getObservationsWithTimeSeries(retVal);
         }
 
-
         return retVal;
-
     }
 
     public List<Organism> getObservedPests(Integer organizationId) {
diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationTimeSeriesBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationTimeSeriesBean.java
index eb1ff5752e4d1eff1a37f6809dc23631409f396b..9f11580789bd659f6df481824248564746e2bbb8 100644
--- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationTimeSeriesBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationTimeSeriesBean.java
@@ -18,15 +18,14 @@
 
 package no.nibio.vips.logic.controller.session;
 
-import no.nibio.vips.logic.entity.ObservationTimeSeries;
-import no.nibio.vips.logic.entity.PointOfInterest;
-import no.nibio.vips.logic.entity.VipsLogicUser;
-
+import java.util.*;
 import javax.ejb.EJB;
 import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
-import java.util.*;
+import no.nibio.vips.logic.entity.ObservationTimeSeries;
+import no.nibio.vips.logic.entity.PointOfInterest;
+import no.nibio.vips.logic.entity.VipsLogicUser;
 
 @Stateless
 public class ObservationTimeSeriesBean {
@@ -49,8 +48,13 @@ public class ObservationTimeSeriesBean {
         return resultList;
     }
 
-    public ObservationTimeSeries getObservationTimeSeries(Integer id) {
-        ObservationTimeSeries ots = em.find(ObservationTimeSeries.class, id);
+    /**
+     * Get observation time series with given id. Enrich object with user information before returning.
+     * @param observationTimeSeriesId the id of the observation time series to retrieve
+     * @return the observation time series with the given id
+     */
+    public ObservationTimeSeries getObservationTimeSeries(Integer observationTimeSeriesId) {
+        ObservationTimeSeries ots = em.find(ObservationTimeSeries.class, observationTimeSeriesId);
         if (ots != null) {
             ots.setUser(em.find(VipsLogicUser.class, ots.getUserId()));
             if (ots.getLastModifiedBy() != null) {
@@ -60,6 +64,12 @@ public class ObservationTimeSeriesBean {
         return ots;
     }
 
+    public List<ObservationTimeSeries> getObservationTimeSeriesList(Set<Integer> observationTimeSeriesIds) {
+        return em.createNamedQuery("ObservationTimeSeries.findByObservationTimeSeriesIds")
+                .setParameter("observationTimeSeriesIds", observationTimeSeriesIds)
+                .getResultList();
+    }
+
     /**
      * @param ots the observation time series
      * @return The merged object
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 190d52e6ae9a3513b9e80c0065f7b81bd47becdd..241e0c14ad16f334804c251a2f47dc698315c2f1 100755
--- a/src/main/java/no/nibio/vips/logic/entity/Observation.java
+++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java
@@ -697,6 +697,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
                 ! this.getOrganism().getLocalName(locale).trim().isBlank() ? this.getOrganism().getLocalName(locale) : this.getOrganism().getLatinName(),
                 this.getCropOrganismId(),
                 ! this.getCropOrganism().getLocalName(locale).trim().isBlank() ? this.getCropOrganism().getLocalName(locale) : this.getCropOrganism().getLatinName(),
+                this.observationTimeSeries != null ? this.observationTimeSeries.getLabel() : null,
                 // Specific geoInfo trumps location. This is to be interpreted 
                 // as that the observation has been geographically masked by
                 // choice of the observer
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 b222732163440a174fb531b8d86a2fcfc4dd4ec4..d7adac276d965c3bae93528548e0128be8b5c0f3 100644
--- a/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java
+++ b/src/main/java/no/nibio/vips/logic/entity/ObservationTimeSeries.java
@@ -35,6 +35,7 @@ import java.util.Date;
 @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 OR  v.organizationId IN(SELECT o.organizationId FROM Organization o WHERE o.parentOrganizationId = :organizationId))"),
         @NamedQuery(name = "ObservationTimeSeries.findByUserId", query = "SELECT ots FROM ObservationTimeSeries ots WHERE ots.userId IN(:userId)")
 })
@@ -163,6 +164,21 @@ public class ObservationTimeSeries implements Serializable {
         this.name = name;
     }
 
+    /**
+     * This logic if also implemented in the observation app, see the function timeSeriesLabel in CommonUtil.vue
+     * @return the first eight letters of the given name, in uppercase with spaces removed
+     */
+    @Transient
+    public String getLabel() {
+        if (this.name == null) {
+            return null;
+        }
+        String timeSeriesName = this.name;
+        timeSeriesName = timeSeriesName.replaceAll("\\s", "");
+        timeSeriesName = timeSeriesName.substring(0, Math.min(timeSeriesName.length(), 8));
+        return timeSeriesName.toUpperCase();
+    }
+
     /**
      * @return the description of the observation time series
      */
diff --git a/src/main/java/no/nibio/vips/logic/entity/rest/ObservationListItem.java b/src/main/java/no/nibio/vips/logic/entity/rest/ObservationListItem.java
index ddbc67e31cc1d8864b8da22a8b405344c28518b7..a4dd12f901526bfda95fb6c5edadc1c793218772 100644
--- a/src/main/java/no/nibio/vips/logic/entity/rest/ObservationListItem.java
+++ b/src/main/java/no/nibio/vips/logic/entity/rest/ObservationListItem.java
@@ -30,6 +30,7 @@ public class ObservationListItem implements Comparable{
     private Integer observationId, observationTimeSeriesId, organismId, cropOrganismId;
     private Date timeOfObservation;
     private String organismName, cropOrganismName;
+    private String observationTimeSeriesLabel;
     private String geoInfo;
     private String observationHeading;
     private String observationData;
@@ -46,6 +47,7 @@ public class ObservationListItem implements Comparable{
             String organismName,
             Integer cropOrganismId,
             String cropOrganismName,
+            String observationTimeSeriesLabel,
             String geoinfo,
             String observationHeading,
             Boolean broadcastMessage,
@@ -61,6 +63,7 @@ public class ObservationListItem implements Comparable{
         this.organismName = organismName;
         this.cropOrganismId = cropOrganismId;
         this.cropOrganismName = cropOrganismName;
+        this.observationTimeSeriesLabel = observationTimeSeriesLabel;
         this.geoInfo = geoinfo;
         this.observationHeading = observationHeading;
         this.broadcastMessage = broadcastMessage;
@@ -151,6 +154,14 @@ public class ObservationListItem implements Comparable{
         this.cropOrganismName = cropOrganismName;
     }
 
+    public String getObservationTimeSeriesLabel() {
+        return observationTimeSeriesLabel;
+    }
+
+    public void setObservationTimeSeriesLabel(String observationTimeSeriesLabel) {
+        this.observationTimeSeriesLabel = observationTimeSeriesLabel;
+    }
+
     /**
      * @return the geoInfo
      */