diff --git a/src/de/itstall/Datum.java b/src/de/itstall/Datum.java
index 0a5e7d75adeef31c7b420329d8ac848a20c3df0f..9500fdb1fb86e86f2f29c8209a70434338947e6e 100644
--- a/src/de/itstall/Datum.java
+++ b/src/de/itstall/Datum.java
@@ -234,20 +234,30 @@ public class Datum {
 		long neuerTag = this.getTag() + iTage;
 
 		if (neuerTag > this.getMonthDays(this.getMonat())) {
+
 			do {
-				this.addiereMonate(neuerTag / this.getMonthDays(this.getMonat()));
-				neuerTag -= this.getMonthDays(this.getMonat());
-			} while (neuerTag / this.getMonthDays(this.getMonat()) < 1);
+				neuerTag = neuerTag - this.getMonthDays(this.getMonat());
+				this.addiereMonate(1);
+			} while (neuerTag > this.getMonthDays(this.getMonat()));
 
 			this.setTag(neuerTag % this.getMonthDays(this.getMonat()));
-		} else if (neuerTag <= 0) {
-			do {
-				this.addiereMonate(neuerTag / this.getMonthDays(this.getMonat()) - 1);
-				neuerTag -= this.getMonthDays(this.getMonat());
-			} while(neuerTag / this.getMonthDays(this.getMonat()) < 1);
 
-			this.setTag(this.getMonthDays(this.getMonat()) + neuerTag % this.getMonthDays(this.getMonat()));
-		} else {
+		}
+		else if (iTage < 0) {
+
+			neuerTag = this.getTag() + iTage;
+			long nextMonth = (this.getMonthDays(this.getMonat()) * -1);
+			
+			while(neuerTag <= nextMonth) {
+				this.addiereMonate(- 1);
+				neuerTag = neuerTag + this.getMonthDays(this.getMonat());
+				nextMonth = (this.getMonthDays(this.getMonat() - 1) * -1);
+			}
+
+			this.addiereMonate(- 1);
+			this.setTag( this.getMonthDays(this.getMonat()) + neuerTag);
+
+		} else if(iTage != 0) {
 			this.setTag(neuerTag);
 		}
 	}