diff --git a/cbits/hstrptime.c b/cbits/hstrptime.c
--- a/cbits/hstrptime.c
+++ b/cbits/hstrptime.c
@@ -121,7 +121,10 @@
     { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
 };
 
+static double our_strtod(const char *s, char **sret);
+static double our_wcstod(const wchar_t *s, wchar_t **sret);
 
+
 /* Status of lookup: do we use the locale data or the raw data?  */
 enum locale_status { Not, loc, raw };
 
@@ -549,7 +552,7 @@
                 {
                     double sval;
                     wchar_t *end;
-                    sval = wcstod(rp, &end);
+                    sval = our_wcstod(rp, &end);
                     if( sval >= 0.0 && sval <= 61.0) {
                         tm->tm_sec = sval;
                         *psecs = sval;
@@ -1016,7 +1019,7 @@
                    {
                        double sval;
                        char *end;
-                       sval = strtod(rp, &end);
+                       sval = our_strtod(rp, &end);
                        if( sval >= 0.0 && sval <= 61.0) {
                            tm->tm_sec = sval;
                            *psecs = sval;
@@ -1233,3 +1236,199 @@
     return strptime_internal (buf, format, tm, &decided, psecs, poffset);
     }
 }
+
+
+
+// Copied from ReactOS, http://reactos-mirror.googlecode.com/svn/trunk/reactos/lib/sdk/crt/string/strtod.c
+// and http://reactos-mirror.googlecode.com/svn/trunk/reactos/lib/sdk/crt/string/wcstod.c
+// Modified to also handle ',' as decimal separator
+/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+
+
+static double our_strtod(const char *s, char **sret)
+{
+  long double r;                /* result */
+  int e;                        /* exponent */
+  long double d;                /* scale */
+  int sign;                     /* +- 1.0 */
+  int esign;
+  int i;
+  int flags=0;
+
+  r = 0.0;
+  sign = 1;
+  e = 0;
+  esign = 1;
+
+  if (s == NULL)
+     return r;
+
+
+  while ((*s == ' ') || (*s == '\t'))
+    s++;
+
+  if (*s == '+')
+    s++;
+  else if (*s == '-')
+  {
+    sign = -1;
+    s++;
+  }
+
+  while ((*s >= '0') && (*s <= '9'))
+  {
+    flags |= 1;
+    r *= 10.0;
+    r += *s - '0';
+    s++;
+  }
+
+  if (*s == '.' || *s == ',')
+  {
+    d = 0.1L;
+    s++;
+    while ((*s >= '0') && (*s <= '9'))
+    {
+      flags |= 2;
+      r += d * (*s - '0');
+      s++;
+      d *= 0.1L;
+    }
+  }
+
+  if (flags == 0)
+  {
+    if (sret)
+      *sret = (char *)s;
+    return 0;
+  }
+
+  if ((*s == 'e') || (*s == 'E'))
+  {
+    s++;
+    if (*s == '+')
+      s++;
+    else if (*s == '-')
+    {
+      s++;
+      esign = -1;
+    }
+    if ((*s < '0') || (*s > '9'))
+    {
+      if (sret)
+        *sret = (char *)s;
+      return r;
+    }
+
+    while ((*s >= '0') && (*s <= '9'))
+    {
+      e *= 10;
+      e += *s - '0';
+      s++;
+    }
+  }
+
+  if (esign < 0)
+    for (i = 1; i <= e; i++)
+      r *= 0.1L;
+  else
+    for (i = 1; i <= e; i++)
+      r *= 10.0;
+
+  if (sret)
+    *sret = (char *)s;
+  return r * sign;
+}
+
+static double our_wcstod(const wchar_t *s, wchar_t **sret)
+{
+  long double r;                /* result */
+  int e;                        /* exponent */
+  long double d;                /* scale */
+  int sign;                     /* +- 1.0 */
+  int esign;
+  int i;
+  int flags=0;
+
+  r = 0.0;
+  sign = 1;
+  e = 0;
+  esign = 1;
+
+  while ((*s == L' ') || (*s == L'\t'))
+    s++;
+
+  if (*s == L'+')
+    s++;
+  else if (*s == L'-')
+  {
+    sign = -1;
+    s++;
+  }
+
+  while ((*s >= L'0') && (*s <= L'9'))
+  {
+    flags |= 1;
+    r *= 10.0;
+    r += *s - L'0';
+    s++;
+  }
+
+  if (*s == L'.' || *s == L',')
+  {
+    d = 0.1L;
+    s++;
+    while ((*s >= L'0') && (*s <= L'9'))
+    {
+      flags |= 2;
+      r += d * (*s - L'0');
+      s++;
+      d *= 0.1L;
+    }
+  }
+
+  if (flags == 0)
+  {
+    if (sret)
+      *sret = (wchar_t *)s;
+    return 0;
+  }
+
+  if ((*s == L'e') || (*s == L'E'))
+  {
+    s++;
+    if (*s == L'+')
+      s++;
+    else if (*s == L'-')
+    {
+      s++;
+      esign = -1;
+    }
+    if ((*s < L'0') || (*s > L'9'))
+    {
+      if (sret)
+        *sret = (wchar_t *)s;
+      return r;
+    }
+
+    while ((*s >= L'0') && (*s <= L'9'))
+    {
+      e *= 10;
+      e += *s - L'0';
+      s++;
+    }
+  }
+
+  if (esign < 0)
+    for (i = 1; i <= e; i++)
+      r *= 0.1L;
+  else
+    for (i = 1; i <= e; i++)
+      r *= 10.0;
+
+  if (sret)
+    *sret = (wchar_t *)s;
+  return r * sign;
+}
+
diff --git a/strptime.cabal b/strptime.cabal
--- a/strptime.cabal
+++ b/strptime.cabal
@@ -1,6 +1,6 @@
 Name: strptime
 Category: System, Data, Parsing
-Version: 0.1.5
+Version: 0.1.6
 Cabal-version: >= 1.2
 Build-type: Simple
 Copyright: Eugene Kirpichov
