diff --git a/Doc/partparse.py b/Doc/partparse.py
index 742c56f..a7718d7 100644
--- a/Doc/partparse.py
+++ b/Doc/partparse.py
@@ -1063,6 +1063,9 @@
     elif len(idxsi) == 3 and idxsi[:2] == ['in', 'module']:
 	command = 'deffn'
 	cat_class = 'function of ' + string.join(idxsi[1:])
+    elif len(idxsi) > 3 and idxsi[:2] == ['in', 'modules']:
+	command = 'deffn'
+	cat_class = 'function of ' + string.join(idxsi[1:])
 
     if not command:
 	raise error, 'don\'t know what to do with indexsubitem ' + `idxsi`
@@ -1110,9 +1113,11 @@
 	command = 'defcv'
 	cat_class = 'exception'
 	class_class = string.join(idxsi[2:])
-
-
-    if not command:
+    elif idxsi == ['built-in', 'exception', 'base', 'class']:
+	command = 'defcv'
+	cat_class = 'exception'
+	class_class = "exception base class"
+    else:
 	raise error, 'don\'t know what to do with indexsubitem ' + `idxsi`
 
     ch.chtype = chunk_type[CSLINE]
@@ -1177,6 +1182,31 @@
     return length, i
 
 
+def do_opcodedesc(length, buf, pp, i):
+    startpoint = i-1
+    ch = pp[startpoint]
+    wh = ch.where
+    length, newi = getnextarg(length, buf, pp, i)
+    dataname = chunk(GROUP, wh, pp[i:newi])
+    del pp[i:newi]
+    length = length - (newi-i)
+
+    ch.chtype = chunk_type[CSLINE]
+    ch.data = "defcv"
+
+    cslinearg = [chunk(GROUP, wh, [chunk(PLAIN, wh, "data")]),
+		 chunk(PLAIN, wh, ' '),
+		 chunk(GROUP, wh, [chunk(PLAIN, wh, "byte code instruction")]),
+		 chunk(PLAIN, wh, ' '),
+		 dataname,
+		 ]
+
+    pp.insert(i, chunk(GROUP, wh, cslinearg))
+    i, length = i+1, length+1
+    hist.command = ch.data
+    return length, i
+
+
 # regular indices: those that are not set in tt font by default....
 regindices = ('cindex', )
 
@@ -1378,6 +1408,22 @@
 		i, length = i+1, length+1
 		length, i = do_datadesc(length, buf, pp, i)
 
+	    elif envname == 'opcodedesc':
+		pp.insert(i, chunk(PLAIN, ch.where, ''))
+		i, length = i+1, length+1
+		length, i = do_opcodedesc(length, buf, pp, i)
+
+	    elif envname == 'seealso':
+		chunks = [chunk(ENDLINE, ch.where, "\n"),
+			  chunk(CSNAME, ch.where, "b"),
+			  chunk(GROUP, ch.where, [
+			      chunk(PLAIN, ch.where, "See also: ")]),
+			  chunk(ENDLINE, ch.where, "\n"),
+			  chunk(ENDLINE, ch.where, "\n")]
+		pp[i-1:i] = chunks
+		length = length + len(chunks) - 1
+		i = i + len(chunks) - 1
+
 	    else:
 		print 'WARNING: don\'t know what to do with env ' + `envname`
 
@@ -1430,8 +1476,12 @@
 			  chunk(GROUP, ch.where, [
 			  chunk(PLAIN, ch.where, hist.command)])]
 		i, length = i+2, length+2
+
+	    elif envname in ('seealso', 'opcodedesc'):
+		pass
+
 	    else:
-		print 'WARNING: ending env ' + `envname` + 'has no actions'
+		print 'WARNING: ending env %s has no actions' % `envname`
 
 	elif ch.chtype == chunk_type[CSNAME]:
 	    # control name transformations
@@ -1753,7 +1803,7 @@
 		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
 		length, i = length+1, i+1
 
-	    elif s_buf_data == 'bimodindex':
+	    elif s_buf_data in ('bimodindex', 'refbimodindex'):
 		ch.chtype = chunk_type[CSLINE]
 		ch.data = 'pindex'
 		length, newi = getnextarg(length, buf, pp, i)
