diff --git a/Lib/pdb.py b/Lib/pdb.py
index 06f5cf8..f415e40 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -312,3 +312,15 @@
 	import linecache
 	linecache.checkcache()
 	run(TESTCMD)
+
+# print help
+def help():
+	for dirname in sys.path:
+		fullname = os.path.join(dirname, 'pdb.doc')
+		if os.path.exists(fullname):
+			sts = os.system('${PAGER-more} '+fullname)
+			if sts: print '*** Pager exit status:', sts
+			break
+	else:
+		print 'Sorry, can\'t find the help file "pdb.doc"',
+		print 'along the Python search path'
diff --git a/Lib/profile.py b/Lib/profile.py
index 000e79a..19b0476 100755
--- a/Lib/profile.py
+++ b/Lib/profile.py
@@ -377,3 +377,15 @@
 # test command
 def test():
 	run('import x; x.main()')
+
+# print help
+def help():
+	for dirname in sys.path:
+		fullname = os.path.join(dirname, 'profile.doc')
+		if os.path.exists(fullname):
+			sts = os.system('${PAGER-more} '+fullname)
+			if sts: print '*** Pager exit status:', sts
+			break
+	else:
+		print 'Sorry, can\'t find the help file "profile.doc"',
+		print 'along the Python search path'
diff --git a/Lib/string.py b/Lib/string.py
index ccc1043..764c396 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -116,8 +116,26 @@
 	except index_error:
 		return -1
 
+# Convert string to float
+atof_error = 'non-float argument to string.atof'
+def atof(str):
+	import regex
+	sign = ''
+	s = str
+	if s and s[0] in '+-':
+		sign = s[0]
+		s = s[1:]
+	if not s: raise atof_error, str
+	while s[0] == '0' and len(s) > 1 and s[1] in digits: s = s[1:]
+	if regex.match('[0-9]*\(\.[0-9]*\)?\([eE][-+]?[0-9]+\)?', s) != len(s):
+		raise atof_error, str
+	try:
+		return eval(sign + s)
+	except SyntaxError:
+		raise atof_error, str
+
 # Convert string to integer
-atoi_error = 'non-numeric argument to string.atoi'
+atoi_error = 'non-integer argument to string.atoi'
 def atoi(str):
 	sign = ''
 	s = str
@@ -130,6 +148,20 @@
 		if c not in digits: raise atoi_error, str
 	return eval(sign + s)
 
+# Convert string to long integer
+atol_error = 'non-integer argument to string.atol'
+def atol(str):
+	sign = ''
+	s = str
+	if s and s[0] in '+-':
+		sign = s[0]
+		s = s[1:]
+	if not s: raise atoi_error, str
+	while s[0] == '0' and len(s) > 1: s = s[1:]
+	for c in s:
+		if c not in digits: raise atoi_error, str
+	return eval(sign + s + 'L')
+
 # Left-justify a string
 def ljust(s, width):
 	n = width - len(s)
diff --git a/Lib/stringold.py b/Lib/stringold.py
index ccc1043..764c396 100644
--- a/Lib/stringold.py
+++ b/Lib/stringold.py
@@ -116,8 +116,26 @@
 	except index_error:
 		return -1
 
+# Convert string to float
+atof_error = 'non-float argument to string.atof'
+def atof(str):
+	import regex
+	sign = ''
+	s = str
+	if s and s[0] in '+-':
+		sign = s[0]
+		s = s[1:]
+	if not s: raise atof_error, str
+	while s[0] == '0' and len(s) > 1 and s[1] in digits: s = s[1:]
+	if regex.match('[0-9]*\(\.[0-9]*\)?\([eE][-+]?[0-9]+\)?', s) != len(s):
+		raise atof_error, str
+	try:
+		return eval(sign + s)
+	except SyntaxError:
+		raise atof_error, str
+
 # Convert string to integer
-atoi_error = 'non-numeric argument to string.atoi'
+atoi_error = 'non-integer argument to string.atoi'
 def atoi(str):
 	sign = ''
 	s = str
@@ -130,6 +148,20 @@
 		if c not in digits: raise atoi_error, str
 	return eval(sign + s)
 
+# Convert string to long integer
+atol_error = 'non-integer argument to string.atol'
+def atol(str):
+	sign = ''
+	s = str
+	if s and s[0] in '+-':
+		sign = s[0]
+		s = s[1:]
+	if not s: raise atoi_error, str
+	while s[0] == '0' and len(s) > 1: s = s[1:]
+	for c in s:
+		if c not in digits: raise atoi_error, str
+	return eval(sign + s + 'L')
+
 # Left-justify a string
 def ljust(s, width):
 	n = width - len(s)
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index ec0f841..0a43de3 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -152,6 +152,9 @@
 if a <> [2,1,0,-1,-2]: raise TestFailed, 'list reverse'
 a.sort()
 if a <> [-2,-1,0,1,2]: raise TestFailed, 'list sort'
+def revcmp(a, b): return cmp(b, a)
+a.sort(revcmp)
+if a <> [2,1,0,-1,-2]: raise TestFailed, 'list sort with cmp func'
 
 print '6.6 Mappings == Dictionaries'
 d = {}
