diff --git a/src/comio/comio.h b/src/comio/comio.h
index a68eb354e0fdb5fd505c60eb7d5495018e480f56..e42a365b983beab1726b476067284209d75c7627 100644
--- a/src/comio/comio.h
+++ b/src/comio/comio.h
@@ -69,6 +69,8 @@ extern "C" {
 
 COM_HANDLE	comOpen(const char* device);
 BOOL		comClose(COM_HANDLE);
+long		comGetBaudRate(COM_HANDLE);
+BOOL		comSetBaudRate(COM_HANDLE, ulong rate);
 int			comGetModemStatus(COM_HANDLE);
 int			comRaiseDTR(COM_HANDLE);
 int			comLowerDTR(COM_HANDLE);
diff --git a/src/comio/comio_win32.c b/src/comio/comio_win32.c
index bbc5de3f8e8fe461db4690ad6c2d93ba905d4e7e..3d129ca83e5f6129a90a45c2ec9c03854bb1c7f2 100644
--- a/src/comio/comio_win32.c
+++ b/src/comio/comio_win32.c
@@ -69,6 +69,28 @@ BOOL comClose(COM_HANDLE handle)
 	return CloseHandle(handle);
 }
 
+long comGetBaudRate(COM_HANDLE handle)
+{
+	DCB dcb;
+
+	if(GetCommState(handle, &dcb)!=TRUE)
+		return COM_ERROR;
+
+	return dcb.BaudRate;
+}
+
+BOOL comSetBaudRate(COM_HANDLE handle, unsigned long rate)
+{
+	DCB dcb;
+
+	if(GetCommState(handle, &dcb)!=TRUE)
+		return FALSE;
+
+	dcb.BaudRate=rate;
+
+	return SetCommState(handle, &dcb);
+}
+
 int comGetModemStatus(COM_HANDLE handle)
 {
 	DWORD status=0;