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 b7cec04e22028cf0cd6bfa1ba3dd15ee23e3a116..68311535e771bf22bfa05ee261e40a6a729c8ecd 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
@@ -237,7 +237,7 @@ public class ObservationBean {
         em.remove(observation);
     }
 
-    public Object getBroadcastObservations(Integer organizationId) {
+    public List<Observation> getBroadcastObservations(Integer organizationId) {
         Organization organization= em.find(Organization.class, organizationId);
         /*List<VipsLogicUser> users = em.createNamedQuery("VipsLogicUser.findByOrganizationId", VipsLogicUser.class)
                                         .setParameter("organizationId", organization)
diff --git a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java
index 066d47f865d8a1e280a0a4f7832bc5aa67b9bfc1..7728d10d225c986ab3efadf734890c4ad7534785 100755
--- a/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java
+++ b/src/main/java/no/nibio/vips/logic/controller/session/OrganismBean.java
@@ -326,13 +326,11 @@ public class OrganismBean {
                 .setParameter("cropCategoryIds", cropCategoryIds)
                 .getResultList();
         List<Integer> retVal = new ArrayList<>();
-        for(CropCategory cc:cropCategories)
-        {
-            if(cc.getCropOrganismIds() != null)
-            {
-                retVal.addAll(Arrays.asList(cc.getCropOrganismIds()));
-            }
-        }
+        cropCategories.stream()
+                .filter((cc) -> (cc.getCropOrganismIds() != null))
+                .forEachOrdered((cc) -> {
+                    retVal.addAll(Arrays.asList(cc.getCropOrganismIds()));
+                });
         
         return retVal;
     }
diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f6351266e4836dc855f0b95c55e39b4a457bf4c
--- /dev/null
+++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCrop.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017 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.entity.vipsmobile;
+
+import no.nibio.vips.logic.entity.Organism;
+
+/**
+ * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a>
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+public class VIPSMobileCrop {
+
+    private Integer kulturId;
+    private String kulturNavn;
+    public VIPSMobileCrop(Organism organism, String locale){
+        this.kulturId = organism.getOrganismId();
+        this.kulturNavn = organism.getLocalName(locale);
+    }
+
+    /**
+     * @return the kulturId
+     */
+    public Integer getKulturId() {
+        return kulturId;
+    }
+
+    /**
+     * @param kulturId the kulturId to set
+     */
+    public void setKulturId(Integer kulturId) {
+        this.kulturId = kulturId;
+    }
+
+    /**
+     * @return the kulturNavn
+     */
+    public String getKulturNavn() {
+        return kulturNavn;
+    }
+
+    /**
+     * @param kulturNavn the kulturNavn to set
+     */
+    public void setKulturNavn(String kulturNavn) {
+        this.kulturNavn = kulturNavn;
+    }
+}
diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d367199553fadae1f7bcc8ec93323969f36200a
--- /dev/null
+++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileCropCategory.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2017 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.entity.vipsmobile;
+
+import java.util.ArrayList;
+import java.util.List;
+import no.nibio.vips.logic.entity.CropCategory;
+import no.nibio.vips.logic.entity.Organism;
+
+/**
+ * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a>
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+public class VIPSMobileCropCategory {
+    private List<VIPSMobileCrop> kulturer;
+    private List<Organism> crops;
+    private Integer varselKulturKategoriId;
+    private String varselKulturKategoriNavn;
+    private Integer ordering;
+    
+    public VIPSMobileCropCategory(CropCategory cc, List<Organism> organisms, String locale){
+        this.varselKulturKategoriId = cc.getCropCategoryId();
+        this.varselKulturKategoriNavn = cc.getLocalName(locale);
+        this.ordering = cc.getCropCategoryId();
+        this.kulturer = new ArrayList<>();
+        organisms.stream().forEach(organism -> {
+                this.kulturer.add(new VIPSMobileCrop(organism, locale));
+            });
+    }
+
+    /**
+     * @return the kulturer
+     */
+    public List<VIPSMobileCrop> getKulturer() {
+        return kulturer;
+    }
+
+    /**
+     * @param kulturer the kulturer to set
+     */
+    public void setKulturer(List<VIPSMobileCrop> kulturer) {
+        this.kulturer = kulturer;
+    }
+
+    /**
+     * @return the varselKulturKategoriId
+     */
+    public Integer getVarselKulturKategoriId() {
+        return varselKulturKategoriId;
+    }
+
+    /**
+     * @param varselKulturKategoriId the varselKulturKategoriId to set
+     */
+    public void setVarselKulturKategoriId(Integer varselKulturKategoriId) {
+        this.varselKulturKategoriId = varselKulturKategoriId;
+    }
+
+    /**
+     * @return the varselKulturKategoriNavn
+     */
+    public String getVarselKulturKategoriNavn() {
+        return varselKulturKategoriNavn;
+    }
+
+    /**
+     * @param varselKulturKategoriNavn the varselKulturKategoriNavn to set
+     */
+    public void setVarselKulturKategoriNavn(String varselKulturKategoriNavn) {
+        this.varselKulturKategoriNavn = varselKulturKategoriNavn;
+    }
+
+    /**
+     * @return the ordering
+     */
+    public Integer getOrdering() {
+        return ordering;
+    }
+
+    /**
+     * @param ordering the ordering to set
+     */
+    public void setOrdering(Integer ordering) {
+        this.ordering = ordering;
+    }
+}
diff --git a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java
index 5c317dc33db4774a9a7422a4f05b74d36dc2bc21..26056734003db1d0d0594533b8da55d61554dc8f 100755
--- a/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java
+++ b/src/main/java/no/nibio/vips/logic/entity/vipsmobile/VIPSMobileMessage.java
@@ -19,13 +19,14 @@
 
 package no.nibio.vips.logic.entity.vipsmobile;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
 
 /**
  * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a>
  * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
  */
