diff --git a/check/mtime_timedelta_test.c b/check/mtime_timedelta_test.c
index 9e0fd64b38b2e875b35b5c1de0db1aae9c83fc1b..da8b5465f28196713efb380745b702d2d9ccd354 100644
--- a/check/mtime_timedelta_test.c
+++ b/check/mtime_timedelta_test.c
@@ -3,8 +3,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include "mtime_calendar.h"
+#include "mtime_datetime.h"
+#include "mtime_julianDay.h"
 
 typedef struct _timedelta* TimeDelta;
+typedef struct _datetime* DateTime;
+typedef struct _juliandelta* JulianDelta;
 
 START_TEST(test_create_timedelta_from_valid_strings)
 {
@@ -80,7 +84,7 @@ START_TEST(test_invalid_strings)
 }
 END_TEST
 
-START_TEST(test_constructAndCopyDateTime)
+START_TEST(test_constructAndCopyTimeDelta)
 {
 	int64_t year = 504;
 	int month = 4;
@@ -138,7 +142,7 @@ START_TEST(test_constructAndCopyDateTime)
 }
 END_TEST
 
-START_TEST(test_replaceDatetime)
+START_TEST(test_replaceTimeDelta)
 {
 	int64_t year = 504;
 	int month = 4;
@@ -188,20 +192,263 @@ START_TEST(test_replaceDatetime)
 	ck_assert_int_eq(0, timedelta_dest_nonstd->second);
 	ck_assert_int_eq(0, timedelta_dest_nonstd->ms);
 
-	deallocateDateTime(timedelta_src);
-	deallocateDateTime(timedelta_dest);
-	deallocateDateTime(timedelta_src_neg);
-	deallocateDateTime(timedelta_dest_neg);
+	deallocateTimeDelta(timedelta_src);
+	deallocateTimeDelta(timedelta_dest);
+	deallocateTimeDelta(timedelta_src_neg);
+	deallocateTimeDelta(timedelta_dest_neg);
 	deallocateTimeDelta(timedelta_src_nonstd);
 	deallocateTimeDelta(timedelta_dest_nonstd);
 }
 END_TEST
 
