diff --git a/Doc/lib/libitertools.tex b/Doc/lib/libitertools.tex
index f291fe3..e146c6c 100644
--- a/Doc/lib/libitertools.tex
+++ b/Doc/lib/libitertools.tex
@@ -358,10 +358,6 @@
 ...     "Returns True if pred(x) is False for every element in the iterable"
 ...     return not nth(ifilter(pred, seq), 0)
 
->>> def pairwise(seq):
-...     "s -> (s0,s1), (s1,s2), (s2, s3), ..."
-...     return izip(seq, islice(seq,1,None))
-
 >>> def padnone(seq):
 ...     "Returns the sequence elements and then returns None indefinitely"
 ...     return chain(seq, repeat(None))
@@ -373,4 +369,15 @@
 >>> def dotproduct(vec1, vec2):
 ...     return sum(imap(operator.mul, vec1, vec2))
 
+>>> def window(seq, n=2):
+...     "Returns a sliding window (of width n) over data from the iterable"
+...     "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
+...     it = iter(seq)
+...     result = tuple(islice(it, n))
+...     if len(result) == n:
+...         yield result    
+...     for elem in it:
+...         result = result[1:] + (elem,)
+...         yield result
+
 \end{verbatim}
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index a4ad845..846a690 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -427,10 +427,6 @@
 ...     "Returns True if pred(x) is False for every element in the iterable"
 ...     return not nth(ifilter(pred, seq), 0)
 
->>> def pairwise(seq):
-...     "s -> (s0,s1), (s1,s2), (s2, s3), ..."
-...     return izip(seq, islice(seq,1,len(seq)))
-
 >>> def padnone(seq):
 ...     "Returns the sequence elements and then returns None indefinitely"
 ...     return chain(seq, repeat(None))
@@ -442,6 +438,16 @@
 >>> def dotproduct(vec1, vec2):
 ...     return sum(imap(operator.mul, vec1, vec2))
 
+>>> def window(seq, n=2):
+...     "Returns a sliding window (of width n) over data from the iterable"
+...     "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
+...     it = iter(seq)
+...     result = tuple(islice(it, n))
+...     if len(result) == n:
+...         yield result
+...     for elem in it:
+...         result = result[1:] + (elem,)
+...         yield result
 
 This is not part of the examples but it tests to make sure the definitions
 perform as purported.
@@ -473,9 +479,12 @@
 >>> no(lambda x: x%2==0, [1, 2, 5, 9])
 False
 
->>> list(pairwise('abc'))
+>>> list(window('abc'))
 [('a', 'b'), ('b', 'c')]
 
+>>> list(window('abc',5))
+[]
+
 >>> list(islice(padnone('abc'), 0, 6))
 ['a', 'b', 'c', None, None, None]
 
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 0a20c1b..fae4511 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -882,7 +882,7 @@
      None.  
 
   4) If a need does arise, it can be met by __builtins__.map() or by 
-     writing a generator.
+     writing:  chain(iterable, repeat(None)).
 
   5) Similar toolsets in Haskell and SML do not have automatic None fill-in.
 */
@@ -1574,8 +1574,18 @@
 static int
 izip_traverse(izipobject *lz, visitproc visit, void *arg)
 {
-	if (lz->ittuple)
-		return visit(lz->ittuple, arg);
+	int err;
+
+	if (lz->ittuple) {
+		err = visit(lz->ittuple, arg);
+		if (err)
+			return err;
+	}
+	if (lz->result) {
+		err = visit(lz->result, arg);
+		if (err)
+			return err;
+	}
 	return 0;
 }
 
