diff --git a/Doc/texi2html.py b/Doc/texi2html.py
index fabd99e..10d955c 100644
--- a/Doc/texi2html.py
+++ b/Doc/texi2html.py
@@ -44,8 +44,11 @@
 	# Initialize an instance
 	def __init__(self):
 		self.unknown = {}	# statistics about unknown @-commands
+		self.filenames = {}	# Check for identical filenames
 		self.debugging = 0	# larger values produce more output
 		self.nodefp = None	# open file we're writing to
+		self.nodelineno = 0	# Linenumber relative to node
+		self.links = None	# Links from current node
 		self.savetext = None	# If not None, save text head instead
 		self.dirname = 'tmp'	# directory where files are created
 		self.includedir = '.'	# directory to search @include files
@@ -56,6 +59,8 @@
 		self.contents = []	# Reset table of contents
 		self.numbering = []	# Reset section numbering counters
 		self.nofill = 0		# Normal operation: fill paragraphs
+		self.goodset=['html']	# Names that should be parsed in ifset
+		self.stackinfo={}	# Keep track of state in the stack
 		# XXX The following should be reset per node?!
 		self.footnotes = []	# Reset list of footnotes
 		self.itemarg = None	# Reset command used by @item
@@ -90,6 +95,7 @@
 		accu = []
 		while not self.done:
 			line = fp.readline()
+			self.nodelineno = self.nodelineno + 1
 			if not line:
 				if accu:
 					if not self.skip: self.process(accu)
@@ -109,12 +115,14 @@
 							self.process(accu)
 						accu = []
 					self.command(line)
-			elif blprog.match(line) >= 0:
+			elif blprog.match(line) >= 0 and \
+			     'format' not in self.stack and \
+			     'example' not in self.stack:
 				if accu:
 					if not self.skip:
 						self.process(accu)
 						self.write('<P>\n')
-					accu = []
+						accu = []
 			else:
 				# Append the line including trailing \n!
 				accu.append(line)
@@ -153,6 +161,16 @@
 		if self.footnotes:
 			self.writefootnotes()
 		if self.nodefp:
+			if self.nodelineno > 20:
+				self.write ('<HR>\n')
+				[name, next, prev, up] = self.nodelinks[:4]
+				self.link('Next', next)
+				self.link('Prev', prev)
+				self.link('Up', up)
+				if self.nodename <> self.topname:
+					self.link('Top', self.topname)
+				self.write ('<HR>\n')
+			self.write('</BODY>\n')
 			self.nodefp.close()
 		self.nodefp = None
 		self.nodename = ''
@@ -339,14 +357,13 @@
 	def open_dots(self): self.write('...')
 	def close_dots(self): pass
 
-	def open_bullet(self): self.write('&bullet;')
+	def open_bullet(self): pass
 	def close_bullet(self): pass
 
 	def open_TeX(self): self.write('TeX')
 	def close_TeX(self): pass
 
-	def open_copyright(self): self.write('(C)')
-	def close_copyright(self): pass
+	def handle_copyright(self): self.write('(C)')
 
 	def open_minus(self): self.write('-')
 	def close_minus(self): pass
@@ -502,6 +519,9 @@
 	open_titlefont = open_
 	close_titlefont = close_
 
+	def open_small(self): pass
+	def close_small(self): pass
+	
 	def command(self, line):
 		a, b = cmprog.regs[1]
 		cmd = line[a:b]
@@ -573,6 +593,36 @@
 	def bgn_tex(self, args): self.skip = self.skip + 1
 	def end_tex(self): self.skip = self.skip - 1
 
+	def bgn_set(self, args):
+		if args not in self.goodset:
+			self.gooset.append(args)
+			
+	def bgn_clear(self, args):
+		if args in self.goodset:
+			self.gooset.remove(args)
+			
+	def bgn_ifset(self, args):
+		if args not in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+	def end_ifset(self):
+		print self.stack
+		print self.stackinfo
+		if self.stackinfo[len(self.stack) + 1]:
+			self.skip = self.skip - 1
+		del self.stackinfo[len(self.stack) + 1]
+
+	def bgn_ifclear(self, args):
+		if args in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+		
+	end_ifclear = end_ifset
+	
 	# --- Beginning a file ---
 
 	do_finalout = do_comment