-static void setup(void)
+START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_1)
+{
+	assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0);
+
+	assertTimeDeltaToJulianDelta("P1Y", "-1-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "-1-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "-1-02-28T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "-1-03-01T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "-1-12-31T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "0-01-01T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "0-02-28T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "0-02-29T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "0-03-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "0-12-31T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "1-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "1-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "1-02-28T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "1-03-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "1-12-31T00:00:00.000", '+', 365, 0);
+
+	assertTimeDeltaToJulianDelta("-P1Y", "-1-01-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "-1-01-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "-1-02-28T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "-1-03-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "-1-12-31T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "0-01-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "0-02-28T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "0-02-29T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "0-03-01T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "0-12-31T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "1-01-01T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "1-01-01T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "1-02-28T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "1-03-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y",  "1-12-31T00:00:00.000", '-', -365, 0);
+
+	assertTimeDeltaToJulianDelta("P2Y",  "0-01-01T00:00:00.000", '+', 731, 0);
+	assertTimeDeltaToJulianDelta("P6Y",  "0-01-01T00:00:00.000", '+', 2192, 0);
+	assertTimeDeltaToJulianDelta("P26Y",  "0-01-01T00:00:00.000", '+', 9497, 0);
+	assertTimeDeltaToJulianDelta("P126Y",  "0-01-01T00:00:00.000", '+', 46021, 0);
+	assertTimeDeltaToJulianDelta("P406Y",  "0-01-01T00:00:00.000", '+', 148289, 0);
+	assertTimeDeltaToJulianDelta("P10406Y",  "0-01-01T00:00:00.000", '+', 3800714, 0);
+	assertTimeDeltaToJulianDelta("P10407Y",  "0-01-01T00:00:00.000", '+', 3801079, 0);
+	assertTimeDeltaToJulianDelta("P10408Y",  "0-01-01T00:00:00.000", '+', 3801444, 0);
+	assertTimeDeltaToJulianDelta("P10409Y",  "0-01-01T00:00:00.000", '+', 3801810, 0);
+	assertTimeDeltaToJulianDelta("P10409Y",  "0-03-01T00:00:00.000", '+', 3801809, 0);
+	assertTimeDeltaToJulianDelta("P10409Y",  "1-01-01T00:00:00.000", '+', 3801809, 0);
+	assertTimeDeltaToJulianDelta("-P10409Y",  "1-01-01T00:00:00.000", '-', -3801810, 0);
+	assertTimeDeltaToJulianDelta("-P10409Y",  "0-01-01T00:00:00.000", '-', -3801809, 0);
+	//Runs to long, see test_timeDeltaToJulianDelta_highDeltas
+//	assertTimeDeltaToJulianDeltaWithoutExpactations("-P2147483648Y",  "0-01-01T00:00:00.000", '-');
+//	assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y",  "0-01-01T00:00:00.000", '+');
+//	assertTimeDeltaToJulianDeltaWithoutExpactations("-P2147483648Y",  "2147483647-01-01T00:00:00.000", '-');
+//	assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y",  "-2147483648-01-01T00:00:00.000", '+');
+
+	assertTimeDeltaToJulianDelta("-P1Y",  "2147483647-01-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("P1Y",  "-2147483648-01-01T00:00:00.000", '+', 366, 0);
+}
+END_TEST
+
+START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_2)
+{
+	assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 28, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 29, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 31, 0);
+
+	assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -28, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -29, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0);
+}
+END_TEST
+
+START_TEST(test_timeDeltaToJulianDelta_ProlepticGregorian_3)
+{
+	assertTimeDeltaToJulianDelta("P01D", "1-01-01T00:00:00.000", '+', 1, 0);
+	assertTimeDeltaToJulianDelta("PT01H", "1-01-01T00:00:00.000", '+', 0, 3600000);
+	assertTimeDeltaToJulianDelta("PT01M", "1-01-01T00:00:00.000", '+', 0, 60000);
+	assertTimeDeltaToJulianDelta("PT01S", "1-01-01T00:00:00.000", '+', 0, 1000);
+	assertTimeDeltaToJulianDelta("PT00.001S", "1-01-01T00:00:00.000", '+', 0, 1);
+
+	assertTimeDeltaToJulianDelta("-P01D", "1-01-01T00:00:00.000", '-', -1, 0);
+	assertTimeDeltaToJulianDelta("-PT01H", "1-01-01T00:00:00.000", '-', 0, -3600000);
+	assertTimeDeltaToJulianDelta("-PT01M", "1-01-01T00:00:00.000", '-', 0, -60000);
+	assertTimeDeltaToJulianDelta("-PT01S", "1-01-01T00:00:00.000", '-', 0, -1000);
+	assertTimeDeltaToJulianDelta("-PT00.001S", "1-01-01T00:00:00.000", '-', 0, -1);
+
+	assertTimeDeltaToJulianDelta("P25Y", "1-01-01T00:00:00.000", '+', 9131, 0);
+	assertTimeDeltaToJulianDelta("P25Y4M", "1-01-01T00:00:00.000", '+', 9251, 0);
+	assertTimeDeltaToJulianDelta("P25Y4M12D", "1-01-01T00:00:00.000", '+', 9263, 0);
+	assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M", "1-01-01T00:00:00.000", '+', 9263, 22980000);
+	assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56S", "1-01-01T00:00:00.000", '+', 9263, 23036000);
+	assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56.132S", "0-01-01T00:00:00.000", '+', 9264, 23036132);
+	assertTimeDeltaToJulianDelta("P25Y4M12DT06H23M56.132S", "0-03-01T00:00:00.000", '+', 9265, 23036132);
+	assertTimeDeltaToJulianDelta("-P25Y4M12DT06H23M56.132S", "0-03-01T00:00:00.000", '-', -9264, -23036132);
+
+	assertTimeDeltaToJulianDelta("P366D", "0-01-01T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P366D", "0-03-01T00:00:00.000", '+', 366, 0);
+	assertTimeDeltaToJulianDelta("P366D", "1-01-01T00:00:00.000", '+', 366, 0);
+
+	assertTimeDeltaToJulianDelta("-P366D", "0-01-01T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P366D", "0-03-01T00:00:00.000", '-', -366, 0);
+	assertTimeDeltaToJulianDelta("-P366D", "1-01-01T00:00:00.000", '-', -366, 0);
+
+	assertTimeDeltaToJulianDelta("PT24H", "1-01-01T00:00:00.000", '+', 1, 0);
+	assertTimeDeltaToJulianDelta("PT30H", "1-01-01T00:00:00.000", '+', 1, 21600000);
+	assertTimeDeltaToJulianDelta("PT1440M", "1-01-01T00:00:00.000", '+', 1, 0);
+	assertTimeDeltaToJulianDelta("PT4335M", "1-01-01T00:00:00.000", '+', 3, 900000);
+	assertTimeDeltaToJulianDelta("PT86400S", "1-01-01T00:00:00.000", '+', 1, 0);
+	assertTimeDeltaToJulianDelta("PT3653389.498S", "1-01-01T00:00:00.000", '+', 42, 24589498);
+
+	assertTimeDeltaToJulianDelta("-PT24H", "1-01-01T00:00:00.000", '-', -1, 0);
+	assertTimeDeltaToJulianDelta("-PT30H", "1-01-01T00:00:00.000", '-', -1, -21600000);
+	assertTimeDeltaToJulianDelta("-PT1440M", "1-01-01T00:00:00.000", '-', -1, 0);
+	assertTimeDeltaToJulianDelta("-PT4335M", "1-01-01T00:00:00.000", '-', -3, -900000);
+	assertTimeDeltaToJulianDelta("-PT86400S", "1-01-01T00:00:00.000", '-', -1, 0);
+	assertTimeDeltaToJulianDelta("-PT3653389.498S", "1-01-01T00:00:00.000", '-', -42, -24589498);
+}
+END_TEST
+
+START_TEST(test_timeDeltaToJulianDelta_YearOf365Days)
+{
+	assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "0-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "0-01-01T00:00:00.000", '-', -365, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -365, 0);
+
+	assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 28, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 28, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 31, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 31, 0);
+
+	assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -28, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -28, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -31, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0);
+
+}
+END_TEST
+
+START_TEST(test_timeDeltaToJulianDelta_YearOf360Days)
+{
+	assertTimeDeltaToJulianDelta("P0Y", "0-01-01T00:00:00.000", '+', 0, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "0-01-01T00:00:00.000", '+', 360, 0);
+	assertTimeDeltaToJulianDelta("P1Y", "1-01-01T00:00:00.000", '+', 360, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "0-01-01T00:00:00.000", '-', -360, 0);
+	assertTimeDeltaToJulianDelta("-P1Y", "1-01-01T00:00:00.000", '-', -360, 0);
+
+	assertTimeDeltaToJulianDelta("P01M", "1-01-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-02-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-02-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "0-03-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-04-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-05-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-06-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-07-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-08-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-09-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-10-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-11-01T00:00:00.000", '+', 30, 0);
+	assertTimeDeltaToJulianDelta("P01M", "1-12-01T00:00:00.000", '+', 30, 0);
+
+	assertTimeDeltaToJulianDelta("-P01M", "1-01-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-02-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-03-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "0-03-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-04-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-05-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-06-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-07-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-08-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-09-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-10-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-11-01T00:00:00.000", '-', -30, 0);
+	assertTimeDeltaToJulianDelta("-P01M", "1-12-01T00:00:00.000", '-', -30, 0);
+}
+END_TEST
+
+START_TEST(test_timeDeltaToJulianDelta_highDeltas)
+{
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P0Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P1Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P9Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P99Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P9999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P99999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P999999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P9999999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P99999999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P999999999Y",  "0-01-01T00:00:00.000", '+');
+	assertTimeDeltaToJulianDeltaWithoutExpactations("P2147483647Y",  "0-01-01T00:00:00.000", '+');
+}
+END_TEST
+
+static void setup_ProlepticGregorian(void)
 {
 	initCalendar(PROLEPTIC_GREGORIAN);
 }
 
+static void setup_YearOf365Days(void)
+{
+	initCalendar(YEAR_OF_365_DAYS);
+}
+
+static void setup_YearOf360Days(void)
+{
+	initCalendar(YEAR_OF_360_DAYS);
+}
+
 static void teardown(void)
 {
 	freeCalendar();
@@ -209,13 +456,29 @@ static void teardown(void)
 
 void add_mtime_timedelta_test_to_suite(Suite* suite)
 {
-	TCase *tcase = tcase_create("mtime_time_test");
-	suite_add_tcase(suite, tcase);
-	tcase_add_checked_fixture(tcase, setup, teardown);
-	tcase_add_test(tcase, test_create_timedelta_from_valid_strings);
-	tcase_add_test(tcase, test_invalid_strings);
-	tcase_add_test(tcase, test_constructAndCopyDateTime);
-	tcase_add_test(tcase, test_replaceDatetime);
+	TCase *tcase_ProlepticGregorian = tcase_create("mtime_time_test_ProlepticGregorian");
+	suite_add_tcase(suite, tcase_ProlepticGregorian);
+	tcase_add_checked_fixture(tcase_ProlepticGregorian, setup_ProlepticGregorian, teardown);
+	tcase_add_test(tcase_ProlepticGregorian, test_create_timedelta_from_valid_strings);
+	tcase_add_test(tcase_ProlepticGregorian, test_invalid_strings);
+	tcase_add_test(tcase_ProlepticGregorian, test_constructAndCopyTimeDelta);
+	tcase_add_test(tcase_ProlepticGregorian, test_replaceTimeDelta);
+	tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_1);
+	tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_2);
+	tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_ProlepticGregorian_3);
+	tcase_add_test(tcase_ProlepticGregorian, test_timeDeltaToJulianDelta_highDeltas);
+	// Uncomment and adapt to your needs, if you want test_timeDeltaToJulianDelta_highDeltas to terminate
+	//tcase_set_timeout(tcase_ProlepticGregorian, 30); // Testcase Timeout = 30 sec.
+
+	TCase *tcase_YearOf365Days = tcase_create("mtime_time_test_YearOf365Days");
+	suite_add_tcase(suite, tcase_YearOf365Days);
+	tcase_add_checked_fixture(tcase_YearOf365Days, setup_YearOf365Days, teardown);
+	tcase_add_test(tcase_YearOf365Days, test_timeDeltaToJulianDelta_YearOf365Days);
+
+	TCase *tcase_YearOf360Days = tcase_create("mtime_time_test_YearOf360Days");
+	suite_add_tcase(suite, tcase_YearOf360Days);
+	tcase_add_checked_fixture(tcase_YearOf360Days, setup_YearOf360Days, teardown);
+	tcase_add_test(tcase_YearOf360Days, test_timeDeltaToJulianDelta_YearOf360Days);
 }
 
 /*** SPECIAL ASSERT FUNCTIONS ***/