@@ -1770,10 +1820,27 @@
 		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
 		length, i = length+1, i+1
 
+	    elif s_buf_data == 'refmodindex':
+		ch.chtype = chunk_type[CSLINE]
+		ch.data = 'pindex'
+		length, newi = getnextarg(length, buf, pp, i)
+		ingroupch = pp[i:newi]
+		del pp[i:newi]
+		length = length - (newi-i)
+
+## 		ingroupch.append(chunk(PLAIN, ch.where, ' '))
+## 		ingroupch.append(chunk(CSNAME, ch.where, 'r'))
+## 		ingroupch.append(chunk(GROUP, ch.where, [
+## 			  chunk(PLAIN, ch.where,
+## 			  '(built-in)')]))
+
+		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
+		length, i = length+1, i+1
+
 	    elif s_buf_data == 'sectcode':
 		ch.data = 'code'
 
-	    elif s_buf_data == 'stmodindex':
+	    elif s_buf_data in ('stmodindex', 'refstmodindex'):
 		ch.chtype = chunk_type[CSLINE]
 		# use the program index as module index
 		ch.data = 'pindex'
@@ -1791,8 +1858,27 @@
 		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
 		length, i = length+1, i+1
 
-	    elif s_buf_data == 'stindex':
+	    elif s_buf_data in ('stmodindex', 'refstmodindex'):
+		ch.chtype = chunk_type[CSLINE]
+		# use the program index as module index
+		ch.data = 'pindex'
+		length, newi = getnextarg(length, buf, pp, i)
+		ingroupch = pp[i:newi]
+		del pp[i:newi]
+		length = length - (newi-i)
+
+		ingroupch.append(chunk(PLAIN, ch.where, ' '))
+		ingroupch.append(chunk(CSNAME, ch.where, 'r'))
+		ingroupch.append(chunk(GROUP, ch.where, [
+			  chunk(PLAIN, ch.where,
+			  '(standard)')]))
+
+		pp.insert(i, chunk(GROUP, ch.where, ingroupch))
+		length, i = length+1, i+1
+
+	    elif s_buf_data in ('stindex', 'kwindex'):
 		# XXX must actually go to newindex st
+		what = (s_buf_data[:2] == "st") and "statement" or "keyword"
 		wh = ch.where
 		ch.chtype = chunk_type[CSLINE]
 		ch.data = 'cindex'
@@ -1804,7 +1890,7 @@
 		length = length - (newi-i)
 
 		t = ingroupch[:]
-		t.append(chunk(PLAIN, wh, ' statement'))
+		t.append(chunk(PLAIN, wh, ' ' + what))
 
 		pp.insert(i, chunk(GROUP, wh, t))
 		i, length = i+1, length+1
@@ -1813,7 +1899,7 @@
 		i, length = i+1, length+1
 
 		t = ingroupch[:]
-		t.insert(0, chunk(PLAIN, wh, 'statement, '))
+		t.insert(0, chunk(PLAIN, wh, what + ', '))
 
 		pp.insert(i, chunk(GROUP, wh, t))
 		i, length = i+1, length+1
@@ -1947,9 +2033,29 @@
 ## 		ch.data = flattext(buf, [ch])
 ## 		ch.chtype = chunk_type[PLAIN]
 
+	    elif s_buf_data == 'seemodule':
+		ch.data = "code"
+		data = pp[i+1].data
+		data.insert(0, chunk(PLAIN, ch.where, " ("))
+		data.append(chunk(PLAIN, ch.where, ")"))
+		pp[i+1:i+2] = data
+		length = length + len(data) - 1
+
+	    elif s_buf_data == 'seetext':
+		data = pp[i].data
+		data.insert(0, chunk(ENDLINE, ch.where, "\n"))
+		pp[i-1:i+1] = data
+		i = i - 1
+		length = length + len(data) - 2
+
 	    elif s_buf_data in ('noindent', 'indexsubitem'):
 		pass
 
+	    elif s_buf_data == 'label':
+		del pp[i-1:i+1]
+		length = length - 2
+		i = i - 1
+
 	    else:
 		print "don't know what to do with keyword " + s_buf_data
 
