diff --git a/src/main/java/org/eclipse/openk/api/HGridMeasure.java b/src/main/java/org/eclipse/openk/api/HGridMeasure.java
index 0636fb5..084bf3b 100644
--- a/src/main/java/org/eclipse/openk/api/HGridMeasure.java
+++ b/src/main/java/org/eclipse/openk/api/HGridMeasure.java
@@ -116,31 +116,8 @@
 
     @JsonProperty
     @MapDbModelField
-    private Date plannedStarttimeFirstSequence;
-
-    @JsonProperty
-    @MapDbModelField
     private Date plannedStarttimeFirstSinglemeasure;
 
-    @JsonProperty
-    @MapDbModelField
-    private Date plannedEndtimeLastSinglemeasure;
-
-    @JsonProperty
-    @MapDbModelField
-    private Date plannedEndtimeGridmeasure;
-
-    @JsonProperty
-    @MapDbModelField
-    private Date starttimeFirstSequence;
-
-    @JsonProperty
-    @MapDbModelField
-    private Date starttimeFirstSinglemeasure;
-
-    @JsonProperty
-    @MapDbModelField
-    private Date endtimeLastSinglemeasure;
 
     @JsonProperty
     @MapDbModelField
@@ -260,34 +237,10 @@
 
     public void setAppointmentNumberOf(Integer appointmentNumberOf) { this.appointmentNumberOf = appointmentNumberOf; }
 
-    public Date getPlannedStarttimeFirstSequence() { return plannedStarttimeFirstSequence; }
-
-    public void setPlannedStarttimeFirstSequence(Date plannedStarttimeFirstSequence) { this.plannedStarttimeFirstSequence = plannedStarttimeFirstSequence; }
-
     public Date getPlannedStarttimeFirstSinglemeasure() { return plannedStarttimeFirstSinglemeasure; }
 
     public void setPlannedStarttimeFirstSinglemeasure(Date plannedStarttimeFirstSinglemeasure) { this.plannedStarttimeFirstSinglemeasure = plannedStarttimeFirstSinglemeasure; }
 
-    public Date getPlannedEndtimeLastSinglemeasure() { return plannedEndtimeLastSinglemeasure; }
-
-    public void setPlannedEndtimeLastSinglemeasure(Date plannedEndtimeFirstSinglemeasure) { this.plannedEndtimeLastSinglemeasure = plannedEndtimeFirstSinglemeasure; }
-
-    public Date getPlannedEndtimeGridmeasure() { return plannedEndtimeGridmeasure; }
-
-    public void setPlannedEndtimeGridmeasure(Date plannedEndtimeGridmeasure) { this.plannedEndtimeGridmeasure = plannedEndtimeGridmeasure; }
-
-    public Date getStarttimeFirstSequence() { return starttimeFirstSequence; }
-
-    public void setStarttimeFirstSequence(Date starttimeFirstSequence) { this.starttimeFirstSequence = starttimeFirstSequence; }
-
-    public Date getStarttimeFirstSinglemeasure() { return starttimeFirstSinglemeasure; }
-
-    public void setStarttimeFirstSinglemeasure(Date starttimeFirstSinglemeasure) { this.starttimeFirstSinglemeasure = starttimeFirstSinglemeasure; }
-
-    public Date getEndtimeLastSinglemeasure() { return endtimeLastSinglemeasure; }
-
-    public void setEndtimeLastSinglemeasure(Date endtimeFirstSinglemeasure) { this.endtimeLastSinglemeasure = endtimeFirstSinglemeasure; }
-
     public Date getEndtimeGridmeasure() { return endtimeGridmeasure; }
 
     public void setEndtimeGridmeasure(Date endtimeGridmeasure) { this.endtimeGridmeasure = endtimeGridmeasure; }
diff --git a/src/main/java/org/eclipse/openk/db/model/HTblGridMeasure.java b/src/main/java/org/eclipse/openk/db/model/HTblGridMeasure.java
index a47efdc..92e5daa8 100644
--- a/src/main/java/org/eclipse/openk/db/model/HTblGridMeasure.java
+++ b/src/main/java/org/eclipse/openk/db/model/HTblGridMeasure.java
@@ -86,27 +86,9 @@
     @Column (name= "appointment_numberof")
     private Integer appointmentNumberOf;
 
