--- clock (copy).c	2004-06-15 10:03:22.000000000 +0530
+++ clock.c	2004-08-17 22:11:15.000000000 +0530
@@ -156,6 +156,10 @@
 	guint listeners [N_GCONF_PREFS];
 };
 
+int iChildProcessid;
+                                                                                                                    
+gboolean Time_to_refresh;
+
 static void update_clock (ClockData * cd);
 
 static void set_atk_name_description (GtkWidget *widget,
@@ -214,6 +218,19 @@
                 gtk_tree_model_filter_refilter (cd->tasks_filter);
 #endif
 
+        if (Time_to_refresh){
+                if (kill(iChildProcessid,0)==0)
+                {
+                        cd->timeouttime = 1000;
+                        cd->timeout = g_timeout_add (cd->timeouttime,
+                                             clock_timeout_callback,
+                                             cd);
+                        return FALSE;
+                }
+                else
+                        Time_to_refresh = FALSE;
+	}
+
 	if (!cd->showseconds && cd->format != CLOCK_FORMAT_UNIX) {
 		if (cd->format != CLOCK_FORMAT_INTERNET) {
 			int sec = cd->current_time % 60;
@@ -347,6 +364,14 @@
 	char date[256], hour[256];
 	char *utf8, *loc;
 
+	/* Setting "TZ" environment to another location say "" */
+        setenv("TZ","",1);
+        time_t tmptime_t=time(NULL);           /* These variables are not*/
+        struct tm *tmtmp=localtime(&tmptime_t);/* using further */
+	/* Resetting "TZ" to original locaiton "/etc/localtime" 
+	then only it can refresh according to the New timezone */
+        setenv("TZ", "/etc/localtime", 1);
+
         time (&cd->current_time);
 	
 	if (cd->gmt_time)
@@ -438,7 +463,8 @@
 	}
 	else if(cd->format == CLOCK_FORMAT_UNIX ||
 		cd->format == CLOCK_FORMAT_CUSTOM ||
-		cd->showseconds)
+		cd->showseconds ||
+		Time_to_refresh)
 		cd->timeouttime = 1000;
 	else
 		cd->timeouttime = (60 - cd->current_time % 60)*1000;
@@ -1643,10 +1669,13 @@
 	argv [1] = NULL;		
 
 	err = NULL;
-	if (gdk_spawn_on_screen (screen, NULL, argv, NULL, 0, NULL, NULL, NULL, &err)) {
-		g_free (app);
-		return TRUE;
-	}
+        if (!Time_to_refresh) {
+                if (gdk_spawn_on_screen (screen, NULL, argv, NULL, 0, NULL, NULL, &iChildProcessid, &err)) {
+                        Time_to_refresh = TRUE;
+                        g_free (app);
+                        return TRUE;
+                }
+        }
 			
 	dialog = gtk_message_dialog_new (NULL,
 					 GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -1684,8 +1713,12 @@
 		return;
 	
 	for (i = 0; i < G_N_ELEMENTS (clock_config_tools); i++)
-		if (try_config_tool (screen, clock_config_tools [i]))
+		if (try_config_tool (screen, clock_config_tools [i])){
+                	if (cd->timeout)
+                                g_source_remove (cd->timeout);
+                        clock_timeout_callback(cd);
 			return;
+	}
 		
 	dialog = gtk_message_dialog_new (NULL,
 					 GTK_DIALOG_DESTROY_WITH_PARENT,
