--- iCalDateTime.m.orig	2015-09-16 23:56:55.000000000 +0300
+++ iCalDateTime.m	2015-11-12 16:25:56.414120935 +0300
@@ -87,9 +87,13 @@
   tzId = [self value: 0 ofAttribute: @"tzid"];
   if ([tzId length])
     {
-      calendar
-	= (iCalCalendar *) [self searchParentOfClass: [iCalCalendar class]];
-      timeZone = [calendar timeZoneWithId: tzId];
+      timeZone = [iCalTimeZone timeZoneForName: tzId];
+      if (!timeZone)
+	{
+	  calendar
+	    = (iCalCalendar *) [self searchParentOfClass: [iCalCalendar class]];
+	  timeZone = [calendar timeZoneWithId: tzId];
+        }
       //if (!timeZone)
       //[self logWithFormat: @"timezone '%@' not found in calendar", tzId];
     }
@@ -163,7 +167,7 @@
   NSCalendarDate *initialDate, *dateTime;
   NSArray *subValues;
   NSMutableArray *dates;
-  //NSTimeZone *tz;
+  NSTimeZone *tz;
   unsigned count, i;
 
   subValues = [self valuesAtIndex: 0 forKey: @""];
@@ -172,32 +176,29 @@
   for (i = 0; i < count; i++)
     {
       date = [subValues objectAtIndex: i];
-      iTZ = [self timeZone];
 
-      if (iTZ)
-	dateTime = [iTZ dateForDateTimeString: date];
-      else
+      initialDate = [date asCalendarDate];
+      if (initialDate)
 	{
-	  initialDate = [date asCalendarDate];
-	  if (initialDate)
+	  if ([date hasSuffix: @"Z"] || [date hasSuffix: @"z"])
 	    dateTime = initialDate;
-	  /*
+	  else
 	    {
-	      if ([date hasSuffix: @"Z"] || [date hasSuffix: @"z"])
-		dateTime = initialDate;
+	      iTZ = [self timeZone];
+	      if (iTZ)
+		dateTime = [iTZ dateForDateTimeString: date];
 	      else
 		{
-		  // same TODO as above
 		  tz = [NSTimeZone defaultTimeZone];
 		  dateTime = [initialDate addYear: 0 month: 0 day: 0
 					     hour: 0 minute: 0
 					   second: -[tz secondsFromGMTForDate: initialDate]];
-		}
+		  }
 	    }
-	  */
-	  else
-	    dateTime = nil;
 	}
+      else
+	dateTime = nil;
+
       if (dateTime)
 	[dates addObject: dateTime];
     }
