diff -uNr 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:04:59.000000000 +0000
+++ pympd-0.07/src/glade/pympd.glade	2007-11-11 17:05:11.000000000 +0000
@@ -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>
diff -uNr 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:04:59.000000000 +0000
+++ pympd-0.07/src/modules/mpdlib2.py	2007-11-11 17:05:11.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 -uNr 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:04:59.000000000 +0000
+++ pympd-0.07/src/modules/pympdclient2.py	2007-11-11 17:05:11.000000000 +0000
@@ -48,9 +48,9 @@
 
     #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:
diff -uNr 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:04:59.000000000 +0000
+++ pympd-0.07/src/modules/pympdriver.py	2007-11-11 17:05:11.000000000 +0000
@@ -944,7 +944,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,7 +959,11 @@
             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:
@@ -2067,6 +2074,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()
 
