diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
index 5ca878d..1482d82 100644
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -412,7 +412,7 @@
 "truncate([size]) -> int.  Truncate the file to at most size bytes.\n"
 "\n"
 "Size defaults to the current file position, as returned by tell().\n"
-"Returns the new size.  Imply an absolute seek to the position size.");
+"The current file position is unchanged.  Returns the new size.\n");
 
 static PyObject *
 bytesio_truncate(bytesio *self, PyObject *args)
@@ -451,7 +451,6 @@
         if (resize_buffer(self, size) < 0)
             return NULL;
     }
-    self->pos = size;
 
     return PyLong_FromSsize_t(size);
 }
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index f02fe8a..a785e79 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -758,8 +758,10 @@
 static PyObject *
 fileio_truncate(fileio *self, PyObject *args)
 {
-	PyObject *posobj = NULL;
+	PyObject *posobj = NULL; /* the new size wanted by the user */
+#ifndef MS_WINDOWS
 	Py_off_t pos;
+#endif
 	int ret;
 	int fd;
 
@@ -774,58 +776,86 @@
 
 	if (posobj == Py_None || posobj == NULL) {
 		/* Get the current position. */
-                posobj = portable_lseek(fd, NULL, 1);
-                if (posobj == NULL)
+		posobj = portable_lseek(fd, NULL, 1);
+		if (posobj == NULL)
 			return NULL;
-        }
-        else {
-		/* Move to the position to be truncated. */
-                posobj = portable_lseek(fd, posobj, 0);
-        }
-	if (posobj == NULL)
-		return NULL;
-
-#if defined(HAVE_LARGEFILE_SUPPORT)
-	pos = PyLong_AsLongLong(posobj);
-#else
-	pos = PyLong_AsLong(posobj);
-#endif
-	if (pos == -1 && PyErr_Occurred())
-		return NULL;
+	}
+	else {
+		Py_INCREF(posobj);
+	}
 
 #ifdef MS_WINDOWS
 	/* MS _chsize doesn't work if newsize doesn't fit in 32 bits,
 	   so don't even try using it. */
 	{
+		PyObject *oldposobj, *tempposobj;
 		HANDLE hFile;
+	
+		/* we save the file pointer position */
+		oldposobj = portable_lseek(fd, NULL, 1); 
+		if (oldposobj == NULL) {
+			Py_DECREF(posobj);
+			return NULL;
+		}
+
+		/* we then move to the truncation position */
+		tempposobj = portable_lseek(fd, posobj, 0);
+		if (tempposobj == NULL) {
+			Py_DECREF(oldposobj);
+			Py_DECREF(posobj);
+			return NULL;
+		}
+		Py_DECREF(tempposobj);
 
 		/* Truncate.  Note that this may grow the file! */
 		Py_BEGIN_ALLOW_THREADS
 		errno = 0;
 		hFile = (HANDLE)_get_osfhandle(fd);
-		ret = hFile == (HANDLE)-1;
+		ret = hFile == (HANDLE)-1; /* testing for INVALID_HANDLE value */
 		if (ret == 0) {
 			ret = SetEndOfFile(hFile) == 0;
 			if (ret)
 				errno = EACCES;
 		}
 		Py_END_ALLOW_THREADS
+
+		/* we restore the file pointer position in any case */
+		tempposobj = portable_lseek(fd, oldposobj, 0);
+		Py_DECREF(oldposobj);
+		if (tempposobj == NULL) {
+			Py_DECREF(posobj);
+			return NULL;
+		}
+		Py_DECREF(tempposobj);
 	}
 #else
+
+#if defined(HAVE_LARGEFILE_SUPPORT)
+	pos = PyLong_AsLongLong(posobj);
+#else
+	pos = PyLong_AsLong(posobj);
+#endif
+	if (PyErr_Occurred()){
+		Py_DECREF(posobj);
+		return NULL;
+	}
+
 	Py_BEGIN_ALLOW_THREADS
 	errno = 0;
 	ret = ftruncate(fd, pos);
 	Py_END_ALLOW_THREADS
+
 #endif /* !MS_WINDOWS */
 
 	if (ret != 0) {
+		Py_DECREF(posobj);
 		PyErr_SetFromErrno(PyExc_IOError);
 		return NULL;
 	}
 
 	return posobj;
 }
-#endif
+#endif /* HAVE_FTRUNCATE */
 
 static char *
 mode_string(fileio *self)
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index d4757ed..271a41e 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -102,8 +102,8 @@
 PyDoc_STRVAR(iobase_truncate_doc,
     "Truncate file to size bytes.\n"
     "\n"
-    "Size defaults to the current IO position as reported by tell().  Return\n"
-    "the new size.");
+    "File pointer is left unchanged.  Size defaults to the current IO\n"
+    "position as reported by tell().  Returns the new size.");
 
 static PyObject *
 iobase_truncate(PyObject *self, PyObject *args)
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index c19c4c0..13e3b58 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -350,7 +350,7 @@
     "Truncate size to pos.\n"
     "\n"
     "The pos argument defaults to the current file position, as\n"
-    "returned by tell().  Imply an absolute seek to pos.\n"
+    "returned by tell().  The current file position is unchanged.\n"
     "Returns the new absolute position.\n");
 
 static PyObject *
@@ -390,7 +390,6 @@
             return NULL;
         self->string_size = size;
     }
-    self->pos = size;
 
     return PyLong_FromSsize_t(size);
 }
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index ba28d59..89d922c 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -2318,15 +2318,7 @@
         return NULL;
     Py_DECREF(res);
 
-    if (pos != Py_None) {
-        res = PyObject_CallMethodObjArgs((PyObject *) self,
-                                          _PyIO_str_seek, pos, NULL);
-        if (res == NULL)
-            return NULL;
-        Py_DECREF(res);
-    }
-
-    return PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_truncate, NULL);
+    return PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_truncate, pos, NULL);
 }
 
 static PyObject *
