Index: trunk/grails-app/domain/Period.groovy
===================================================================
--- trunk/grails-app/domain/Period.groovy	(revision 195)
+++ trunk/grails-app/domain/Period.groovy	(revision 199)
@@ -3,8 +3,4 @@
     String period
     boolean isActive = true
-
-    static hasMany = [taskRecurringSchedules: TaskRecurringSchedule]
-    
-    static mappedBy = [taskRecurringSchedules:"recurPeriod"]
 
 //     static belongsTo = []
Index: trunk/grails-app/domain/TaskRecurringSchedule.groovy
===================================================================
--- trunk/grails-app/domain/TaskRecurringSchedule.groovy	(revision 195)
+++ trunk/grails-app/domain/TaskRecurringSchedule.groovy	(revision 199)
@@ -5,5 +5,4 @@
     Task lastGeneratedSubTask
     Period recurPeriod
-    Period generateAheadPeriod
     Period taskDurationPeriod
 
@@ -11,10 +10,9 @@
     Integer taskDuration = 0
     Integer generateAhead = 1
-    Date startDate = new Date()
-    Date lastGeneratedDate
+    Integer subTasksGenerated = 0
+    Date nextGenerationDate = new Date()
     Date nextTargetStartDate = new Date()
     Date nextTargetCompletionDate = new Date()
-    Date nextGenerationDate = new Date()
-    boolean isEnabled = true
+    boolean enabled = true
 
 //     static hasMany = []
@@ -25,6 +23,5 @@
         recurEvery(min:1, max:365)
         taskDuration(min:0, max:365)
-        generateAhead(min:0, max:365)
-        lastGeneratedDate(nullable:true)
+        generateAhead(min:0, max:62)
         lastGeneratedSubTask(nullable:true)
     }
@@ -38,33 +35,39 @@
     // in the hope that this will be fixed in future versions.
     def beforeInsert = {
-        nextTargetStartDate = startDate
         setNextGenerationDate()
         setNextTargetCompletionDate()
     }
 
-    public void setNextGenerationDate() {
-        switch (generateAheadPeriod.period) {
+    public void setNextTargetStartDate() {
+        switch (recurPeriod.period) {
             case "Day(s)":
                 use(TimeCategory) {
-                    nextGenerationDate = nextTargetStartDate - generateAhead.days
+                    nextTargetStartDate = nextTargetStartDate + recurEvery.days
                 }
                 break
             case "Week(s)":
                 use(TimeCategory) {
-                    nextGenerationDate = nextTargetStartDate - generateAhead.weeks
+                    nextTargetStartDate = nextTargetStartDate + recurEvery.weeks
                 }
                 break
             case "Month(s)":
                 use(TimeCategory) {
-                    nextGenerationDate = nextTargetStartDate - generateAhead.months
+                    nextTargetStartDate = nextTargetStartDate + recurEvery.months
                 }
                 break
             case "Year(s)":
                 use(TimeCategory) {
-                    nextGenerationDate = nextTargetStartDate - generateAhead.years
+                    nextTargetStartDate = nextTargetStartDate + recurEvery.years
                 }
                 break
         default:
+                log.error "No case for recurPeriod.period: ${recurPeriod.period}"
                 break
+        }
+    }
+
+    public void setNextGenerationDate() {
+        use(TimeCategory) {
+            nextGenerationDate = nextTargetStartDate - generateAhead.days
         }
         def now = new Date()
@@ -95,4 +98,5 @@
                 break
             default:
+                log.error "No case for taskDurationPeriod.period: ${taskDurationPeriod.period}"
                 break
         }
