diff --git a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
index a4f38659c67d49e5f11b04ee958b3ccfe5485e11..0100e091eba22d206ae3ddab7b164ec5fc0e74f5 100644
--- a/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
+++ b/src/main/java/no/nibio/vips/logic/VIPSLogicApplication.java
@@ -48,6 +48,7 @@ public class VIPSLogicApplication extends Application
         resources.add(no.nibio.vips.logic.service.LogicService.class);
         resources.add(no.nibio.vips.logic.service.VIPSMobileService.class);
         resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class);
+        resources.add(no.nibio.vips.logic.modules.roughage.RoughageService.class);
         //resources.add(no.nibio.vips.logic.service.JacksonConfig.class);
         //resources.add(no.nibio.vips.coremanager.service.ManagerResourceImpl.class);
     }
@@ -60,6 +61,7 @@ public class VIPSLogicApplication extends Application
     private void addRestResourceClasses(Set<Class<?>> resources) {
         
         resources.add(no.nibio.vips.logic.modules.barleynetblotch.BarleyNetBlotchModelService.class);
+        resources.add(no.nibio.vips.logic.modules.roughage.RoughageService.class);
         resources.add(no.nibio.vips.logic.service.JacksonConfig.class);
         resources.add(no.nibio.vips.logic.service.LogicService.class);
         resources.add(no.nibio.vips.logic.service.VIPSMobileService.class);
diff --git a/src/main/java/no/nibio/vips/logic/modules/barleynetblotch/BarleyNetBlotchModelService.java b/src/main/java/no/nibio/vips/logic/modules/barleynetblotch/BarleyNetBlotchModelService.java
index 3ffc0a8b19bdae5b3f83ea7d06b527b123830114..0e07d1f1f270e5ddbfc78ec9e0be6439627666f5 100644
--- a/src/main/java/no/nibio/vips/logic/modules/barleynetblotch/BarleyNetBlotchModelService.java
+++ b/src/main/java/no/nibio/vips/logic/modules/barleynetblotch/BarleyNetBlotchModelService.java
@@ -24,22 +24,15 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.TimeZone;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
-import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
-import no.nibio.vips.coremanager.service.ManagerResource;
 import no.nibio.vips.entity.ModelConfiguration;
 import no.nibio.vips.entity.Result;
 import no.nibio.vips.entity.WeatherObservation;
@@ -56,7 +49,6 @@ import no.nibio.vips.util.ParseRESTParamUtil;
 import no.nibio.vips.util.WeatherElements;
 import no.nibio.vips.util.weather.WeatherDataSourceException;
 import no.nibio.vips.util.weather.WeatherDataSourceUtil;
-import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
 
 /**
  * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a>
diff --git a/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java b/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java
new file mode 100644
index 0000000000000000000000000000000000000000..a07de1403cda25fdd4040d375db2df882d31b358
--- /dev/null
+++ b/src/main/java/no/nibio/vips/logic/modules/roughage/RoughageService.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2015 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.modules.roughage;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.ws.rs.GET;
+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.Response;
+import no.nibio.vips.entity.ModelConfiguration;
+import no.nibio.vips.entity.Result;
+import no.nibio.vips.entity.WeatherObservation;
+import no.nibio.vips.logic.entity.Organization;
+import no.nibio.vips.logic.entity.PointOfInterestWeatherStation;
+import no.nibio.vips.logic.util.RunModelException;
+import no.nibio.vips.logic.util.SessionControllerGetter;
+import no.nibio.vips.logic.util.SystemTime;
+import no.nibio.vips.util.ParseRESTParamUtil;
+import no.nibio.vips.util.WeatherElements;
+import no.nibio.vips.util.WeatherUtil;
+import no.nibio.vips.util.weather.WeatherDataSourceException;
+import no.nibio.vips.util.weather.WeatherDataSourceUtil;
+
+/**
+ * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a>
+ * @author Tor-Einar Skog <tor-einar.skog@nibio.no>
+ */
+@Path("rest/roughage")
+public class RoughageService {
+    private final static String VIPSCOREMANAGER_URL = System.getProperty("no.nibio.vips.logic.VIPSCOREMANAGER_URL");
+
+    @PersistenceContext(unitName="VIPSLogic-PU")
+    EntityManager em;
+    
+    @GET
+    @Path("nutrition/runmodel/{organizationId}")
+    @Produces("application/json;charset=UTF-8")
+    public Response runModel(
+            @PathParam("organizationId") Integer organizationId,
+            @QueryParam("timeZone") String timeZoneStr,
+            @QueryParam("weatherStationId") Integer weatherStationId,
+            @QueryParam("firstHarvest") String firstHarvestStr,
+            @QueryParam("secondHarvest") String secondHarvestStr,
+            @QueryParam("soilType") Integer soilType,
+            @QueryParam("cloverShare") Integer cloverShare
+    )
+    {
+        ParseRESTParamUtil parseUtil = new ParseRESTParamUtil();
+        TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
+        Date firstHarvest = parseUtil.parseISODate(firstHarvestStr, timeZone);
+        Date secondHarvest = secondHarvestStr != null ? parseUtil.parseISODate(secondHarvestStr, timeZone) : null;
+        // Calculating start and end date of weather data retrieval
+        // Start is April 1st
+        Calendar cal = Calendar.getInstance(timeZone);
+        cal.setTime(firstHarvest);
+        cal.set(Calendar.MONTH, Calendar.APRIL);
+        cal.set(Calendar.DATE, 1);
+        Date aprilFirst = new WeatherUtil().normalizeToExactDate(cal.getTime(), timeZone);
+        // End date for weather data depends on season
+        // We try September 30th. If that's in the future,
+        // We add 10 days to today
+        Date dateOfLastWeatherData;
+        cal.setTime(aprilFirst);
+        cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
+        cal.set(Calendar.DATE, 30);
+        Date endOfSeptember = cal.getTime();
+        if(endOfSeptember.after(SystemTime.getSystemTime()))
+        {
+            cal.setTime(SystemTime.getSystemTime());
+            cal.add(Calendar.DATE, 10);
+            dateOfLastWeatherData = cal.getTime();
+        }
+        else
+        {
+            dateOfLastWeatherData = endOfSeptember;
+        }
+        
+        PointOfInterestWeatherStation weatherStation = em.find(PointOfInterestWeatherStation.class, weatherStationId);
+        WeatherDataSourceUtil wsdUtil = new WeatherDataSourceUtil();
+        
+        // Getting the weather observations
+        List<WeatherObservation> observations;
+        try {
+             observations = wsdUtil.getWeatherObservations(
+                    weatherStation,
+                    WeatherObservation.LOG_INTERVAL_ID_1D,
+                    new String[]{
+                        WeatherElements.TEMPERATURE_MEAN,
+                        WeatherElements.PRECIPITATION,
+                        WeatherElements.GLOBAL_RADIATION,
+                        WeatherElements.SOIL_TEMPERATURE_10CM_MEAN,
+                        WeatherElements.POTENTIAL_EVAPORATION
+                    },
+                    aprilFirst, 
+                    dateOfLastWeatherData
+            );
+        } catch (WeatherDataSourceException ex) {
+            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build();
+        }
+        
+        ModelConfiguration config = new ModelConfiguration();
+        config.setModelId("ROUGHAGENU");
+        config.setConfigParameter("observations", observations);
+        config.setConfigParameter("timeZone", timeZone.getID());
+        config.setConfigParameter("firstHarvest", firstHarvest);
+        config.setConfigParameter("soilType", soilType);
+        config.setConfigParameter("cloverShare", cloverShare);
+        
+        // Optional parameters
+        if(secondHarvest != null)
+        {
+            config.setConfigParameter("secondHarvest", secondHarvest);
+        }
+        // Must get the VIPSCore user id for this organization
+        Organization org = em.find(Organization.class, organizationId);
+        Integer VIPSCoreUserId = org.getDefaultVipsCoreUserId();
+        
+        List<Result> results;
+        try
+        {
+             results = SessionControllerGetter.getForecastBean().runForecast(config, VIPSCoreUserId);
+        }
+        catch(RunModelException ex)
+        {
+            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ex.getMessage()).build();
+        }
+        return Response.ok().entity(results).build();
+    }
+}