@@ -582,6 +632,8 @@
 	def do_settitle(self, args):
 		self.title = args
 
+	def do_parskip(self, args): pass
+	
 	# --- Ending a file ---
 
 	def do_bye(self, args):
@@ -594,7 +646,9 @@
 
 	def do_center(self, args):
 		# Actually not used outside title page...
-		self.write('<H1>', args, '</H1>\n')
+		self.write('<H1>')
+		self.expand (args)
+		self.write ('</H1>\n')
 	do_title = do_center
 	do_subtitle = do_center
 	do_author = do_center
@@ -618,24 +672,36 @@
 	# --- Nodes ---
 
 	def do_node(self, args):
+		self.endnode()
+		self.nodelineno = 0
 		parts = string.splitfields(args, ',')
 		while len(parts) < 4: parts.append('')
 		for i in range(4): parts[i] = string.strip(parts[i])
+		self.nodelinks = parts
 		[name, next, prev, up] = parts[:4]
-		self.endnode()
 		file = self.dirname + '/' + makefile(name)
-		if self.debugging: print '--- writing', file
+		if self.filenames.has_key(file):
+			print '*** Filename already in use: ', file
+		else:
+			if self.debugging: print '--- writing', file
+		self.filenames[file] = 1
 		self.nodefp = open(file, 'w')
 		self.nodename = name
 		if not self.topname: self.topname = name
 		title = name
 		if self.title: title = title + ' -- ' + self.title
+		# No idea what this means, but this is what latex2html writes
+		self.write('<!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN">\n')
+		self.write('<!- Converted with texi2html and Python>\n')
+		self.write ('<P>\n<HEAD>\n')
 		self.write('<TITLE>', title, '</TITLE>\n')
+		self.write ('</HEAD>\n<BODY>\n<P>\n<BR> <HR>\n')
 		self.link('Next', next)
 		self.link('Prev', prev)
 		self.link('Up', up)
 		if self.nodename <> self.topname:
 			self.link('Top', self.topname)
+		self.write ('<BR> <HR> <P>\n')
 
 	def link(self, label, nodename):
 		if nodename:
@@ -749,6 +815,9 @@
 			n = 1
 		self.write('<P>\n'*max(n, 0))
 
+	def do_hline(self, args):
+		self.write ('<HR>')
+	
 	# --- Function and variable definitions ---
 
 	def bgn_deffn(self, args):
@@ -764,6 +833,16 @@
 	def end_deffn(self):
 		self.write('</DL>\n')
 
+	def do_deffnx(self, args):
+		self.write('<DT>')
+		words = splitwords(args, 2)
+		[category, name], rest = words[:2], words[2:]
+		self.expand('@b{' + name + '}')
+		for word in rest: self.expand(' ' + makevar(word))
+		self.expand(' -- ' + category)
+		self.write('<DD>\n')
+		self.index('fn', name)
+
 	def bgn_defun(self, args): self.bgn_deffn('Function ' + args)
 	end_defun = end_deffn
 
@@ -878,12 +957,17 @@
 	# --- Making Lists and Tables
 
 	def bgn_enumerate(self, args):
-		if not args: args = '1'
-		self.itemnumber = args
-		self.write('<UL>\n')
+		if not args:
+			self.write('<OL>\n')
+			self.stackinfo[len(self.stack)] = '</OL>\n'
+		else:
+			self.itemnumber = args
+			self.write('<UL>\n')
+			self.stackinfo[len(self.stack)] = '</UL>\n'
 	def end_enumerate(self):
 		self.itemnumber = None
-		self.write('</UL>\n')
+		self.write(self.stackinfo[len(self.stack) + 1])
+		del self.stackinfo[len(self.stack) + 1]
 
 	def bgn_itemize(self, args):
 		self.itemarg = args
