diff --git a/Lib/dumbdbm.py b/Lib/dumbdbm.py
index 45a2f36..f1cc41b 100644
--- a/Lib/dumbdbm.py
+++ b/Lib/dumbdbm.py
@@ -33,9 +33,13 @@
 class _Database:
 
     def __init__(self, file):
-        self._dirfile = file + '.dir'
-        self._datfile = file + '.dat'
-        self._bakfile = file + '.bak'
+        if _os.sep == '.':
+            endsep = '/'
+        else:
+            endsep = '.'
+        self._dirfile = file + endsep + 'dir'
+        self._datfile = file + endsep + 'dat'
+        self._bakfile = file + endsep + 'bak'
         # Mod by Jack: create data file if needed
         try:
             f = _open(self._datfile, 'r')
diff --git a/Lib/os.py b/Lib/os.py
index ddeb84c..201aa9d 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -3,7 +3,7 @@
 This exports:
   - all functions from posix, nt, dos, os2, mac, or ce, e.g. unlink, stat, etc.
   - os.path is one of the modules posixpath, ntpath, macpath, or dospath
-  - os.name is 'posix', 'nt', 'dos', 'os2', 'mac', or 'ce'
+  - os.name is 'posix', 'nt', 'dos', 'os2', 'mac', 'ce' or 'riscos'
   - os.curdir is a string representing the current directory ('.' or ':')
   - os.pardir is a string representing the parent directory ('..' or '::')
   - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
@@ -147,6 +147,25 @@
     __all__.extend(_get_exports_list(ce))
     del ce
 
+elif 'riscos' in _names:
+    name = 'riscos'
+    linesep = '\n'
+    curdir = '@'; pardir = '^'; sep = '.'; pathsep = ','
+    defpath = '<Run$Dir>'
+    from riscos import *
+    try:
+        from riscos import _exit
+    except ImportError:
+        pass
+    import riscospath
+    path = riscospath
+    del riscospath
+    from riscosenviron import environ
+
+    import riscos
+    __all__.extend(_get_exports_list(riscos))
+    del ce
+
 else:
     raise ImportError, 'no os specific module found'
 
@@ -317,14 +336,16 @@
                 exc, arg = error, (errno, msg)
     raise exc, arg
 
-# Change environ to automatically call putenv() if it exists
-try:
-    # This will fail if there's no putenv
-    putenv
-except NameError:
-    pass
-else:
-    import UserDict
+
+if name != "riscos":
+    # Change environ to automatically call putenv() if it exists
+    try:
+        # This will fail if there's no putenv
+        putenv
+    except NameError:
+        pass
+    else:
+        import UserDict
 
     if name in ('os2', 'nt', 'dos'):  # Where Env Var Names Must Be UPPERCASE
         # But we store them as upper case
@@ -363,12 +384,11 @@
 
     environ = _Environ(environ)
 
-def getenv(key, default=None):
-    """Get an environment variable, return None if it doesn't exist.
-
-    The optional second argument can specify an alternate default."""
-    return environ.get(key, default)
-__all__.append("getenv")
+    def getenv(key, default=None):
+        """Get an environment variable, return None if it doesn't exist.
+        The optional second argument can specify an alternate default."""
+        return environ.get(key, default)
+    __all__.append("getenv")
 
 def _exists(name):
     try:
diff --git a/Lib/site.py b/Lib/site.py
index 12fe71d..807ebc7 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -59,6 +59,12 @@
 
 import sys, os
 
+if os.sep==".":
+    endsep = "/"
+else:
+    endsep = "."
+
+
 def makepath(*paths):
     dir = os.path.join(*paths)
     return os.path.normcase(os.path.abspath(dir))
@@ -99,7 +105,7 @@
     names = map(os.path.normcase, names)
     names.sort()
     for name in names:
-        if name[-4:] == ".pth":
+        if name[-4:] == endsep + "pth":
             addpackage(sitedir, name)
 
 def addpackage(sitedir, name):
diff --git a/Lib/socket.py b/Lib/socket.py
index c928700..136a052 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -48,7 +48,8 @@
 del _socket
 
 if (sys.platform.lower().startswith("win")
-    or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")):
+    or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")
+    or (sys.platform=="RISCOS")):
 
     # be sure this happens only once, even in the face of reload():
     try:
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 2eb90f9..302f707 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -41,6 +41,8 @@
     from macurl2path import url2pathname, pathname2url
 elif os.name == 'nt':
     from nturl2path import url2pathname, pathname2url
+elif os.name == 'riscos':
+    from rourl2path import url2pathname, pathname2url
 else:
     def url2pathname(pathname):
         return unquote(pathname)
diff --git a/Lib/whichdb.py b/Lib/whichdb.py
index 1f12099..fe54cc5 100644
--- a/Lib/whichdb.py
+++ b/Lib/whichdb.py
@@ -1,5 +1,12 @@
 """Guess which db package to use to open a db file."""
 
+import os
+
+if os.sep==".":
+    endsep = "/"
+else:
+    endsep = "."
+ 
 def whichdb(filename):
     """Guess which db package to use to open a db file.
 
@@ -17,9 +24,9 @@
 
     # Check for dbm first -- this has a .pag and a .dir file
     try:
-        f = open(filename + ".pag", "rb")
+        f = open(filename + endsep + "pag", "rb")
         f.close()
-        f = open(filename + ".dir", "rb")
+        f = open(filename + endsep + "dir", "rb")
         f.close()
         return "dbm"
     except IOError:
@@ -27,9 +34,9 @@
 
     # Check for dumbdbm next -- this has a .dir and and a .dat file
     try:
-        f = open(filename + ".dat", "rb")
+        f = open(filename + endsep + "dat", "rb")
         f.close()
-        f = open(filename + ".dir", "rb")
+        f = open(filename + endsep + "dir", "rb")
         try:
             if f.read(1) in ["'", '"']:
                 return "dumbdbm"
