diff -urN pympd-0.07.old/src/glade/pympd.glade pympd-0.07/src/glade/pympd.glade
--- pympd-0.07.old/src/glade/pympd.glade	2007-11-11 17:32:08.000000000 +0000
+++ pympd-0.07/src/glade/pympd.glade	2007-11-11 17:32:31.000000000 +0000
@@ -2148,7 +2148,7 @@
 			<widget class="GtkTable" id="table1">
 			  <property name="visible">True</property>
 			  <property name="n_rows">6</property>
-			  <property name="n_columns">2</property>
+			  <property name="n_columns">1</property>
 			  <property name="homogeneous">False</property>
 			  <property name="row_spacing">8</property>
 			  <property name="column_spacing">7</property>
@@ -2206,7 +2206,7 @@
 			      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
 			      <property name="snap_to_ticks">False</property>
 			      <property name="wrap">False</property>
-			      <property name="adjustment">1 0 100 1 10 10</property>
+			      <property name="adjustment">1 1 100 1 10 10</property>
 			    </widget>
 			    <packing>
 			      <property name="left_attach">1</property>
@@ -2429,169 +2429,6 @@
 		  <property name="fill">True</property>
 		</packing>
 	      </child>
-
-	      <child>
-		<widget class="GtkHButtonBox" id="hbuttonbox1">
-		  <property name="visible">True</property>
-		  <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
-		  <property name="spacing">0</property>
-
-		  <child>
-		    <widget class="GtkButton" id="disconnect_btn">
-		      <property name="visible">True</property>
-		      <property name="can_default">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="relief">GTK_RELIEF_NORMAL</property>
-		      <property name="focus_on_click">True</property>
-		      <signal name="clicked" handler="on_disconnect_clicked" last_modification_time="Mon, 20 Jun 2005 03:31:13 GMT"/>
-
-		      <child>
-			<widget class="GtkAlignment" id="alignment4">
-			  <property name="visible">True</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xscale">0</property>
-			  <property name="yscale">0</property>
-			  <property name="top_padding">0</property>
-			  <property name="bottom_padding">0</property>
-			  <property name="left_padding">0</property>
-			  <property name="right_padding">0</property>
-
-			  <child>
-			    <widget class="GtkHBox" id="hbox9">
-			      <property name="visible">True</property>
-			      <property name="homogeneous">False</property>
-			      <property name="spacing">2</property>
-
-			      <child>
-				<widget class="GtkImage" id="image11">
-				  <property name="visible">True</property>
-				  <property name="stock">gtk-disconnect</property>
-				  <property name="icon_size">4</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
-			      </child>
-
-			      <child>
-				<widget class="GtkLabel" id="label17">
-				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">Disconnect</property>
-				  <property name="use_underline">True</property>
-				  <property name="use_markup">False</property>
-				  <property name="justify">GTK_JUSTIFY_LEFT</property>
-				  <property name="wrap">False</property>
-				  <property name="selectable">False</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
-				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-				  <property name="width_chars">-1</property>
-				  <property name="single_line_mode">False</property>
-				  <property name="angle">0</property>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
-			      </child>
-			    </widget>
-			  </child>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkButton" id="connect_btn">
-		      <property name="visible">True</property>
-		      <property name="can_default">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="relief">GTK_RELIEF_NORMAL</property>
-		      <property name="focus_on_click">True</property>
-		      <signal name="clicked" handler="on_connect_clicked" last_modification_time="Mon, 20 Jun 2005 03:31:55 GMT"/>
-
-		      <child>
-			<widget class="GtkAlignment" id="alignment3">
-			  <property name="visible">True</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xscale">0</property>
-			  <property name="yscale">0</property>
-			  <property name="top_padding">0</property>
-			  <property name="bottom_padding">0</property>
-			  <property name="left_padding">0</property>
-			  <property name="right_padding">0</property>
-
-			  <child>
-			    <widget class="GtkHBox" id="hbox8">
-			      <property name="visible">True</property>
-			      <property name="homogeneous">False</property>
-			      <property name="spacing">2</property>
-
-			      <child>
-				<widget class="GtkImage" id="image10">
-				  <property name="visible">True</property>
-				  <property name="stock">gtk-connect</property>
-				  <property name="icon_size">4</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
-			      </child>
-
-			      <child>
-				<widget class="GtkLabel" id="label16">
-				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">Connect</property>
-				  <property name="use_underline">True</property>
-				  <property name="use_markup">False</property>
-				  <property name="justify">GTK_JUSTIFY_LEFT</property>
-				  <property name="wrap">False</property>
-				  <property name="selectable">False</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
-				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-				  <property name="width_chars">-1</property>
-				  <property name="single_line_mode">False</property>
-				  <property name="angle">0</property>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
-			      </child>
-			    </widget>
-			  </child>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">False</property>
-		  <property name="fill">True</property>
-		</packing>
-	      </child>
 	    </widget>
 	    <packing>
 	      <property name="tab_expand">False</property>
diff -urN pympd-0.07.old/src/modules/mpdlib2.py pympd-0.07/src/modules/mpdlib2.py
--- pympd-0.07.old/src/modules/mpdlib2.py	2007-11-11 17:32:08.000000000 +0000
+++ pympd-0.07/src/modules/mpdlib2.py	2007-11-11 17:32:19.000000000 +0000
@@ -6,13 +6,39 @@
 # OK
 # ACK
 
