diff --git a/pyserial/examples/test.py b/pyserial/examples/test.py
index d312fe6..9713145 100644
--- a/pyserial/examples/test.py
+++ b/pyserial/examples/test.py
@@ -51,7 +51,7 @@
             self.s.write(c)
             time.sleep(0.02)    #there might be a small delay until the character is ready (especialy on win32)
             self.failUnless(self.s.inWaiting()==1, "expected exactly one character for inWainting()")
-            self.failUnless(self.s.read(1)==c, "expected an '%s' which was written before" % c)
+            self.failUnless(self.s.read(1)==c, "expected a '%s' which was written before" % c)
         self.failUnless(self.s.read(1)=='', "expected empty buffer after all sent chars are read")
     def test2_LoopbackTimeout(self):
         """timeout: test the timeout/immediate return.
diff --git a/pyserial/examples/test_advanced.py b/pyserial/examples/test_advanced.py
index d9ca93d..8d65b16 100644
--- a/pyserial/examples/test_advanced.py
+++ b/pyserial/examples/test_advanced.py
@@ -58,6 +58,8 @@
             self.failUnlessEqual(self.s.portstr, serial.device(1))
 
     def test_BaudrateSetting(self):
+        self.s.port = PORT
+        self.s.open()
         for baudrate in (300, 9600, 19200, 115200):
             self.s.baudrate = baudrate
             #test get method
@@ -65,7 +67,14 @@
             #test internals
             self.failUnlessEqual(self.s._baudrate, baudrate)
         #test illegal values
-        for illegal_value in (-300, -1, 0, 301, 9000, 12345, 'a', None):
+        for illegal_value in (-300, -1, 0, 'a', None):
+            self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
+
+    def test_BaudrateSetting2(self):
+        #test illegal values, depending on machine/port some of these may be valid...
+        self.s.port = PORT
+        self.s.open()
+        for illegal_value in (500000,576000,921600,92160):
             self.failUnlessRaises(ValueError, self.s.setBaudrate, illegal_value)
 
     def test_BytesizeSetting(self):
diff --git a/pyserial/serial/serialutil.py b/pyserial/serial/serialutil.py
index 40897c2..19ec677 100644
--- a/pyserial/serial/serialutil.py
+++ b/pyserial/serial/serialutil.py
@@ -181,7 +181,7 @@
         if was_open: self.open()
     
     def getPort(self):
-        """get the current port setting. The value that was passed on init or using
+        """Get the current port setting. The value that was passed on init or using
            setPort() is passed back. See also the attribute portstr which contains
            the name of the port as a string."""
         return self._port
@@ -190,10 +190,16 @@
 
 
     def setBaudrate(self, baudrate):
-        """Change baudrate."""
-        if baudrate not in self.BAUDRATES: raise ValueError("Not a valid baudrate: %r" % baudrate)
-        self._baudrate = baudrate
-        if self._isOpen:  self._reconfigurePort()
+        """Change baudrate. It raises a ValueError if the port is open and the
+        baudrate is not possible. If the port is closed, then tha value is
+        accepted and the exception is raised when the port is opened."""
+        #~ if baudrate not in self.BAUDRATES: raise ValueError("Not a valid baudrate: %r" % baudrate)
+        try:
+            self._baudrate = int(baudrate)
+        except TypeError:
+            raise ValueError("Not a valid baudrate: %r" % baudrate)
+        else:
+            if self._isOpen:  self._reconfigurePort()
         
     def getBaudrate(self):
         """Get the current baudrate setting."""
diff --git a/pyserial/serial/serialwin32.py b/pyserial/serial/serialwin32.py
index 35245a7..fa04029 100644
--- a/pyserial/serial/serialwin32.py
+++ b/pyserial/serial/serialwin32.py
@@ -11,7 +11,7 @@
 import win32con   # constants.
 from serialutil import *
 
-VERSION = "$Revision: 1.27 $".split()[1]     #extract CVS version
+VERSION = "$Revision: 1.28 $".split()[1]     #extract CVS version
 
 #from winbase.h. these should realy be in win32con
 MS_CTS_ON  = 16
@@ -70,6 +70,7 @@
         self._overlappedRead = win32file.OVERLAPPED()
         self._overlappedRead.hEvent = win32event.CreateEvent(None, 1, 0, None)
         self._overlappedWrite = win32file.OVERLAPPED()
+        #~ self._overlappedWrite.hEvent = win32event.CreateEvent(None, 1, 0, None)
         self._overlappedWrite.hEvent = win32event.CreateEvent(None, 0, 0, None)
         self._isOpen = True
 
@@ -144,7 +145,10 @@
         comDCB.fErrorChar       = 0
         comDCB.fAbortOnError    = 0
 
-        win32file.SetCommState(self.hComPort, comDCB)
+        try:
+            win32file.SetCommState(self.hComPort, comDCB)
+        except win32file.error, e:
+            raise ValueError("Cannot configure port, some setting was wrong. Original message: %s" % e)
 
     #~ def __del__(self):
         #~ self.close()
@@ -199,6 +203,7 @@
         if not self.hComPort: raise portNotOpenError
         #print repr(s),
         if s:
+            #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
             err, n = win32file.WriteFile(self.hComPort, s, self._overlappedWrite)
             if err: #will be ERROR_IO_PENDING:
                 # Wait for the write to complete.
