diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index 951a1d6..c9d8966 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -30,6 +30,10 @@
 		return self.tk.getvar(name)
 	def getint(self, s):
 		return self.tk.getint(s)
+	def getdouble(self, s):
+		return self.tk.getdouble(s)
+	def getboolean(self, s):
+		return self.tk.getboolean(s)
 	def focus(self):
 		self.tk.call('focus', self._w)
 	def focus_default(self):
@@ -183,19 +187,16 @@
 	def update_idletasks(self):
 		self.tk.call('update', 'idletasks')
 	def bind(self, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', self._w, sequence, 
 			     (add + name,) + _subst_prefix)
 	def bind_all(self, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', 'all' , sequence, 
 			     (add + `name`,) + _subst_prefix)
 	def bind_class(self, className, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', className , sequence, 
@@ -216,8 +217,7 @@
 	def _getboolean(self, string):
 		if string:
 			return self.tk.getboolean(string)
-		else:
-			return string
+		# else return None
 	def _options(self, cnf):
 		res = ()
 		for k, v in cnf.items():
@@ -242,8 +242,6 @@
 		 '%A', '%E', '%K', '%N', '%T', '%X', '%Y')
 
 def _substitute(*args):
-	global default_root
-	global _subst_prefix
 	tk = default_root.tk
 	if len(args) != len(_subst_prefix): return args
 	nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, T, X, Y = args
@@ -503,8 +501,11 @@
 # Indices:
 def AtEnd():
 	return 'end'
-def AtInsert():
-	return 'insert'
+def AtInsert(*args):
+	s = 'insert'
+	for a in args:
+		if a: s = s + (' ' + a)
+	return s
 def AtSelFirst():
 	return 'sel.first'
 def AtSelLast():
@@ -523,7 +524,6 @@
 	def bbox(self, *args):
 		return self._getints(self._do('bbox', args))
 	def bind(self, tagOrId, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add='+'
 		name = self._register(func, _substitute)
 		self.tk.call(self._w, 'bind', tagOrId, sequence, 
@@ -844,7 +844,6 @@
 		self.tk.call(
 			self._w, 'tag', 'add', tagName, index1, index2)
 	def tag_bind(self, tagName, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add='+'
 		name = self._register(func, _substitute)
 		self.tk.call(self._w, 'tag', 'bind', 
diff --git a/Lib/tkinter/Tkinter.py b/Lib/tkinter/Tkinter.py
index 951a1d6..c9d8966 100755
--- a/Lib/tkinter/Tkinter.py
+++ b/Lib/tkinter/Tkinter.py
@@ -30,6 +30,10 @@
 		return self.tk.getvar(name)
 	def getint(self, s):
 		return self.tk.getint(s)
+	def getdouble(self, s):
+		return self.tk.getdouble(s)
+	def getboolean(self, s):
+		return self.tk.getboolean(s)
 	def focus(self):
 		self.tk.call('focus', self._w)
 	def focus_default(self):
@@ -183,19 +187,16 @@
 	def update_idletasks(self):
 		self.tk.call('update', 'idletasks')
 	def bind(self, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', self._w, sequence, 
 			     (add + name,) + _subst_prefix)
 	def bind_all(self, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', 'all' , sequence, 
 			     (add + `name`,) + _subst_prefix)
 	def bind_class(self, className, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add = '+'
 		name = self._register(func, _substitute)
 		self.tk.call('bind', className , sequence, 
@@ -216,8 +217,7 @@
 	def _getboolean(self, string):
 		if string:
 			return self.tk.getboolean(string)
-		else:
-			return string
+		# else return None
 	def _options(self, cnf):
 		res = ()
 		for k, v in cnf.items():
@@ -242,8 +242,6 @@
 		 '%A', '%E', '%K', '%N', '%T', '%X', '%Y')
 
 def _substitute(*args):
-	global default_root
-	global _subst_prefix
 	tk = default_root.tk
 	if len(args) != len(_subst_prefix): return args
 	nsign, b, f, h, k, s, t, w, x, y, A, E, K, N, T, X, Y = args
@@ -503,8 +501,11 @@
 # Indices:
 def AtEnd():
 	return 'end'
-def AtInsert():
-	return 'insert'
+def AtInsert(*args):
+	s = 'insert'
+	for a in args:
+		if a: s = s + (' ' + a)
+	return s
 def AtSelFirst():
 	return 'sel.first'
 def AtSelLast():
@@ -523,7 +524,6 @@
 	def bbox(self, *args):
 		return self._getints(self._do('bbox', args))
 	def bind(self, tagOrId, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add='+'
 		name = self._register(func, _substitute)
 		self.tk.call(self._w, 'bind', tagOrId, sequence, 
@@ -844,7 +844,6 @@
 		self.tk.call(
 			self._w, 'tag', 'add', tagName, index1, index2)
 	def tag_bind(self, tagName, sequence, func, add=''):
-		global _substitute, _subst_prefix
 		if add: add='+'
 		name = self._register(func, _substitute)
 		self.tk.call(self._w, 'tag', 'bind', 
