diff -ru live/groupsock/Groupsock.cpp live-patched/groupsock/Groupsock.cpp
--- live/groupsock/Groupsock.cpp	Thu Nov  6 03:53:15 2003
+++ live-patched/groupsock/Groupsock.cpp	Sun Dec  7 21:30:15 2003
@@ -26,7 +26,7 @@
 #if defined(__WIN32__) || defined(_WIN32)
 #include <strstrea.h>
 #else
-#include <strstream.h>
+#include <strstream>
 #endif
 #include <stdio.h>
 
diff -ru live/groupsock/NetInterface.cpp live-patched/groupsock/NetInterface.cpp
--- live/groupsock/NetInterface.cpp	Thu Nov  6 03:53:15 2003
+++ live-patched/groupsock/NetInterface.cpp	Sun Dec  7 21:30:30 2003
@@ -24,7 +24,7 @@
 #if defined(__WIN32__) || defined(_WIN32)
 #include <strstrea.h>
 #else
-#include <strstream.h>
+#include <strstream>
 #endif
 
 ////////// NetInterface //////////
--- live/liveMedia/RTSPClient.cpp	2007-04-24 11:38:22.000000000 +0200
+++ live-patched/liveMedia/RTSPClient.cpp	2007-04-26 15:19:54.000000000 +0200
@@ -21,13 +21,53 @@
 #include "RTSPClient.hh"
 #include "RTSPCommon.hh"
 #include "Base64.hh"
-#include "Locale.hh"
 #include <GroupsockHelper.hh>
 #include "our_md5.h"
 #ifdef SUPPORT_REAL_RTSP
 #include "../RealRTSP/include/RealRTSP.hh"
 #endif
 
+#include <locale.h>
+#include <stdarg.h>
+/* Radix safe (always uses .) printf and friends */
+int radix_safe_sprintf( char *str, const char *format, ...)
+{
+     va_list args;
+     int result = 0;
+     char *locale = NULL;
+
+     locale = strDup( setlocale( LC_NUMERIC, NULL ) );
+     setlocale( LC_NUMERIC, "C" );
+
+     va_start( args, format );
+     result = vsprintf(str, format, args );
+     va_end( args );
+
+     setlocale( LC_NUMERIC, locale );
+     delete[] locale;
+
+     return result;
+}
+
+int radix_safe_sscanf( const char *str, const char *format, ...)
+{
+    va_list args;
+    int result = 0;
+    char *locale = NULL;
+
+    locale = strDup( setlocale( LC_NUMERIC, NULL ) );
+    setlocale( LC_NUMERIC, "C" );
+
+    va_start( args, format );
+    result = vsscanf(str, format, args );
+    va_end( args );
+
+    setlocale( LC_NUMERIC, locale );
+    delete[] locale;
+
+    return result;
+}
+
 ////////// RTSPClient //////////
 
 RTSPClient* RTSPClient::createNew(UsageEnvironment& env,
@@ -989,8 +1029,7 @@
     // This is the default value; we don't need a "Scale:" header:
     buf[0] = '\0';
   } else {
-    Locale("POSIX", LC_NUMERIC);
-    sprintf(buf, "Scale: %f\r\n", scale);
+    radix_safe_sprintf(buf, "Scale: %f\r\n", scale);
   }
 
   return strDup(buf);
@@ -1003,12 +1042,10 @@
     buf[0] = '\0';
   } else if (end < 0) {
     // There's no end time:
-    Locale("POSIX", LC_NUMERIC);
-    sprintf(buf, "Range: npt=%.3f-\r\n", start);
+    radix_safe_sprintf(buf, "Range: npt=%.3f-\r\n", start);
   } else {
     // There's both a start and an end time; include them both in the "Range:" hdr
-    Locale("POSIX", LC_NUMERIC);
-    sprintf(buf, "Range: npt=%.3f-%.3f\r\n", start, end);
+    radix_safe_sprintf(buf, "Range: npt=%.3f-%.3f\r\n", start, end);
   }
 
   return strDup(buf);
@@ -2246,8 +2283,7 @@
   if (_strncasecmp(line, "Scale: ", 7) != 0) return False;
   line += 7;
 
-  Locale("POSIX", LC_NUMERIC);
-  return sscanf(line, "%f", &scale) == 1;
+  return radix_safe_sscanf(line, "%f", &scale) == 1;
 }
 
 Boolean RTSPClient::parseGetParameterHeader(char const* line, 
