Index: helper.cpp
===================================================================
--- helper.cpp	(revision 884069)
+++ helper.cpp	(working copy)
@@ -52,10 +52,14 @@
 {
   int ret = 0;
   // write to the system config file
-  KConfig _config( KDE_CONFDIR "kcmclockrc", KConfig::SimpleConfig);
+  KConfig _config( KDE_CONFDIR "/kcmclockrc", KConfig::SimpleConfig );
   KConfigGroup config(&_config, "NTP");
   config.writeEntry("servers", ntpServers );
   config.writeEntry("enabled", ntpEnabled );
+  config.sync();
+  if ( !QFile::setPermissions( KDE_CONFDIR "/kcmclockrc",
+							  QFile::ReadUser|QFile::WriteUser|QFile::ReadGroup|QFile::ReadOther) )
+	  kDebug() << " set file perm failed";
 
   QString ntpUtility;
   if(!KStandardDirs::findExe("ntpdate").isEmpty()) {
@@ -102,7 +106,7 @@
         tf.setPrefix("kde-tzone");
         tf.open();
         QTextStream ts(&tf);
-
+		
         QFile fTimezoneFile(INITFILE);
         bool updatedFile = false;
 
Index: tzone.cpp
===================================================================
--- tzone.cpp	(revision 884069)
+++ tzone.cpp	(working copy)
@@ -57,6 +57,8 @@
 #include <sys/stat.h>
 #endif
 
+#include <QDBusConnection>
+
 #include "helper.h"
 
 Tzone::Tzone(QWidget * parent)
@@ -67,6 +69,7 @@
     QVBoxLayout *lay = new QVBoxLayout(this);
 
     tzonelist = new KTimeZoneWidget(this);
+    tzonelist->setSelectionMode( QAbstractItemView::SingleSelection );
     connect( tzonelist, SIGNAL(itemSelectionChanged()), SLOT(handleZoneChange()) );
 
     m_local = new QLabel(this);
@@ -74,15 +77,20 @@
     lay->addWidget(m_local);
     lay->addWidget(tzonelist);
 
+    QDBusConnection dbus = QDBusConnection::sessionBus();
+#define KTIMEZONED_DBUS_IFACE "org.kde.KTimeZoned"
+    dbus.connect(QString(), QString(), KTIMEZONED_DBUS_IFACE, "configChanged", this, SLOT(currentZone()));
+#undef KTIMEZONED_DBUS_IFACE
+	
     load();
 }
 
 void Tzone::load()
 {
-    currentZone();
-
+	tzonelist->clearSelection();
     // read the currently set time zone
     tzonelist->setSelected(KSystemTimeZones::local().name(), true);
+    currentZone();	
 }
 
 void Tzone::currentZone()
@@ -92,9 +100,15 @@
     time_t now = time(0);
     tzset();
     strftime(result.data(), result.size(), "%Z", localtime(&now));
-    m_local->setText(i18n("Current local time zone: %1 (%2)",
-                          KTimeZoneWidget::displayName(KSystemTimeZones::local()),
-                          QLatin1String(result)));
+    if ( !tzonelist->selection().isEmpty() ) {
+      KTimeZone curZone = KSystemTimeZones::zone( tzonelist->selection()[0] );
+      m_local->setText(i18n("Current local timezone: %1 (%2)",
+			    KTimeZoneWidget::displayName(curZone),
+			    QLatin1String(result)));
+    } else
+      m_local->setText(i18n("Current local timezone: %1 (%2)",
+			    KTimeZoneWidget::displayName(KSystemTimeZones::local()),
+			    QLatin1String(result)));
 }
 
 // FIXME: Does the logic in this routine actually work correctly? For example,
@@ -111,7 +125,7 @@
       helperargs << "tzreset"; // // make the helper reset the timezone
     }
 
-    currentZone();
+//    currentZone(); // useless, cause timezone not changed at this point
 }
 
 void Tzone::processHelperErrors( int code )
Index: dtime.cpp
===================================================================
--- dtime.cpp	(revision 884069)
+++ dtime.cpp	(working copy)
@@ -261,8 +261,11 @@
   // since there is nothing writing it.
   KConfig _config( "kcmclockrc", KConfig::NoGlobals );
   KConfigGroup config(&_config, "NTP");
+  // localized string can not be process correctly, and since servers read from file, people can
+  // modify it, so mark i18n for default servers is useless. 
+  timeServerList->clear();
   timeServerList->addItems(config.readEntry("servers",
-    i18n("Public Time Server (pool.ntp.org),\
+    QString("pool.ntp.org,\
 asia.pool.ntp.org,\
 europe.pool.ntp.org,\
 north-america.pool.ntp.org,\
Index: main.cpp
===================================================================
--- main.cpp	(revision 884069)
+++ main.cpp	(working copy)
@@ -118,6 +118,7 @@
 
     process->deleteLater();
     process = NULL;
+    tzone->currentZone();
 #if 0
   // Tell the clock applet about the change so that it can update its timezone
   QDBusInterface clock("org.kde.kicker", "/Applets/Clock", "org.kde.kicker.ClockApplet");
Index: tzone.h
===================================================================
--- tzone.h	(revision 884069)
+++ tzone.h	(working copy)
@@ -41,6 +41,9 @@
   void processHelperErrors( int code );
   void  load();
 
+public Q_SLOTS:
+  void currentZone(); 
+  
 Q_SIGNALS:
 	void zoneChanged(bool);
 
@@ -48,7 +51,6 @@
   void handleZoneChange() {emit zoneChanged( true );}
 
 private:
-  void currentZone();
   QLabel *m_local;
   KTimeZoneWidget *tzonelist;
 };