-public class VIPSMobileMessage {
+public class VIPSMobileMessage implements Comparable{
     
     private int meldingId;
     private String tittel;
@@ -119,6 +120,7 @@ public class VIPSMobileMessage {
     /**
      * @return the registrertDato
      */
+    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
     public Date getRegistrertDato() {
         return registrertDato;
     }
@@ -133,6 +135,7 @@ public class VIPSMobileMessage {
     /**
      * @return the gyldigTilDato
      */
+    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
     public Date getGyldigTilDato() {
         return gyldigTilDato;
     }
@@ -191,4 +194,9 @@ public class VIPSMobileMessage {
         return true;
     }
 
+    @Override
+    public int compareTo(Object t) {
+        return this.getRegistrertDato().compareTo(((VIPSMobileMessage)t).getRegistrertDato());
+    }
+
 }
diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java
index 0a6fd37c8dac19777b7319c8d279b6f6fb070e63..65dc4caa549642aa6e70ecfe817e9104e4a2abe5 100755
--- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java
+++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java
@@ -19,10 +19,7 @@
 
 package no.nibio.vips.logic.service;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.URI;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -33,21 +30,18 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
 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.logic.entity.Gis;
 import no.nibio.vips.logic.entity.Observation;
 import no.nibio.vips.logic.entity.VipsLogicUser;
 import no.nibio.vips.logic.util.GISUtil;
 import no.nibio.vips.logic.util.Globals;
 import no.nibio.vips.logic.util.SessionControllerGetter;
 import org.jboss.resteasy.annotations.GZIP;
-import org.jboss.resteasy.spi.HttpRequest;
 
 /**
  * @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a>
diff --git a/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java
index a0d87a46d806d96e366a7138de74abdec9db2a54..afa72b28851ab91762e304a5dd7810be88e8b50d 100755
--- a/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java
+++ b/src/main/java/no/nibio/vips/logic/service/VIPSMobileService.java
@@ -19,8 +19,11 @@
 
 package no.nibio.vips.logic.service;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -28,6 +31,7 @@ import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.TimeZone;
+import javax.json.JsonObject;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -37,14 +41,18 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 import no.nibio.vips.entity.Result;
+import no.nibio.vips.logic.entity.CropCategory;
 import no.nibio.vips.logic.entity.ForecastConfiguration;
 import no.nibio.vips.logic.entity.ForecastSummary;
 import no.nibio.vips.logic.entity.Message;
 import no.nibio.vips.logic.entity.MessageIllustration;
 import no.nibio.vips.logic.entity.MessageLocale;
 import no.nibio.vips.logic.entity.ModelInformation;
+import no.nibio.vips.logic.entity.Observation;
+import no.nibio.vips.logic.entity.Organism;
 import no.nibio.vips.logic.entity.PointOfInterestWeatherStation;
 import no.nibio.vips.logic.entity.VipsLogicUser;
+import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileCropCategory;
 import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileForecast;
 import no.nibio.vips.logic.entity.vipsmobile.VIPSMobileMessage;
 import no.nibio.vips.logic.entity.vipsmobile.VIPSMobilePresentation;
@@ -59,7 +67,7 @@ import org.jboss.resteasy.spi.HttpRequest;
  * were implemented in the old VIPS. It's assumed that it's easier to adapt the
  * service layer than the client layer in Sencha Touch...
  * 
- * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a>
+ * @copyright 2017 <a href="http://www.nibio.no/">NIBIO</a>
  * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
  */
 @Path("rest/vipsmobile")
@@ -70,6 +78,7 @@ public class VIPSMobileService {
     @Context
     private HttpServletRequest httpServletRequest;
     
+    // TODO: Add observation messages
     @GET
     @Path("melding")
     @Produces("application/json;charset=UTF-8")
@@ -114,10 +123,12 @@ public class VIPSMobileService {
                 
                 String imageURL = "";
                 String imageCaption = "";
+                Integer messageTagId = 2; // Default: Advisory system message
                 try
                 {
                     MessageIllustration illustration = message.getMessageIllustrationSet().iterator().next();
                     imageURL = String.format("/static/images/messages/%s/%s", pragmaticBestLocale.getCreatedBy().getOrganizationId().getOrganizationId(), illustration.getMessageIllustrationPK().getFileName());
+                    messageTagId = message.getMessageTagSet().iterator().next().getMessageTagId();
                 }catch(NoSuchElementException | NullPointerException ex){}
                 
                 VIPSMobileMessage vmMessage = new VIPSMobileMessage(
@@ -127,7 +138,7 @@ public class VIPSMobileService {
                         pragmaticBestLocale.getBody(),
                         message.getDatePub(),
                         message.getDateValidTo(),
-                        message.getMessageTagSet().iterator().next().getMessageTagId(),
+                        messageTagId,
                         imageURL,
                         "Test"
                 );
@@ -135,9 +146,65 @@ public class VIPSMobileService {
                 retVal.add(vmMessage);
             }
             
+            // TODO Add observation messages
+            // Using code specific to current VIPSMobile app
+            Integer observationMessageTagId = 1;
+            List<Observation> broadcastObservations = SessionControllerGetter.getObservationBean().getBroadcastObservations(organizationId);
+            // Making an observation message valid for 3 months by default
+            Calendar cal = Calendar.getInstance();
+            broadcastObservations.stream().forEach(
+                    obs -> {
+                        cal.setTime(obs.getTimeOfObservation());
+                        cal.add(Calendar.MONTH, 3);
+                        Date msgValidTo = cal.getTime();
+                        VIPSMobileMessage vmMessage = new VIPSMobileMessage(
+                            obs.getObservationId() * 1000000,
+                            obs.getObservationHeading(),
+                            "",
+                            obs.getObservationText(),
+                            obs.getTimeOfObservation(),
+                            msgValidTo,
+                            observationMessageTagId,
+                            "",
+                            "Test"
+                        );
+                        retVal.add(vmMessage);
+                    }
+            );
+            Collections.sort(retVal, Collections.reverseOrder());
             return Response.ok().entity(retVal).build();
     }
     
+    @GET
+    @Path("varselkulturkategorier")
+    @Produces("application/json;charset=UTF-8")
+    public Response getCropCategories(
+            @QueryParam("organizationId") Integer organizationId,
+            @QueryParam("locale") String locale
+        )
+    {
+        List<Organism> cropList = SessionControllerGetter.getOrganismBean().getAllCrops();
+        Map<Integer, Organism> allCrops = new HashMap<>();
+        cropList.forEach((crop) -> {
+            allCrops.put(crop.getOrganismId(), crop);
+        });
+        List<CropCategory> cropCategories = SessionControllerGetter.getOrganismBean().getCropCategories(organizationId);
+        List<VIPSMobileCropCategory> retVal = new ArrayList<>();
+        cropCategories.stream().forEach(
+                cc -> {
+                    List<Organism> ccCropList = new ArrayList<>();
+                    Arrays.asList(cc.getCropOrganismIds()).stream().forEach(
+                            cropId -> {
+                                ccCropList.add(allCrops.get(cropId));
+                            }
+                    );
+                    retVal.add(new VIPSMobileCropCategory(cc, ccCropList, "nb"));
+                }
+        );
+        
+        return Response.ok().entity(retVal).build();
+    }
+    
     @GET
     @Path("presentasjoner")
     @Produces("application/json;charset=UTF-8")
@@ -272,7 +339,7 @@ public class VIPSMobileService {
         Date to = SystemTime.getSystemTime();
         Calendar cal = Calendar.getInstance();
         cal.setTime(to);
-        cal.add(Calendar.MONTH, -2);
+        cal.set(Calendar.MONTH, Calendar.JANUARY);
         Date from = cal.getTime();
         
         PointOfInterestWeatherStation station = (PointOfInterestWeatherStation) SessionControllerGetter.getPointOfInterestBean().getPointOfInterest(klimastasjonId);