generateICalWithExceptions: function (eventIn, childrenIn) {
			var future, event, children = [];

			event = extend({}, eventIn);
			if (!childrenIn) {
				childrenIn = [];
			}
			childrenIn.forEach(function (e) {
				var event = extend({}, e);
				removeHacks(event);
				children.push(event);
			});
			removeHacks(event, children);

			future = Time.normalizeToEventTimezone([event].concat(children));
			future.then(function tzManagerCB() {
				checkResult(future);

				var result = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:WEBOS.0.3.7\r\nMETHOD:PUBLISH\r\n";
				result += generateICalIntern(event);

				children.forEach(function (e) {
					result += "\r\n" + generateICalIntern(e);
				});

				result += "\r\nEND:VCALENDAR";
				future.result = { returnValue: true, result: result};
			});

			return future;
		},
		generateICal: function (eventIn) {
			var future, event;

			event = extend({}, eventIn);
			removeHacks(event);
			future = Time.normalizeToEventTimezone([event]);

			future.then(this, function () {
				checkResult(future);
				var result = generateICalIntern(event);
				result = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:WEBOS.0.3.7\r\nMETHOD:PUBLISH\r\n" + result + "\r\nEND:VCALENDAR";
				future.result = { returnValue: true, result: result};
			});

			return future;
		},