@@ -936,9 +1020,9 @@
 
 	def bgn_example(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT><CODE>')
+		self.write('<PRE><CODE>')
 	def end_example(self):
-		self.write('</CODE></UL>\n')
+		self.write('</CODE></PRE>')
 		self.nofill = self.nofill - 1
 
 	bgn_lisp = bgn_example # Synonym when contents are executable lisp code
@@ -952,16 +1036,16 @@
 
 	def bgn_display(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_display(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_format(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE><CODE>\n')
 	def end_format(self):
-		self.write('</UL>\n')
+		self.write('</CODE></PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def do_exdent(self, args): self.expand(args + '\n')
@@ -969,9 +1053,9 @@
 
 	def bgn_flushleft(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_flushleft(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_flushright(self, args):
@@ -1088,8 +1172,7 @@
 
 # Put @var{} around alphabetic substrings
 def makevar(str):
-	# XXX This breaks if str contains @word{...}
-	return regsub.gsub('\([a-zA-Z_][a-zA-Z0-9_]*\)', '@var{\\1}', str)
+	return '@var{'+str+'}'
 
 
 # Split a string in "words" according to findwordend
@@ -1124,7 +1207,7 @@
 
 # Convert a node name into a file name
 def makefile(nodename):
-	return string.lower(fixfunnychars(nodename)) + '.html'
+	return fixfunnychars(nodename) + '.html'
 
 
 # Characters that are perfectly safe in filenames and hyperlinks
diff --git a/Doc/tools/texi2html.py b/Doc/tools/texi2html.py
index fabd99e..10d955c 100644
--- a/Doc/tools/texi2html.py
+++ b/Doc/tools/texi2html.py
@@ -44,8 +44,11 @@
 	# Initialize an instance
 	def __init__(self):
 		self.unknown = {}	# statistics about unknown @-commands
+		self.filenames = {}	# Check for identical filenames
 		self.debugging = 0	# larger values produce more output
 		self.nodefp = None	# open file we're writing to
+		self.nodelineno = 0	# Linenumber relative to node
+		self.links = None	# Links from current node
 		self.savetext = None	# If not None, save text head instead
 		self.dirname = 'tmp'	# directory where files are created
 		self.includedir = '.'	# directory to search @include files
@@ -56,6 +59,8 @@
 		self.contents = []	# Reset table of contents
 		self.numbering = []	# Reset section numbering counters
 		self.nofill = 0		# Normal operation: fill paragraphs
+		self.goodset=['html']	# Names that should be parsed in ifset
+		self.stackinfo={}	# Keep track of state in the stack
 		# XXX The following should be reset per node?!
 		self.footnotes = []	# Reset list of footnotes
 		self.itemarg = None	# Reset command used by @item
@@ -90,6 +95,7 @@
 		accu = []
 		while not self.done:
 			line = fp.readline()
+			self.nodelineno = self.nodelineno + 1
 			if not line:
 				if accu:
 					if not self.skip: self.process(accu)
@@ -109,12 +115,14 @@
 							self.process(accu)
 						accu = []
 					self.command(line)
-			elif blprog.match(line) >= 0:
+			elif blprog.match(line) >= 0 and \
+			     'format' not in self.stack and \
+			     'example' not in self.stack:
 				if accu:
 					if not self.skip:
 						self.process(accu)
 						self.write('<P>\n')
-					accu = []
+						accu = []
 			else:
 				# Append the line including trailing \n!
 				accu.append(line)
@@ -153,6 +161,16 @@
 		if self.footnotes:
 			self.writefootnotes()
 		if self.nodefp:
+			if self.nodelineno > 20:
+				self.write ('<HR>\n')
+				[name, next, prev, up] = self.nodelinks[:4]
+				self.link('Next', next)
+				self.link('Prev', prev)
+				self.link('Up', up)
+				if self.nodename <> self.topname:
+					self.link('Top', self.topname)
+				self.write ('<HR>\n')
+			self.write('</BODY>\n')
 			self.nodefp.close()
 		self.nodefp = None
 		self.nodename = ''
@@ -339,14 +357,13 @@
 	def open_dots(self): self.write('...')
 	def close_dots(self): pass
 
-	def open_bullet(self): self.write('&bullet;')
+	def open_bullet(self): pass
 	def close_bullet(self): pass
 
 	def open_TeX(self): self.write('TeX')
 	def close_TeX(self): pass
 
-	def open_copyright(self): self.write('(C)')
-	def close_copyright(self): pass
+	def handle_copyright(self): self.write('(C)')
 
 	def open_minus(self): self.write('-')
 	def close_minus(self): pass
@@ -502,6 +519,9 @@
 	open_titlefont = open_
 	close_titlefont = close_
 
+	def open_small(self): pass
+	def close_small(self): pass
+	
 	def command(self, line):
 		a, b = cmprog.regs[1]
 		cmd = line[a:b]
@@ -573,6 +593,36 @@
 	def bgn_tex(self, args): self.skip = self.skip + 1
 	def end_tex(self): self.skip = self.skip - 1
 
+	def bgn_set(self, args):
+		if args not in self.goodset:
+			self.gooset.append(args)
+			
+	def bgn_clear(self, args):
+		if args in self.goodset:
+			self.gooset.remove(args)
+			
+	def bgn_ifset(self, args):
+		if args not in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+	def end_ifset(self):
+		print self.stack
+		print self.stackinfo
+		if self.stackinfo[len(self.stack) + 1]:
+			self.skip = self.skip - 1
+		del self.stackinfo[len(self.stack) + 1]
+
+	def bgn_ifclear(self, args):
+		if args in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+		
+	end_ifclear = end_ifset
+	
 	# --- Beginning a file ---
 
 	do_finalout = do_comment
@@ -582,6 +632,8 @@
 	def do_settitle(self, args):
 		self.title = args
 
+	def do_parskip(self, args): pass
+	
 	# --- Ending a file ---
 
 	def do_bye(self, args):
@@ -594,7 +646,9 @@
 
 	def do_center(self, args):
 		# Actually not used outside title page...
-		self.write('<H1>', args, '</H1>\n')
+		self.write('<H1>')
+		self.expand (args)
+		self.write ('</H1>\n')
 	do_title = do_center
 	do_subtitle = do_center
 	do_author = do_center
@@ -618,24 +672,36 @@
 	# --- Nodes ---
 
 	def do_node(self, args):
+		self.endnode()
+		self.nodelineno = 0
 		parts = string.splitfields(args, ',')
 		while len(parts) < 4: parts.append('')
 		for i in range(4): parts[i] = string.strip(parts[i])
+		self.nodelinks = parts
 		[name, next, prev, up] = parts[:4]
-		self.endnode()
 		file = self.dirname + '/' + makefile(name)
-		if self.debugging: print '--- writing', file
+		if self.filenames.has_key(file):
+			print '*** Filename already in use: ', file
+		else:
+			if self.debugging: print '--- writing', file
+		self.filenames[file] = 1
 		self.nodefp = open(file, 'w')
 		self.nodename = name
 		if not self.topname: self.topname = name
 		title = name
 		if self.title: title = title + ' -- ' + self.title
+		# No idea what this means, but this is what latex2html writes
+		self.write('<!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN">\n')
+		self.write('<!- Converted with texi2html and Python>\n')
+		self.write ('<P>\n<HEAD>\n')
 		self.write('<TITLE>', title, '</TITLE>\n')
+		self.write ('</HEAD>\n<BODY>\n<P>\n<BR> <HR>\n')
 		self.link('Next', next)
 		self.link('Prev', prev)
 		self.link('Up', up)
 		if self.nodename <> self.topname:
 			self.link('Top', self.topname)
+		self.write ('<BR> <HR> <P>\n')
 
 	def link(self, label, nodename):
 		if nodename:
@@ -749,6 +815,9 @@
 			n = 1
 		self.write('<P>\n'*max(n, 0))
 
+	def do_hline(self, args):
+		self.write ('<HR>')
+	
 	# --- Function and variable definitions ---
 
 	def bgn_deffn(self, args):
@@ -764,6 +833,16 @@
 	def end_deffn(self):
 		self.write('</DL>\n')
 
+	def do_deffnx(self, args):
+		self.write('<DT>')
+		words = splitwords(args, 2)
+		[category, name], rest = words[:2], words[2:]
+		self.expand('@b{' + name + '}')
+		for word in rest: self.expand(' ' + makevar(word))
+		self.expand(' -- ' + category)
+		self.write('<DD>\n')
+		self.index('fn', name)
+
 	def bgn_defun(self, args): self.bgn_deffn('Function ' + args)
 	end_defun = end_deffn
 
@@ -878,12 +957,17 @@
 	# --- Making Lists and Tables
 
 	def bgn_enumerate(self, args):
-		if not args: args = '1'
-		self.itemnumber = args
-		self.write('<UL>\n')
+		if not args:
+			self.write('<OL>\n')
+			self.stackinfo[len(self.stack)] = '</OL>\n'
+		else:
+			self.itemnumber = args
+			self.write('<UL>\n')
+			self.stackinfo[len(self.stack)] = '</UL>\n'
 	def end_enumerate(self):
 		self.itemnumber = None
-		self.write('</UL>\n')
+		self.write(self.stackinfo[len(self.stack) + 1])
+		del self.stackinfo[len(self.stack) + 1]
 
 	def bgn_itemize(self, args):
 		self.itemarg = args
@@ -936,9 +1020,9 @@
 
 	def bgn_example(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT><CODE>')
+		self.write('<PRE><CODE>')
 	def end_example(self):
-		self.write('</CODE></UL>\n')
+		self.write('</CODE></PRE>')
 		self.nofill = self.nofill - 1
 
 	bgn_lisp = bgn_example # Synonym when contents are executable lisp code
@@ -952,16 +1036,16 @@
 
 	def bgn_display(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_display(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_format(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE><CODE>\n')
 	def end_format(self):
-		self.write('</UL>\n')
+		self.write('</CODE></PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def do_exdent(self, args): self.expand(args + '\n')
@@ -969,9 +1053,9 @@
 
 	def bgn_flushleft(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_flushleft(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_flushright(self, args):
@@ -1088,8 +1172,7 @@
 
 # Put @var{} around alphabetic substrings
 def makevar(str):
-	# XXX This breaks if str contains @word{...}
-	return regsub.gsub('\([a-zA-Z_][a-zA-Z0-9_]*\)', '@var{\\1}', str)
+	return '@var{'+str+'}'
 
 
 # Split a string in "words" according to findwordend
@@ -1124,7 +1207,7 @@
 
 # Convert a node name into a file name
 def makefile(nodename):
-	return string.lower(fixfunnychars(nodename)) + '.html'
+	return fixfunnychars(nodename) + '.html'
 
 
 # Characters that are perfectly safe in filenames and hyperlinks
diff --git a/Tools/scripts/texi2html.py b/Tools/scripts/texi2html.py
index fabd99e..10d955c 100755
--- a/Tools/scripts/texi2html.py
+++ b/Tools/scripts/texi2html.py
@@ -44,8 +44,11 @@
 	# Initialize an instance
 	def __init__(self):
 		self.unknown = {}	# statistics about unknown @-commands
+		self.filenames = {}	# Check for identical filenames
 		self.debugging = 0	# larger values produce more output
 		self.nodefp = None	# open file we're writing to
+		self.nodelineno = 0	# Linenumber relative to node
+		self.links = None	# Links from current node
 		self.savetext = None	# If not None, save text head instead
 		self.dirname = 'tmp'	# directory where files are created
 		self.includedir = '.'	# directory to search @include files
@@ -56,6 +59,8 @@
 		self.contents = []	# Reset table of contents
 		self.numbering = []	# Reset section numbering counters
 		self.nofill = 0		# Normal operation: fill paragraphs
+		self.goodset=['html']	# Names that should be parsed in ifset
+		self.stackinfo={}	# Keep track of state in the stack
 		# XXX The following should be reset per node?!
 		self.footnotes = []	# Reset list of footnotes
 		self.itemarg = None	# Reset command used by @item
@@ -90,6 +95,7 @@
 		accu = []
 		while not self.done:
 			line = fp.readline()
+			self.nodelineno = self.nodelineno + 1
 			if not line:
 				if accu:
 					if not self.skip: self.process(accu)
@@ -109,12 +115,14 @@
 							self.process(accu)
 						accu = []
 					self.command(line)
-			elif blprog.match(line) >= 0:
+			elif blprog.match(line) >= 0 and \
+			     'format' not in self.stack and \
+			     'example' not in self.stack:
 				if accu:
 					if not self.skip:
 						self.process(accu)
 						self.write('<P>\n')
-					accu = []
+						accu = []
 			else:
 				# Append the line including trailing \n!
 				accu.append(line)
@@ -153,6 +161,16 @@
 		if self.footnotes:
 			self.writefootnotes()
 		if self.nodefp:
+			if self.nodelineno > 20:
+				self.write ('<HR>\n')
+				[name, next, prev, up] = self.nodelinks[:4]
+				self.link('Next', next)
+				self.link('Prev', prev)
+				self.link('Up', up)
+				if self.nodename <> self.topname:
+					self.link('Top', self.topname)
+				self.write ('<HR>\n')
+			self.write('</BODY>\n')
 			self.nodefp.close()
 		self.nodefp = None
 		self.nodename = ''
@@ -339,14 +357,13 @@
 	def open_dots(self): self.write('...')
 	def close_dots(self): pass
 
-	def open_bullet(self): self.write('&bullet;')
+	def open_bullet(self): pass
 	def close_bullet(self): pass
 
 	def open_TeX(self): self.write('TeX')
 	def close_TeX(self): pass
 
-	def open_copyright(self): self.write('(C)')
-	def close_copyright(self): pass
+	def handle_copyright(self): self.write('(C)')
 
 	def open_minus(self): self.write('-')
 	def close_minus(self): pass
@@ -502,6 +519,9 @@
 	open_titlefont = open_
 	close_titlefont = close_
 
+	def open_small(self): pass
+	def close_small(self): pass
+	
 	def command(self, line):
 		a, b = cmprog.regs[1]
 		cmd = line[a:b]
@@ -573,6 +593,36 @@
 	def bgn_tex(self, args): self.skip = self.skip + 1
 	def end_tex(self): self.skip = self.skip - 1
 
+	def bgn_set(self, args):
+		if args not in self.goodset:
+			self.gooset.append(args)
+			
+	def bgn_clear(self, args):
+		if args in self.goodset:
+			self.gooset.remove(args)
+			
+	def bgn_ifset(self, args):
+		if args not in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+	def end_ifset(self):
+		print self.stack
+		print self.stackinfo
+		if self.stackinfo[len(self.stack) + 1]:
+			self.skip = self.skip - 1
+		del self.stackinfo[len(self.stack) + 1]
+
+	def bgn_ifclear(self, args):
+		if args in self.goodset:
+			self.skip = self.skip + 1
+			self.stackinfo[len(self.stack)] = 1
+		else:
+			self.stackinfo[len(self.stack)] = 0
+		
+	end_ifclear = end_ifset
+	
 	# --- Beginning a file ---
 
 	do_finalout = do_comment
@@ -582,6 +632,8 @@
 	def do_settitle(self, args):
 		self.title = args
 
+	def do_parskip(self, args): pass
+	
 	# --- Ending a file ---
 
 	def do_bye(self, args):
@@ -594,7 +646,9 @@
 
 	def do_center(self, args):
 		# Actually not used outside title page...
-		self.write('<H1>', args, '</H1>\n')
+		self.write('<H1>')
+		self.expand (args)
+		self.write ('</H1>\n')
 	do_title = do_center
 	do_subtitle = do_center
 	do_author = do_center
@@ -618,24 +672,36 @@
 	# --- Nodes ---
 
 	def do_node(self, args):
+		self.endnode()
+		self.nodelineno = 0
 		parts = string.splitfields(args, ',')
 		while len(parts) < 4: parts.append('')
 		for i in range(4): parts[i] = string.strip(parts[i])
+		self.nodelinks = parts
 		[name, next, prev, up] = parts[:4]
-		self.endnode()
 		file = self.dirname + '/' + makefile(name)
-		if self.debugging: print '--- writing', file
+		if self.filenames.has_key(file):
+			print '*** Filename already in use: ', file
+		else:
+			if self.debugging: print '--- writing', file
+		self.filenames[file] = 1
 		self.nodefp = open(file, 'w')
 		self.nodename = name
 		if not self.topname: self.topname = name
 		title = name
 		if self.title: title = title + ' -- ' + self.title
+		# No idea what this means, but this is what latex2html writes
+		self.write('<!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN">\n')
+		self.write('<!- Converted with texi2html and Python>\n')
+		self.write ('<P>\n<HEAD>\n')
 		self.write('<TITLE>', title, '</TITLE>\n')
+		self.write ('</HEAD>\n<BODY>\n<P>\n<BR> <HR>\n')
 		self.link('Next', next)
 		self.link('Prev', prev)
 		self.link('Up', up)
 		if self.nodename <> self.topname:
 			self.link('Top', self.topname)
+		self.write ('<BR> <HR> <P>\n')
 
 	def link(self, label, nodename):
 		if nodename:
@@ -749,6 +815,9 @@
 			n = 1
 		self.write('<P>\n'*max(n, 0))
 
+	def do_hline(self, args):
+		self.write ('<HR>')
+	
 	# --- Function and variable definitions ---
 
 	def bgn_deffn(self, args):
@@ -764,6 +833,16 @@
 	def end_deffn(self):
 		self.write('</DL>\n')
 
+	def do_deffnx(self, args):
+		self.write('<DT>')
+		words = splitwords(args, 2)
+		[category, name], rest = words[:2], words[2:]
+		self.expand('@b{' + name + '}')
+		for word in rest: self.expand(' ' + makevar(word))
+		self.expand(' -- ' + category)
+		self.write('<DD>\n')
+		self.index('fn', name)
+
 	def bgn_defun(self, args): self.bgn_deffn('Function ' + args)
 	end_defun = end_deffn
 
@@ -878,12 +957,17 @@
 	# --- Making Lists and Tables
 
 	def bgn_enumerate(self, args):
-		if not args: args = '1'
-		self.itemnumber = args
-		self.write('<UL>\n')
+		if not args:
+			self.write('<OL>\n')
+			self.stackinfo[len(self.stack)] = '</OL>\n'
+		else:
+			self.itemnumber = args
+			self.write('<UL>\n')
+			self.stackinfo[len(self.stack)] = '</UL>\n'
 	def end_enumerate(self):
 		self.itemnumber = None
-		self.write('</UL>\n')
+		self.write(self.stackinfo[len(self.stack) + 1])
+		del self.stackinfo[len(self.stack) + 1]
 
 	def bgn_itemize(self, args):
 		self.itemarg = args
@@ -936,9 +1020,9 @@
 
 	def bgn_example(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT><CODE>')
+		self.write('<PRE><CODE>')
 	def end_example(self):
-		self.write('</CODE></UL>\n')
+		self.write('</CODE></PRE>')
 		self.nofill = self.nofill - 1
 
 	bgn_lisp = bgn_example # Synonym when contents are executable lisp code
@@ -952,16 +1036,16 @@
 
 	def bgn_display(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_display(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_format(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE><CODE>\n')
 	def end_format(self):
-		self.write('</UL>\n')
+		self.write('</CODE></PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def do_exdent(self, args): self.expand(args + '\n')
@@ -969,9 +1053,9 @@
 
 	def bgn_flushleft(self, args):
 		self.nofill = self.nofill + 1
-		self.write('<UL COMPACT>\n')
+		self.write('<PRE>\n')
 	def end_flushleft(self):
-		self.write('</UL>\n')
+		self.write('</PRE>\n')
 		self.nofill = self.nofill - 1
 
 	def bgn_flushright(self, args):
@@ -1088,8 +1172,7 @@
 
 # Put @var{} around alphabetic substrings
 def makevar(str):
-	# XXX This breaks if str contains @word{...}
-	return regsub.gsub('\([a-zA-Z_][a-zA-Z0-9_]*\)', '@var{\\1}', str)
+	return '@var{'+str+'}'
 
 
 # Split a string in "words" according to findwordend
@@ -1124,7 +1207,7 @@
 
 # Convert a node name into a file name
 def makefile(nodename):
-	return string.lower(fixfunnychars(nodename)) + '.html'
+	return fixfunnychars(nodename) + '.html'
 
 
 # Characters that are perfectly safe in filenames and hyperlinks
