--- libical-0.46/src/libical/icaltimezone.c~	2010-08-30 21:05:06.000000000 +0100
+++ libical-0.46/src/libical/icaltimezone.c	2010-09-18 14:39:55.000000000 +0100
@@ -45,6 +45,11 @@
 
 #include <sys/stat.h>
 
+#ifdef HAVE_PTHREAD
+ #include <pthread.h>    
+    static pthread_mutex_t builtin_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
 #ifdef WIN32
 #include <mbstring.h>
 #include <windows.h>
@@ -1745,6 +1750,15 @@ icaltimezone_load_builtin_timezone	(ical
     if (!zone->location || !zone->location[0])
 	return;
 
+#ifdef HAVE_PTHREAD
+    pthread_mutex_lock(&builtin_mutex);
+    if (zone->component) {
+	fprintf(stderr, "timezone for %s already loaded\n",
+		zone->location);
+	goto out;
+    }
+#endif
+
 #ifdef USE_BUILTIN_TZDATA
     {
     char *filename;
@@ -1802,7 +1816,10 @@ icaltimezone_load_builtin_timezone	(ical
     icalcomponent_free(comp);
     }
 #endif    
-
+#ifdef HAVE_PTHREAD
+ out:
+    pthread_mutex_unlock(&builtin_mutex);
+#endif
 }
 
 
