diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/cmds/ipmi-messaging-support-cmds.c freeipmi-0.8.1_HL/libfreeipmi/src/cmds/ipmi-messaging-support-cmds.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/cmds/ipmi-messaging-support-cmds.c	2009-11-22 21:08:40.000000000 +0100
+++ freeipmi-0.8.1_HL/libfreeipmi/src/cmds/ipmi-messaging-support-cmds.c	2009-12-11 09:19:17.453164400 +0100
@@ -1041,7 +1041,7 @@
                        uint8_t message_encryption,
                        uint8_t tracking_operation,
                        const void *message_data,
-                       unsigned int message_data_len,
+                       uint32_t message_data_len,
                        fiid_obj_t obj_cmd_rq)
 {
   if (!IPMI_CHANNEL_NUMBER_VALID (channel_number)
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/driver/ipmi-openipmi-driver.c freeipmi-0.8.1_HL/libfreeipmi/src/driver/ipmi-openipmi-driver.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/driver/ipmi-openipmi-driver.c	2009-11-22 20:11:34.000000000 +0100
+++ freeipmi-0.8.1_HL/libfreeipmi/src/driver/ipmi-openipmi-driver.c	2009-12-11 09:18:49.206418800 +0100
@@ -353,6 +353,9 @@
 int
 ipmi_openipmi_ctx_io_init (ipmi_openipmi_ctx_t ctx)
 {
+#if defined __CYGWIN__ /* HLiebig: no Open IPMI driver support on cygwin */
+  return (-1);
+#else
   unsigned int addr = IPMI_SLAVE_ADDRESS_BMC;
   char *driver_device;
 
@@ -395,6 +398,7 @@
   close (ctx->device_fd);
   ctx->device_fd = -1;
   return (-1);
+#endif
 }
 
 static int
@@ -406,6 +410,9 @@
                  fiid_obj_t obj_cmd_rq,
                  unsigned int is_ipmb)
 {
+#if defined __CYGWIN__ /* HLiebig: no Open IPMI driver support on cygwin */
+  return (-1);
+#else
   uint8_t rq_buf_temp[IPMI_OPENIPMI_BUFLEN];
   uint8_t rq_buf[IPMI_OPENIPMI_BUFLEN];
   uint8_t rq_cmd;
@@ -481,12 +488,16 @@
     }
 
   return (0);
+#endif
 }
 
 static int
 _openipmi_read (ipmi_openipmi_ctx_t ctx,
                 fiid_obj_t obj_cmd_rs)
 {
+#if defined __CYGWIN__ /* HLiebig: no Open IPMI driver support on cygwin */
+  return (-1);
+#else
   uint8_t rs_buf_temp[IPMI_OPENIPMI_BUFLEN];
   uint8_t rs_buf[IPMI_OPENIPMI_BUFLEN];
   struct ipmi_system_interface_addr rs_addr;
@@ -557,6 +568,7 @@
     }
 
   return (0);