-    @Column (name= "planned_starttime_first_sequence")
-    private Date plannedStarttimeFirstSequence;
-
     @Column (name= "planned_starttime_first_singlemeasure")
     private Date plannedStarttimeFirstSinglemeasure;
 
-    @Column (name= "planned_endtime_last_singlemeasure")
-    private Date plannedEndtimeLastSinglemeasure;
-
-    @Column (name= "planned_endtime_gridmeasure")
-    private Date plannedEndtimeGridmeasure;
-
-    @Column (name= "starttime_first_sequence")
-    private Date starttimeFirstSequence;
-
-    @Column (name= "starttime_first_singlemeasure")
-    private Date starttimeFirstSinglemeasure;
-
-    @Column (name= "endtime_last_singlemeasure")
-    private Date endtimeLastSinglemeasure;
-
     @Column (name= "endtime_gridmeasure")
     private Date endtimeGridmeasure;
 
@@ -225,34 +207,10 @@
 
     public void setAppointmentNumberOf(Integer appointmentNumberOf) { this.appointmentNumberOf = appointmentNumberOf; }
 
-    public Date getPlannedStarttimeFirstSequence() { return plannedStarttimeFirstSequence; }
-
-    public void setPlannedStarttimeFirstSequence(Date plannedStarttimeFirstSequence) { this.plannedStarttimeFirstSequence = plannedStarttimeFirstSequence; }
-
     public Date getPlannedStarttimeFirstSinglemeasure() { return plannedStarttimeFirstSinglemeasure; }
 
     public void setPlannedStarttimeFirstSinglemeasure(Date plannedStarttimeFirstSinglemeasure) { this.plannedStarttimeFirstSinglemeasure = plannedStarttimeFirstSinglemeasure; }
 
-    public Date getPlannedEndtimeLastSinglemeasure() { return plannedEndtimeLastSinglemeasure; }
-
-    public void setPlannedEndtimeLastSinglemeasure(Date plannedEndtimeLastSinglemeasure) { this.plannedEndtimeLastSinglemeasure = plannedEndtimeLastSinglemeasure; }
-
-    public Date getPlannedEndtimeGridmeasure() { return plannedEndtimeGridmeasure; }
-
-    public void setPlannedEndtimeGridmeasure(Date plannedEndtimeGridmeasure) { this.plannedEndtimeGridmeasure = plannedEndtimeGridmeasure; }
-
-    public Date getStarttimeFirstSequence() { return starttimeFirstSequence; }
-
-    public void setStarttimeFirstSequence(Date starttimeFirstSequence) { this.starttimeFirstSequence = starttimeFirstSequence; }
-
-    public Date getStarttimeFirstSinglemeasure() { return starttimeFirstSinglemeasure; }
-
-    public void setStarttimeFirstSinglemeasure(Date starttimeFirstSinglemeasure) { this.starttimeFirstSinglemeasure = starttimeFirstSinglemeasure; }
-
-    public Date getEndtimeLastSinglemeasure() { return endtimeLastSinglemeasure; }
-
-    public void setEndtimeLastSinglemeasure(Date endtimeLastSinglemeasure) { this.endtimeLastSinglemeasure = endtimeLastSinglemeasure; }
-
     public Date getEndtimeGridmeasure() { return endtimeGridmeasure; }
 
     public void setEndtimeGridmeasure(Date endtimeGridmeasure) { this.endtimeGridmeasure = endtimeGridmeasure; }
diff --git a/src/test/java/org/eclipse/openk/api/HGridMeasureTest.java b/src/test/java/org/eclipse/openk/api/HGridMeasureTest.java
index 9254ab0..e5549d7 100644
--- a/src/test/java/org/eclipse/openk/api/HGridMeasureTest.java
+++ b/src/test/java/org/eclipse/openk/api/HGridMeasureTest.java
@@ -233,20 +233,7 @@
         assertEquals(hgm.getAppointmentNumberOf(), hgm2.getAppointmentNumberOf());
     }
 