+def get_socket(host, port, timeout):
+    sock_err = sock = sock_addrinfo = None
+    sock_addrinfo = socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM)
+
+    for res in sock_addrinfo:
+        sock_domain, sock_type, sock_proto, canonname, sock_addr = res
+        sock_err = None
+        try:
+            sock = socket.socket(sock_domain, sock_type, sock_proto)
+            sock.settimeout(timeout)
+        except socket.error, sock_err:
+            continue
+
+        try:
+            sock.connect(sock_addr)
+        except socket.error, sock_err:
+            sock.close()
+            continue
+    
+        break
+    
+    if sock_err:
+        raise sock_err
+
+    return sock
+
 class socket_talker(object):
 
-    def __init__(self, host, port):
+    def __init__(self, host, port, timeout):
         self.host = host
         self.port = port
-        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.sock.connect((host, port))
+        self.timeout = timeout
+        self.sock = get_socket(host, port, timeout)
         self.file = self.sock.makefile("rb+")
         self.current_line = ''
         self.ack = ''
@@ -285,8 +311,8 @@
                 '\n  }>')
 
 class mpd_connection(object):
-    def __init__(self, host, port):
-        self.talker = socket_talker(host, port)
+    def __init__(self, host, port, timeout):
+        self.talker = socket_talker(host, port, timeout)
         self.send = command_sender(self.talker)
         self.fetch = response_fetcher(self.talker)
         self.do = sender_n_fetcher(self.send, self.fetch)
@@ -321,8 +347,9 @@
     password, host = parse_host(os.environ.get('MPD_HOST', 'localhost'))
     host = kw.get('host', host)
     password = kw.get('password', password)
+    timeout = kw.get('timeout', 1)
 
-    conn = mpd_connection(host, port)
+    conn = mpd_connection(host, port, timeout)
     if password:
         conn.password(password)
     return conn
diff -urN pympd-0.07.old/src/modules/pympdclient2.py pympd-0.07/src/modules/pympdclient2.py
--- pympd-0.07.old/src/modules/pympdclient2.py	2007-11-11 17:32:08.000000000 +0000
+++ pympd-0.07/src/modules/pympdclient2.py	2007-11-11 17:32:28.000000000 +0000
@@ -1,5 +1,7 @@
 import mpdlib2
 import threading
+import socket
+import errno
 
 def fillSong(song):
     if not song.has_key('artist'):
@@ -48,13 +50,19 @@
 
     #updated
     # connect in mpdclient2 takes keyword arguments.
-    def _connect(self, mpd_host, mpd_port, mpd_password=None):
+    def _connect(self, mpd_host, mpd_port, mpd_timeout, mpd_password=None):
         try:
-            self.mpd = mpdlib2.connect(host=mpd_host, port=mpd_port, password=mpd_password)
+            self.mpd = mpdlib2.connect(host=mpd_host, port=mpd_port, password=mpd_password, timeout=mpd_timeout)
 
-            return True
-        except:
-            return False
+            return ""
+        except socket.error, sock_err:
+            if isinstance(sock_err, socket.timeout):
+                return str(sock_err)
+            else:
+                return (sock_err[0] == errno.EINPROGRESS and os.strerror(errno.ETIMEDOUT) \
+                            or sock_err[1])
+        except Exception, msg:
+            return msg
 
     #updated
     # should work without adjustments.
diff -urN pympd-0.07.old/src/modules/pympdriver.py pympd-0.07/src/modules/pympdriver.py
--- pympd-0.07.old/src/modules/pympdriver.py	2007-11-11 17:32:08.000000000 +0000
+++ pympd-0.07/src/modules/pympdriver.py	2007-11-11 17:32:31.000000000 +0000
@@ -705,8 +705,6 @@
         self.prefDispAll = self.xml.get_widget("pref_client_dbALL")
         self.prefStopQuit = self.xml.get_widget("pref_client_stopQuit")
         self.prefDebug = self.xml.get_widget("pref_client_debug")
-        self.disconnectButton = self.xml.get_widget("disconnect_btn")
-        self.connectButton = self.xml.get_widget("connect_btn")
         self.playlistPrefView = self.xml.get_widget("playlistPrefView")
         self.keyView = self.xml.get_widget("keyView")
 
@@ -944,7 +942,10 @@
         else:
             password = None
 
-        if self.pympd._connect(get('host'), int(get('port')), password):
+        set('timeout', self.prefConnTimeoutSpinner.get_value_as_int())
+
+        err_msg = self.pympd._connect(get('host'), int(get('port')), get('timeout'), password)
+        if not err_msg:
             self.statusLabel.set_text("Connected")
             self.connected = True
             self.correctConnectionButtons()
@@ -956,19 +957,19 @@
             self.hdStoreBuilt = False
             gobject.timeout_add(500, self.statusUpdate)
         else:
-            self.statusLabel.set_text("Connection Failed")
+            self.statusLabel.set_text("Connection Failed: %s" % err_msg)
+            self.connected = False
+            self.correctConnectionButtons()
+            self.statsLabel.set_label("")
+            self.updateLabels(False)
 
     def correctConnectionButtons(self):
         if self.connected == True:
-            self.connectButton.set_property('sensitive',False)
             self.menuConnect.set_property('sensitive',False)
-            self.disconnectButton.set_property('sensitive',True)
             self.menuDisconnect.set_property('sensitive',True)
             
         else:
-            self.connectButton.set_property('sensitive',True)
             self.menuConnect.set_property('sensitive',True)
-            self.disconnectButton.set_property('sensitive',False)
             self.menuDisconnect.set_property('sensitive',False)
 
     def initListStores(self):
@@ -2067,6 +2068,7 @@
     def prefs_close(self, obj):
         set('host', self.prefConnHostEntry.get_text())
         set('port', self.prefConnPortEntry.get_text())
+        set('timeout', self.prefConnTimeoutSpinner.get_text())
         self.saveConfigParser(CONFIG_FILE)
         self.prefsDialog.hide()
 