+#endif
 }
 
 int
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/interface/ipmi-lan-interface.c freeipmi-0.8.1_HL/libfreeipmi/src/interface/ipmi-lan-interface.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/interface/ipmi-lan-interface.c	2009-10-22 19:18:28.000000000 +0200
+++ freeipmi-0.8.1_HL/libfreeipmi/src/interface/ipmi-lan-interface.c	2009-12-11 09:17:48.463417200 +0100
@@ -890,6 +890,75 @@
                    struct sockaddr *from,
                    socklen_t *fromlen)
 {
+#if defined __CYGWIN__
+/* HLiebig:
+// This is a slightly modified version based on the ipmitool network receive code from ipmitool.sourceforge.net 
+// It seems that recvfrom has some problems under cygwin see (Link pointed out by Al Chu )
+// http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.win32.programmer.networks&tid=1d06c188-9524-434c-a6bf-35ab1ab0bedf&cat=&lang=&cr=&sloc=&p=1
+*/
+  ssize_t rv = -1;
+  fd_set read_set, err_set;
+  struct timeval tmout;
+  int ret;
+  int timeout = 5; // BUGBUG: Fixed Value, but any IPMI command should expire on the IPMB after 5 seconds
+
+  FD_ZERO(&read_set);
+  FD_SET(s, &read_set);
+  
+  FD_ZERO(&err_set);
+  FD_SET(s, &err_set);
+
+  tmout.tv_sec = timeout;
+  tmout.tv_usec = 0;
+
+
+  ret = select(s + 1, &read_set, NULL, &err_set, &tmout);
+  
+  if (ret < 0 || FD_ISSET(s, &err_set) || !FD_ISSET(s, &read_set))
+    {
+      ERRNO_TRACE (errno);
+      return (-1);
+    }
+  
+  /* the first read may return ECONNREFUSED because the rmcp ping
+   * packet--sent to UDP port 623--will be processed by both the
+   * BMC and the OS.
+   *
+   * The problem with this is that the ECONNREFUSED takes
+   * priority over any other received datagram; that means that
+   * the Connection Refused shows up _before_ the response packet,
+   * regardless of the order they were sent out.  (unless the
+   * response is read before the connection refused is returned)
+   */
+  rv = recv(s, buf, len, flags);
+
+  if (rv < 0) {
+    FD_ZERO(&read_set);
+    FD_SET(s, &read_set);
+    
+    FD_ZERO(&err_set);
+    FD_SET(s, &err_set);
+    
+    tmout.tv_sec = timeout;
+    tmout.tv_usec = 0;
+    
+    ret = select(s + 1, &read_set, NULL, &err_set, &tmout);
+    if (ret < 0 || FD_ISSET(s, &err_set) || !FD_ISSET(s, &read_set))
+      {
+        ERRNO_TRACE (errno);
+        return (-1);
+      }
+    
+    if ((rv = recv(s, buf, len, flags)) < 0)
+      {
+        ERRNO_TRACE (errno);
+        return (-1);
+      }
+
+  }
+    
+  return (rv);
+#else
   ssize_t rv;
 
   if (!buf
@@ -906,5 +975,6 @@
     }
   
   return (rv);
+#endif
 }
 
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/locate/ipmi-locate-util.c freeipmi-0.8.1_HL/libfreeipmi/src/locate/ipmi-locate-util.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/locate/ipmi-locate-util.c	2009-03-06 23:25:14.000000000 +0100
+++ freeipmi-0.8.1_HL/libfreeipmi/src/locate/ipmi-locate-util.c	2009-12-11 09:17:40.745556400 +0100
@@ -42,15 +42,15 @@
   if (!ctx || ctx->magic != IPMI_LOCATE_CTX_MAGIC)
     return;
 
-  if (errno == 0)
+  if (__errno == 0)
     ctx->errnum = IPMI_LOCATE_ERR_SUCCESS;
-  else if (errno == EPERM)
+  else if (__errno == EPERM)
     ctx->errnum = IPMI_LOCATE_ERR_PERMISSION;
-  else if (errno == EACCES)
+  else if (__errno == EACCES)
     ctx->errnum = IPMI_LOCATE_ERR_PERMISSION;
-  else if (errno == ENOMEM)
+  else if (__errno == ENOMEM)
     ctx->errnum = IPMI_LOCATE_ERR_OUT_OF_MEMORY;
-  else if (errno == EINVAL)
+  else if (__errno == EINVAL)
     ctx->errnum = IPMI_LOCATE_ERR_INTERNAL_ERROR;
   else
     ctx->errnum = IPMI_LOCATE_ERR_SYSTEM_ERROR;
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/sdr-cache/ipmi-sdr-cache-util.c freeipmi-0.8.1_HL/libfreeipmi/src/sdr-cache/ipmi-sdr-cache-util.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/sdr-cache/ipmi-sdr-cache-util.c	2009-03-06 23:25:14.000000000 +0100
+++ freeipmi-0.8.1_HL/libfreeipmi/src/sdr-cache/ipmi-sdr-cache-util.c	2009-12-11 09:17:34.168189200 +0100
@@ -42,33 +42,33 @@
   if (!ctx || ctx->magic != IPMI_SDR_CACHE_CTX_MAGIC)
     return;
 