-    @Test
-    public void testGetPlannedStarttimeFirstSequence()throws IOException {
-        HGridMeasure hgm = new HGridMeasure();
 
-        Date datePlannedStarttimeFirstSequence = new Date(System.currentTimeMillis());
-        hgm.setPlannedStarttimeFirstSequence(datePlannedStarttimeFirstSequence);
-
-        ObjectMapper om = new ObjectMapper();
-        String jsonString = om.writeValueAsString(hgm);
-
-        HGridMeasure hgm2 = om.readValue(jsonString, HGridMeasure.class);
-
-        assertEquals(hgm.getPlannedStarttimeFirstSequence(), hgm2.getPlannedStarttimeFirstSequence());
-    }
 
     @Test
     public void testGetPlannedStarttimeFirstSinglemeasure()throws IOException {
@@ -262,67 +249,6 @@
 
         assertEquals(hgm.getPlannedStarttimeFirstSinglemeasure(), hgm2.getPlannedStarttimeFirstSinglemeasure());
     }
-
-    @Test
-    public void testGetPlannedEndtimeLastSinglemeasure()throws IOException {
-        HGridMeasure hgm = new HGridMeasure();
-
-        Date datePlannedEndtimeLastSinglemeasure = new Date(System.currentTimeMillis());
-        hgm.setPlannedEndtimeLastSinglemeasure(datePlannedEndtimeLastSinglemeasure);
-
-        ObjectMapper om = new ObjectMapper();
-        String jsonString = om.writeValueAsString(hgm);
-
-        HGridMeasure hgm2 = om.readValue(jsonString, HGridMeasure.class);
-
-        assertEquals(hgm.getPlannedEndtimeLastSinglemeasure(), hgm2.getPlannedEndtimeLastSinglemeasure());
-    }
-
-    @Test
-    public void testGetStarttimeFirstSequence()throws IOException {
-        HGridMeasure hgm = new HGridMeasure();
-
-        Date dateStarttimeFirstSequence = new Date(System.currentTimeMillis());
-        hgm.setStarttimeFirstSequence(dateStarttimeFirstSequence);
-
-        ObjectMapper om = new ObjectMapper();
-        String jsonString = om.writeValueAsString(hgm);
-
-        HGridMeasure hgm2 = om.readValue(jsonString, HGridMeasure.class);
-
-        assertEquals(hgm.getStarttimeFirstSequence(), hgm2.getStarttimeFirstSequence());
-    }
-
-
-    @Test
-    public void testGetStarttimeFirstSinglemeasure()throws IOException {
-        HGridMeasure hgm = new HGridMeasure();
-
-        Date dateStarttimeFirstSinglemeasure = new Date(System.currentTimeMillis());
-        hgm.setStarttimeFirstSinglemeasure(dateStarttimeFirstSinglemeasure);
-
-        ObjectMapper om = new ObjectMapper();
-        String jsonString = om.writeValueAsString(hgm);
-
-        HGridMeasure hgm2 = om.readValue(jsonString, HGridMeasure.class);
-
-        assertEquals(hgm.getStarttimeFirstSinglemeasure(), hgm2.getStarttimeFirstSinglemeasure());
-    }
-
-    @Test
-    public void testGetEndtimeLastSinglemeasure()throws IOException {
-        HGridMeasure hgm = new HGridMeasure();
-
-        Date dateEndtimeLastSinglemeasure = new Date(System.currentTimeMillis());
-        hgm.setEndtimeLastSinglemeasure(dateEndtimeLastSinglemeasure);
-
-        ObjectMapper om = new ObjectMapper();
-        String jsonString = om.writeValueAsString(hgm);
-
-        HGridMeasure hgm2 = om.readValue(jsonString, HGridMeasure.class);
-
-        assertEquals(hgm.getEndtimeLastSinglemeasure(), hgm2.getEndtimeLastSinglemeasure());
-    }
     
 
     @Test
diff --git a/src/test/java/org/eclipse/openk/db/model/HTblGridMeasureTest.java b/src/test/java/org/eclipse/openk/db/model/HTblGridMeasureTest.java
index 7c2cb1a..05af817 100644
--- a/src/test/java/org/eclipse/openk/db/model/HTblGridMeasureTest.java
+++ b/src/test/java/org/eclipse/openk/db/model/HTblGridMeasureTest.java
@@ -79,41 +79,11 @@
         hTblGridMeasure.setAppointmentNumberOf(5);
         assertEquals((Integer)5, hTblGridMeasure.getAppointmentNumberOf());
 
