diff --git a/Lib/popen2.py b/Lib/popen2.py
index eb8fb9a..73ff77c 100644
--- a/Lib/popen2.py
+++ b/Lib/popen2.py
@@ -89,31 +89,55 @@
             _active.remove(self)
         return self.sts
 
-def popen2(cmd, bufsize=-1):
-    """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
-    specified, it sets the buffer size for the I/O pipes.  The file objects
-    (child_stdout, child_stdin) are returned."""
-    _cleanup()
-    inst = Popen3(cmd, 0, bufsize)
-    return inst.fromchild, inst.tochild
+try:
+    from os import popen2
+except NameError:
+    def popen2(cmd, mode='t', bufsize=-1):
+        """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
+        specified, it sets the buffer size for the I/O pipes.  The file objects
+        (child_stdout, child_stdin) are returned."""
+        if type(mode) is type(0) and bufsize == -1:
+            bufsize = mode
+            mode = 't'
+        assert mode in ('t', 'b')
+        _cleanup()
+        inst = Popen3(cmd, 0, bufsize)
+        return inst.fromchild, inst.tochild
 
-def popen3(cmd, bufsize=-1):
-    """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
-    specified, it sets the buffer size for the I/O pipes.  The file objects
-    (child_stdout, child_stdin, child_stderr) are returned."""
-    _cleanup()
-    inst = Popen3(cmd, 1, bufsize)
-    return inst.fromchild, inst.tochild, inst.childerr
+try:
+    from os import popen3
+except NameError:
+    def popen3(cmd, mode='t', bufsize=-1):
+        """Execute the shell command 'cmd' in a sub-process.  If 'bufsize' is
+        specified, it sets the buffer size for the I/O pipes.  The file objects
+        (child_stdout, child_stdin, child_stderr) are returned."""
+        if type(mode) is type(0) and bufsize == -1:
+            bufsize = mode
+            mode = 't'
+        assert mode in ('t', 'b')
+        _cleanup()
+        inst = Popen3(cmd, 1, bufsize)
+        return inst.fromchild, inst.tochild, inst.childerr
+
+try:
+    from os import popen4
+except NameError:
+    pass # not on unix
 
 def _test():
     teststr = "abc\n"
     print "testing popen2..."
     r, w = popen2('cat')
+    print r, w
     w.write(teststr)
     w.close()
     assert r.read() == teststr
     print "testing popen3..."
-    r, w, e = popen3(['cat'])
+    try:
+        r, w, e = popen3(['cat'])
+    except:
+        r, w, e = popen3('cat')
+    print r, w, e
     w.write(teststr)
     w.close()
     assert r.read() == teststr
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 4d40c07..8ea404e 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -2149,12 +2149,12 @@
 static PyObject *
 posix_popen(PyObject *self, PyObject *args)
 {
-	int bufsize = -1;
 	PyObject *f, *s;
 	int tm = 0;
   
 	char *cmdstring;
 	char *mode = "r";
+	int bufsize = -1;
 	if (!PyArg_ParseTuple(args, "s|si:popen", &cmdstring, &mode, &bufsize))
 		return NULL;
 
@@ -2174,9 +2174,9 @@
 	}
 
 	if (*(mode+1) == 't')
-		f = _PyPopen(cmdstring, tm | _O_TEXT , POPEN_1);
+		f = _PyPopen(cmdstring, tm | _O_TEXT, POPEN_1);
 	else if (*(mode+1) == 'b')
-		f = _PyPopen(cmdstring, tm | _O_BINARY , POPEN_1);
+		f = _PyPopen(cmdstring, tm | _O_BINARY, POPEN_1);
 	else
 		f = _PyPopen(cmdstring, tm | _O_TEXT, POPEN_1);
 
@@ -2221,9 +2221,9 @@
 
 /*
  * Variation on <om win32pipe.popen>
+ *
  * The result of this function is 3 pipes - the process's stdin,
  * stdout and stderr
- *
  */
 
 static PyObject *
@@ -2288,7 +2288,7 @@
 		return NULL;
 	}
 
-	f = _PyPopen(cmdstring, tm , POPEN_4);
+	f = _PyPopen(cmdstring, tm, POPEN_4);
 
 	return f;
 }
@@ -2516,7 +2516,7 @@
 		 if (n != 4)
 			 CloseHandle(hChildStderrRdDup);
 
-		 f = Py_BuildValue("OO",p1,p2);
+		 f = Py_BuildValue("OO",p2,p1);
 		 break;
 	 }
 	
@@ -2545,7 +2545,7 @@
 		 PyFile_SetBufSize(p1, 0);
 		 PyFile_SetBufSize(p2, 0);
 		 PyFile_SetBufSize(p3, 0);
-		 f = Py_BuildValue("OOO",p1,p2,p3);
+		 f = Py_BuildValue("OOO",p2,p1,p3);
 		 break;
 	 }
 	 }