-  if (errno == 0)
+  if (__errno == 0)
     ctx->errnum = IPMI_SDR_CACHE_ERR_SUCCESS;
-  else if (errno == ENOSPC)
+  else if (__errno == ENOSPC)
     ctx->errnum = IPMI_SDR_CACHE_ERR_FILESYSTEM;
-  else if (errno == EMFILE)
+  else if (__errno == EMFILE)
     ctx->errnum = IPMI_SDR_CACHE_ERR_FILESYSTEM;
-  else if (errno == ENFILE)
+  else if (__errno == ENFILE)
     ctx->errnum = IPMI_SDR_CACHE_ERR_FILESYSTEM;
-  else if (errno == EPERM)
+  else if (__errno == EPERM)
     ctx->errnum = IPMI_SDR_CACHE_ERR_PERMISSION;
-  else if (errno == EACCES)
+  else if (__errno == EACCES)
     ctx->errnum = IPMI_SDR_CACHE_ERR_PERMISSION;
-  else if (errno == EISDIR)
+  else if (__errno == EISDIR)
     ctx->errnum = IPMI_SDR_CACHE_ERR_PERMISSION;
-  else if (errno == EROFS)
+  else if (__errno == EROFS)
     ctx->errnum = IPMI_SDR_CACHE_ERR_PERMISSION;
-  else if (errno == ENOENT)
+  else if (__errno == ENOENT)
     ctx->errnum = IPMI_SDR_CACHE_ERR_CACHE_READ_CACHE_DOES_NOT_EXIST;
-  else if (errno == ENOTDIR)
+  else if (__errno == ENOTDIR)
     ctx->errnum = IPMI_SDR_CACHE_ERR_CACHE_READ_CACHE_DOES_NOT_EXIST;
-  else if (errno == ENAMETOOLONG)
+  else if (__errno == ENAMETOOLONG)
     ctx->errnum = IPMI_SDR_CACHE_ERR_FILENAME_INVALID;
-  else if (errno == ELOOP)
+  else if (__errno == ELOOP)
     ctx->errnum = IPMI_SDR_CACHE_ERR_FILENAME_INVALID;
-  else if (errno == ENOMEM)
+  else if (__errno == ENOMEM)
     ctx->errnum = IPMI_SDR_CACHE_ERR_OUT_OF_MEMORY;
-  else if (errno == EINVAL)
+  else if (__errno == EINVAL)
     ctx->errnum = IPMI_SDR_CACHE_ERR_INTERNAL_ERROR;
   else
     ctx->errnum = IPMI_SDR_CACHE_ERR_SYSTEM_ERROR;
diff -Nur freeipmi-0.8.1_ori/libfreeipmi/src/spec/ipmi-iana-enterprise-numbers-spec.c freeipmi-0.8.1_HL/libfreeipmi/src/spec/ipmi-iana-enterprise-numbers-spec.c
--- freeipmi-0.8.1_ori/libfreeipmi/src/spec/ipmi-iana-enterprise-numbers-spec.c	2009-09-01 18:18:50.000000000 +0200
+++ freeipmi-0.8.1_HL/libfreeipmi/src/spec/ipmi-iana-enterprise-numbers-spec.c	2009-12-11 09:17:27.184618800 +0100
@@ -10397,7 +10397,7 @@
     "Davox Corp.", /* 10365 */
     "Dialpad Communications", /* 10366 */
     "donnie21", /* 10367 */
-    "Fujitsu Siemens Computers", /* 10368 */
+    "Fujitsu Technology Solutions", /* 10368 */
     "Fujitsu Prime Software Technologies Ltd.", /* 10369 */
     "Impulsesoft", /* 10370 */
     "Inabyte Inc.", /* 10371 */