-        java.time.LocalDateTime ldtPlannedStarttimeFirstSequence = java.time.LocalDateTime.parse("2018-04-23T19:00:00");
-        java.sql.Timestamp tsPlannedStarttimeFirstSequence = java.sql.Timestamp.valueOf(ldtPlannedStarttimeFirstSequence);
-        hTblGridMeasure.setPlannedStarttimeFirstSequence(tsPlannedStarttimeFirstSequence);
-        org.junit.Assert.assertEquals(tsPlannedStarttimeFirstSequence, hTblGridMeasure.getPlannedStarttimeFirstSequence());
-
         java.time.LocalDateTime ldtPlannedStarttimeFirstSinglemeasure = java.time.LocalDateTime.parse("2018-04-24T20:00:00");
         java.sql.Timestamp tsPlannedStarttimeFirstSinglemeasure = java.sql.Timestamp.valueOf(ldtPlannedStarttimeFirstSinglemeasure);
         hTblGridMeasure.setPlannedStarttimeFirstSinglemeasure(tsPlannedStarttimeFirstSinglemeasure);
         org.junit.Assert.assertEquals(tsPlannedStarttimeFirstSinglemeasure, hTblGridMeasure.getPlannedStarttimeFirstSinglemeasure());
 
-        java.time.LocalDateTime ldtPlannedEndtimeLastSinglemeasure = java.time.LocalDateTime.parse("2018-04-25T21:00:00");
-        java.sql.Timestamp tsPlannedEndtimeLastSinglemeasure = java.sql.Timestamp.valueOf(ldtPlannedEndtimeLastSinglemeasure);
-        hTblGridMeasure.setPlannedEndtimeLastSinglemeasure(tsPlannedEndtimeLastSinglemeasure);
-        org.junit.Assert.assertEquals(tsPlannedEndtimeLastSinglemeasure, hTblGridMeasure.getPlannedEndtimeLastSinglemeasure());
-
-        java.time.LocalDateTime ldtPlannedEndtimeGridmeasure = java.time.LocalDateTime.parse("2018-04-26T22:00:00");
-        java.sql.Timestamp tsPlannedEndtimeGridmeasure = java.sql.Timestamp.valueOf(ldtPlannedEndtimeGridmeasure);
-        hTblGridMeasure.setPlannedEndtimeGridmeasure(tsPlannedEndtimeGridmeasure);
-        org.junit.Assert.assertEquals(tsPlannedEndtimeGridmeasure, hTblGridMeasure.getPlannedEndtimeGridmeasure());
-
-        java.time.LocalDateTime ldtStarttimeFirstSequence = java.time.LocalDateTime.parse("2018-04-27T23:00:00");
-        java.sql.Timestamp tsStarttimeFirstSequence = java.sql.Timestamp.valueOf(ldtStarttimeFirstSequence);
-        hTblGridMeasure.setStarttimeFirstSequence(tsStarttimeFirstSequence);
-        org.junit.Assert.assertEquals(tsStarttimeFirstSequence, hTblGridMeasure.getStarttimeFirstSequence());
-
-        java.time.LocalDateTime ldtStarttimeFirstSinglemeasure = java.time.LocalDateTime.parse("2018-04-28T01:00:00");
-        java.sql.Timestamp tsStarttimeFirstSinglemeasure = java.sql.Timestamp.valueOf(ldtStarttimeFirstSinglemeasure);
-        hTblGridMeasure.setStarttimeFirstSinglemeasure(tsStarttimeFirstSinglemeasure);
-        org.junit.Assert.assertEquals(tsStarttimeFirstSinglemeasure, hTblGridMeasure.getStarttimeFirstSinglemeasure());
-
-        java.time.LocalDateTime ldtEndtimeLastSinglemeasure = java.time.LocalDateTime.parse("2018-04-29T02:00:00");
-        java.sql.Timestamp tsEndtimeLastSinglemeasure = java.sql.Timestamp.valueOf(ldtEndtimeLastSinglemeasure);
-        hTblGridMeasure.setEndtimeLastSinglemeasure(tsEndtimeLastSinglemeasure);
-        org.junit.Assert.assertEquals(tsEndtimeLastSinglemeasure, hTblGridMeasure.getEndtimeLastSinglemeasure());
-
         java.time.LocalDateTime ldtEndtimeGridmeasure = java.time.LocalDateTime.parse("2018-04-30T03:00:00");
         java.sql.Timestamp tsEndtimeGridmeasure = java.sql.Timestamp.valueOf(ldtEndtimeGridmeasure);
         hTblGridMeasure.setEndtimeGridmeasure(tsEndtimeGridmeasure);
