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 0dd526fecccc7521f3358f8a9d217bfb0ee92934..a9bf20bd46ed7937141b55920256cc261e78ef4d 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
@@ -19,7 +19,9 @@
 
 package no.nibio.vips.logic.controller.session;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -28,8 +30,11 @@ 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.Map.Entry;
+import java.util.ResourceBundle;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.ejb.Stateless;
@@ -37,6 +42,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
+import javax.servlet.http.HttpServletRequest;
 import no.nibio.vips.logic.entity.CropCategory;
 import no.nibio.vips.logic.entity.Gis;
 import no.nibio.vips.logic.entity.Observation;
@@ -49,8 +55,11 @@ import no.nibio.vips.logic.entity.Organization;
 import no.nibio.vips.logic.entity.PointOfInterest;
 import no.nibio.vips.logic.entity.PolygonService;
 import no.nibio.vips.logic.entity.VipsLogicUser;
+import no.nibio.vips.logic.i18n.SessionLocaleUtil;
 import no.nibio.vips.logic.util.SessionControllerGetter;
 import no.nibio.vips.logic.util.SystemTime;
+import no.nibio.vips.observationdata.ObservationDataSchema;
+import no.nibio.vips.observationdata.ObservationDataSchemaPK;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.io.FilenameUtils;
 import org.wololo.geojson.Feature;
@@ -180,7 +189,6 @@ public class ObservationBean {
             {
                 retVal.setLastEditedByUser(em.find(VipsLogicUser.class, retVal.getLastEditedBy()));
             }
-            //ObservationDataSchema schema = 
         }
         return retVal;
     }
@@ -763,5 +771,55 @@ public class ObservationBean {
                 .getResultList().stream()
                 .forEach(obs -> em.remove(obs));
     }
+    
+    /**
+     * Returns the appropriate observation data schema 
+     * If no existing schema, returns the standard (Requring just a number)
+     * @param organizationId
+     * @param organismId
+     * @param httpServletRequest
+     * @return 
+     */
+    public ObservationDataSchema getObservationDataSchema(Integer organizationId, Integer organismId, HttpServletRequest httpServletRequest)
+    {
+        try
+        {
+            return em.createNamedQuery("ObservationDataSchema.findByPK", ObservationDataSchema.class)
+                .setParameter("organizationId", organizationId)
+                .setParameter("organismId", organismId)
+                .getSingleResult();
+            
+            
+        }
+        catch(NoResultException ex)
+        {
+            System.out.println("Could not find schema for orgId " + organizationId + " and organismId " + organismId);
+            return this.getStandardSchema(organizationId);
+        }
+    }
+    
+    /**
+     * 
+     * @param organizationId
+     * @return 
+     */
+    private ObservationDataSchema getStandardSchema(Integer organizationId){
+        ObservationDataSchema retVal = new ObservationDataSchema();
+        retVal.setDataSchema("{"
+                + "\"number\":{\"title\":\"Number\"},"
+                + "\"unit\":{\"title\":\"Unit\"}"
+                + "}");
+        retVal.setDataModel("{"
+                + "\"number\":0,"
+                + "\"unit\":\"Number\""
+                + "}");
+        ObservationDataSchemaPK pk = new ObservationDataSchemaPK();
+        pk.setOrganismId(-1);
+        pk.setOrganizationId(organizationId);
+        retVal.setObservationDataSchemaPK(pk);
+        return retVal;
+    }
+    
+    
 
 }
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 e87c5a595f6cddb3a059223a273b70eb6480108b..a259508d363e7ad2880d85421e7dccd33cde6c1d 100755
--- a/src/main/java/no/nibio/vips/logic/entity/Observation.java
+++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java
@@ -50,6 +50,7 @@ import no.nibio.vips.logic.util.GISEntityUtil;
 import no.nibio.vips.gis.GISUtil;
 import no.nibio.vips.logic.entity.rest.ObservationListItem;
 import no.nibio.vips.logic.util.StringJsonUserType;
+import no.nibio.vips.observationdata.ObservationDataSchema;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 import org.hibernate.annotations.TypeDefs;
@@ -107,7 +108,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
     private Boolean locationIsPrivate;
     private PolygonService polygonService;
     
-    private String observationDataSchema;
+    private ObservationDataSchema observationDataSchema;
     
     private VipsLogicUser user; // Transient
     private VipsLogicUser lastEditedByUser; //
@@ -451,12 +452,12 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
     }
     
     @Transient
-    public String getObservationDataSchema()
+    public ObservationDataSchema getObservationDataSchema()
     {
-        return this.observationDataSchema != null ? this.observationDataSchema : "";
+        return this.observationDataSchema != null ? this.observationDataSchema : null;
     }
     
-    public void setObservationDataSchema(String observationDataSchema)
+    public void setObservationDataSchema(ObservationDataSchema observationDataSchema)
     {
         this.observationDataSchema = observationDataSchema;
     }
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 03b34a0fd35421f1616c4e45cc354bc45e00ba42..e8f504e4ca5921de6974c92358329ef129767d6f 100755
--- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java
+++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java
@@ -360,6 +360,14 @@ public class ObservationService {
     ){
         // Observation needs to be masked here as well, or does it create trouble for VIPSLogic observation admin?
         Observation o = SessionControllerGetter.getObservationBean().getObservation(observationId);
+        if(o == null)
+        {
+            return Response.status(Status.NOT_FOUND).build();
+        }
+        // Which organization does this observation belong to?
+        VipsLogicUser observer = SessionControllerGetter.getUserBean().getVipsLogicUser(o.getUserId());
+        o.setObservationDataSchema(SessionControllerGetter.getObservationBean().getObservationDataSchema(observer.getOrganizationId().getOrganizationId(), o.getOrganismId(), httpServletRequest));
+      
         VipsLogicUser user = (VipsLogicUser) httpServletRequest.getSession().getAttribute("user");
         if(user == null && userUUID != null)
         {
diff --git a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
index 137936753347fca97cc9d732fb3910c93875ef5b..37e72c293862242a343ec2c9b99fbbbcf92d62c5 100755
--- a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
+++ b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java
@@ -55,6 +55,12 @@ public class ObservationDataService {
     
 
 
+    /**
+     * TODO Integrate with ObservationBean.getObservationDataSchema(...)
+     * @param organizationId
+     * @param organismId
+     * @return 
+     */
     @GET
     @Path("schema/{organizationId}/{organismId}")
     @Produces("application/json;charset=UTF-8")