@@ -283,3 +546,50 @@ void assertInvalidTimeDelta(const char* input_string)
 		free(msg); //Never executed?
 	}
 }
+
+void assertTimeDeltaToJulianDelta(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign, int64_t expected_jd_day, int64_t expected_jd_ms)
+{
+	TimeDelta timedelta = newTimeDelta(timedelta_string);
+	ck_assert(timedelta != NULL);
+
+	DateTime datetime = newDateTime(base_datetime_string);
+	ck_assert(datetime != NULL);
+
+	JulianDelta juliandeltaTemp = newJulianDelta('+', 0, 0);
+	JulianDelta juliandelta = timeDeltaToJulianDelta(timedelta, datetime, juliandeltaTemp);
+	ck_assert(datetime != NULL);
+	ck_assert(juliandeltaTemp == juliandelta);
+
+	const char* format = "timeDeltaToJulianDelta failed for \"%s\" + \"%s\": expected:(%c, %lld, %lld) actual:(%c, %lld, %lld).";
+	size_t length = snprintf(NULL, 0, format, base_datetime_string, timedelta_string, expected_jd_sign, expected_jd_day, expected_jd_ms, juliandelta->sign, juliandelta->day, juliandelta->ms) + 1;
+	char* msg = malloc(length);
+	snprintf(msg, length, format, base_datetime_string, timedelta_string, expected_jd_sign, expected_jd_day, expected_jd_ms, juliandelta->sign, juliandelta->day, juliandelta->ms);
+
+	ck_assert_msg(expected_jd_sign == juliandelta->sign, msg);
+	ck_assert_msg(expected_jd_day == juliandelta->day, msg);
+	ck_assert_msg(expected_jd_ms == juliandelta->ms, msg);
+
+	deallocateTimeDelta(timedelta);
+	deallocateDateTime(datetime);
+	deallocateJulianDelta(juliandelta);
+}
+
+void assertTimeDeltaToJulianDeltaWithoutExpactations(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign)
+{
+	TimeDelta timedelta = newTimeDelta(timedelta_string);
+	ck_assert(timedelta != NULL);
+
+	DateTime datetime = newDateTime(base_datetime_string);
+	ck_assert(datetime != NULL);
+
+	JulianDelta juliandeltaTemp = newJulianDelta('+', 0, 0);
+	JulianDelta juliandelta = timeDeltaToJulianDelta(timedelta, datetime, juliandeltaTemp);
+	ck_assert(datetime != NULL);
+	ck_assert(juliandeltaTemp == juliandelta);
+
+	ck_assert(expected_jd_sign == juliandelta->sign);
+
+	deallocateTimeDelta(timedelta);
+	deallocateDateTime(datetime);
+	deallocateJulianDelta(juliandelta);
+}
diff --git a/check/mtime_timedelta_test.h b/check/mtime_timedelta_test.h
index adcec4bfc118db17da30f7da120ba8583b4f16e0..e0721f852e64d79336caa3544795bf50fa945967 100644
--- a/check/mtime_timedelta_test.h
+++ b/check/mtime_timedelta_test.h
@@ -10,5 +10,7 @@ void add_mtime_timedelta_test_to_suite(Suite* suite);
 /*** SPECIAL ASSERT FUNCTIONS ***/
 void assertTimeDelta(const char* input_string, bool std_form, char sign, int64_t year, int month, int day, int hour, int minute, int second, int ms, const char* expected_output_string);
 void assertInvalidTimeDelta(const char* input_string);
+void assertTimeDeltaToJulianDelta(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign, int64_t expected_jd_day, int64_t expected_jd_ms);
+void assertTimeDeltaToJulianDeltaWithoutExpactations(const char* timedelta_string, const char* base_datetime_string, char expected_jd_sign);
 
 #endif