diff --git a/.gitignore b/.gitignore
index 4bc1e934d1a2494c4b7a08a7b94ce0c6f5834c65..7a03f2e8852777aa499889951a5d5d8b610df740 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 target/
 classes/
+modules/
 *~
diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java
index 70346b7414e1bf74343100156903bfe29e8c2106..8ea9ba4f9bc0c64b8cbba27c29bbefcfbccb79a0 100644
--- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java
+++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/OptimizationObservation.java
@@ -28,25 +28,44 @@ import java.util.Date;
 public class OptimizationObservation implements Comparable{
 
     private Date date;
-    private float hoyde;
-    private float utviklingstrinn;
-    private float NDF;
-    private float INDF;
-    private float raaprotein;
-    private float FEm;
+    private Double height;
+    private Double MSC;
+    private Double NDF;
+    private Double INDF;
+    private Double rawProtein;
+    private Double FEm;
 
     public OptimizationObservation()
     {
         
     }
+    
+    public OptimizationObservation(
+            Date date,
+            Double height,
+            Double MSC,
+            Double NDF,
+            Double INDF,
+            Double rawProtein,
+            Double FEm
+    )
+    {
+        this.date = date;
+        this.height = height;
+        this.MSC = MSC;
+        this.NDF = NDF;
+        this.INDF = INDF;
+        this.rawProtein = rawProtein;
+        this.FEm = FEm;
+    }
 
     /**
      * Bruker formelen Avling (kg TS/daa) = 34.86 * 0.017h<sup>2</sup> + 10.21h
      * @return
      */
-    public float getAvling()
+    public Double getAvling()
     {
-        return 34.86f + 0.017f * (float) Math.pow(this.getHoyde(), 2) + 10.21f * this.getHoyde();
+        return 34.86f + 0.017f * (Double) Math.pow(this.getHeight(), 2) + 10.21f * this.getHeight();
     }
 
     @Override
@@ -77,86 +96,86 @@ public class OptimizationObservation implements Comparable{
     }
 
     /**
-     * @return the hoyde
+     * @return the height
      */
-    public float getHoyde() {
-        return hoyde;
+    public Double getHeight() {
+        return height;
     }
 
     /**
-     * @param hoyde the hoyde to set
+     * @param height the height to set
      */
-    public void setHoyde(float hoyde) {
-        this.hoyde = hoyde;
+    public void setHeight(Double height) {
+        this.height = height;
     }
 
     /**
-     * @return the utviklingstrinn
+     * @return the MSC
      */
-    public float getUtviklingstrinn() {
-        return utviklingstrinn;
+    public Double getMSC() {
+        return MSC;
     }
 
     /**
-     * @param utviklingstrinn the utviklingstrinn to set
+     * @param MSC the MSC to set
      */
-    public void setUtviklingstrinn(float utviklingstrinn) {
-        this.utviklingstrinn = utviklingstrinn;
+    public void setMSC(Double MSC) {
+        this.MSC = MSC;
     }
 
     /**
      * @return the NDF
      */
-    public float getNDF() {
+    public Double getNDF() {
         return NDF;
     }
 
     /**
      * @param NDF the NDF to set
      */
-    public void setNDF(float NDF) {
+    public void setNDF(Double NDF) {
         this.NDF = NDF;
     }
 
     /**
      * @return the INDF
      */
-    public float getINDF() {
+    public Double getINDF() {
         return INDF;
     }
 
     /**
      * @param INDF the INDF to set
      */
-    public void setINDF(float INDF) {
+    public void setINDF(Double INDF) {
         this.INDF = INDF;
     }
 
     /**
-     * @return the raaprotein
+     * @return the rawProtein
      */
-    public float getRaaprotein() {
-        return raaprotein;
+    public Double getRawProtein() {
+        return rawProtein;
     }
 
     /**
-     * @param raaprotein the raaprotein to set
+     * @param rawProtein the rawProtein to set
      */
-    public void setRaaprotein(float raaprotein) {
-        this.raaprotein = raaprotein;
+    public void setRawProtein(Double rawProtein) {
+        this.rawProtein = rawProtein;
     }
 
     /**
      * @return the FEm
      */
-    public float getFEm() {
+    public Double getFEm() {
         return FEm;
     }
 
     /**
      * @param FEm the FEm to set
      */
-    public void setFEm(float FEm) {
+    public void setFEm(Double FEm) {
         this.FEm = FEm;
     }
 
diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java
index f2236ab89c1ceb739d3c731745373c2f19b266dd..3c70f822e22072986c81d8696e5b3ff4996accb8 100644
--- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java
+++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModel.java
@@ -21,6 +21,8 @@ package no.bioforsk.vips.model.roughagenutritionmodel;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -80,7 +82,19 @@ public class RoughageNutritionModel implements Model {
     @Override
     public List<Result> getResult() throws ModelExcecutionException {
         RoughageNutritionModelImpl impl = new RoughageNutritionModelImpl();
-        ResultMatrix resultMatrix = impl.beregnModell(TMD, TJM10D, RRD, EPPD, Q0D, firstHarvest, secondHarvest, soilType, cloverShare, optimizationObservations, timeZone);
+        ResultMatrix resultMatrix = impl.beregnModell(
+                TMD, 
+                TJM10D, 
+                RRD, 
+                EPPD, 
+                Q0D, 
+                firstHarvest, 
+                secondHarvest, 
+                soilType, 
+                cloverShare, 
+                optimizationObservations, 
+                timeZone
+        );
         
         List<Result> results = new ArrayList<>();
         
@@ -283,9 +297,10 @@ public class RoughageNutritionModel implements Model {
         {
             this.cloverShare = mapper.convertValue(config.getConfigParameter("cloverShare"), Integer.class);
         }
-        if(config.getConfigParameter("optimizationObsevations") != null)
+        if(config.getConfigParameter("optimizationInfo") != null)
         {
-            this.optimizationObservations = mapper.convertValue(config.getConfigParameter("optimizatioObservations"), new TypeReference<List<OptimizationObservation>>(){});
+            List<String> optimizationInfo = mapper.convertValue(config.getConfigParameter("optimizationInfo"), new TypeReference<List<String>>(){});
+            this.optimizationObservations = this.parseOptimizationInfo(optimizationInfo, this.timeZone);
         }
         
         
@@ -437,4 +452,29 @@ public class RoughageNutritionModel implements Model {
         }
     }
 
+    private List<OptimizationObservation> parseOptimizationInfo(List<String> optimizationInfo, TimeZone timeZone) {
+        List<OptimizationObservation> retVal = new ArrayList<>();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        format.setTimeZone(timeZone);
+        for(String line:optimizationInfo)
+        {
+            String[] parts = line.split(",");
+            try
+            {
+                OptimizationObservation optObs = new OptimizationObservation(
+                        format.parse(parts[0]), // Date
+                        Double.parseDouble(parts[1]), // Height
+                        Double.parseDouble(parts[2]), // MSC
+                        Double.parseDouble(parts[3]), // FEm
+                        Double.parseDouble(parts[4]), // NDF
+                        Double.parseDouble(parts[5]), // INDF
+                        Double.parseDouble(parts[6]) // Raw protein
+                );
+               retVal.add(optObs);
+            }
+            catch(ArrayIndexOutOfBoundsException | ParseException ex) {}
+        }
+        return retVal;
+    }
+
 }
diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java
index 6deb917aa814e4e14248095b99eeaa9fc822319d..49d3b00a63f0a4643857ce0059c96a2e04fde268 100644
--- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java
+++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java
@@ -2064,7 +2064,7 @@ public class RoughageNutritionModelImpl implements CostFunction{
                 {
                     try {
                         OptimizationObservation observasjon = i.next();
-                        maaltUtviklingstrinn = observasjon.getUtviklingstrinn();
+                        maaltUtviklingstrinn = observasjon.getMSC();
                         // Tar høyde for at observasjonen ikke inneholder måling av utviklingstrinn
                         if(maaltUtviklingstrinn < 0)
                             continue;
@@ -2558,10 +2558,10 @@ public class RoughageNutritionModelImpl implements CostFunction{
         for(ListIterator<OptimizationObservation> i=this.observasjoner.listIterator();i.hasNext();)
         {
             OptimizationObservation observasjon = i.next();
-            if(observasjon.getRaaprotein() > 0 && this.getRaaprotein(observasjon.getDate(), this.jordtype) > 0)
+            if(observasjon.getRawProtein() > 0 && this.getRaaprotein(observasjon.getDate(), this.jordtype) > 0)
             {
                 double beregnetNMengde = this.getNMengdeFraRaaprotein(this.getRaaprotein(observasjon.getDate(), this.jordtype), observasjon.getDate(), this.jordtype);
-                double maaltNMengde = this.getNMengdeFraRaaprotein(observasjon.getRaaprotein(), observasjon.getDate(), this.jordtype);
+                double maaltNMengde = this.getNMengdeFraRaaprotein(observasjon.getRawProtein(), observasjon.getDate(), this.jordtype);
 
                 differanseMellomMaaltOgSimulertNMengde = maaltNMengde - beregnetNMengde;
 
@@ -2570,7 +2570,7 @@ public class RoughageNutritionModelImpl implements CostFunction{
                 while(i.hasNext() && grenseDato == null)
                 {
                     OptimizationObservation tmp = i.next();
-                    if(tmp.getRaaprotein() > 0 && this.getRaaprotein(tmp.getDate(), this.jordtype) > 0)
+                    if(tmp.getRawProtein() > 0 && this.getRaaprotein(tmp.getDate(), this.jordtype) > 0)
                         grenseDato = tmp.getDate();
                 }