diff --git a/Lib/lib-stdwin/Split.py b/Lib/lib-stdwin/Split.py
index 80e1e74..a5a6542 100644
--- a/Lib/lib-stdwin/Split.py
+++ b/Lib/lib-stdwin/Split.py
@@ -1,11 +1,12 @@
 # Generic Split implementation.
 # Use as a base class for other splits.
 # Derived classes should at least implement the methods that call
-# unimpl() below: minsize(), getbounds() and setbounds().
+# unimpl() below: getminsize(), getbounds() and setbounds().
 
 Error = 'Split.Error'	# Exception
 
 import rect
+from stdwinevents import *
 
 class Split():
 	#
@@ -20,7 +21,8 @@
 		self.keybd_interest = []
 		self.timer_interest = []
 		self.altdraw_interest = []
-		self.mouse_focus = 0
+		self.mouse_focus = None
+		self.keybd_focus = None
 		return self
 	#
 	# Downcalls from parent to child
@@ -35,10 +37,14 @@
 		del self.timer_interest[:]
 		del self.altdraw_interest[:]
 		self.mouse_focus = None
+		self.keybd_focus = None
 	#
-	def minsize(self, m): return unimpl()	# Should ask children
-	def getbounds(self): return unimpl()
-	def setbounds(self, bounds): unimpl()	# Should tell children
+	def getminsize(self, (m, (width, height))):
+		return unimpl()			# Should ask children
+	def getbounds(self):
+		return unimpl()
+	def setbounds(self, bounds):
+		unimpl()			# Should tell children
 	#
 	def realize(self):
 		for child in self.children:
@@ -53,15 +59,41 @@
 		for child in self.altdraw_interest:
 			child.altdraw(detail)
 	#
+	# Keyboard focus handling (used internally)
+	# XXX This is not enough if two levels of splits
+	# XXX surround text fields!
+	#
+	def set_keybd_focus(self, child):
+		if self.keybd_focus <> child:
+			if self.keybd_focus:
+				self.keybd_focus.deactivate()
+				self.keybd_focus = None
+			if child:
+				child.activate()
+				self.keybd_focus = child
+	def next_keybd_focus(self):
+		if not self.keybd_interest:
+			self.set_keybd_focus(None)
+			return
+		if self.keybd_focus in self.keybd_interest:
+			i = self.keybd_interest.index(self.keybd_focus)
+			i = (i+1) % len(self.keybd_interest)
+		else:
+			i = 0
+		self.set_keybd_focus(self.keybd_interest[i])
+	#
 	# Downcalls only made after certain upcalls
 	#
 	def mouse_down(self, detail):
 		if self.mouse_focus:
 			self.mouse_focus.mouse_down(detail)
+			return
 		p = detail[0]
 		for child in self.mouse_interest:
 			if rect.pointinrect(p, child.getbounds()):
 				self.mouse_focus = child
+				if child in self.keybd_interest:
+					self.set_keybd_focus(child)
 				child.mouse_down(detail)
 	def mouse_move(self, detail):
 		if self.mouse_focus:
@@ -69,11 +101,26 @@
 	def mouse_up(self, detail):
 		if self.mouse_focus:
 			self.mouse_focus.mouse_up(detail)
-			self.mouse_focus = 0
+			self.mouse_focus = None
+	#
+	def activate(self):
+		if self.keybd_focus:
+			self.keybd_focus.activate()
+		else:
+			self.next_keybd_focus()
+	def deactivate(self):
+		if self.keybd_focus:
+			self.keybd_focus.deactivate()
 	#
 	def keybd(self, type_detail):
-		for child in self.keybd_interest:
-			child.keybd(type_detail)
+		if not self.keybd_focus:
+			self.set_keybd_focus(self.keybd_interest[0])
+		type, detail = type_detail
+		if type = WE_COMMAND and detail = WC_TAB and \
+					len(self.keybd_interest) > 1:
+			self.next_keybd_focus()
+			return
+		self.keybd_focus.keybd(type_detail)
 	#
 	def timer(self):
 		for child in self.timer_interest:
@@ -98,13 +145,17 @@
 		if child in self.altdraw_interest:
 			self.altdraw_interest.remove(child)
 		if child = self.mouse_focus:
-			self.mouse_focus = 0
+			self.mouse_focus = None
+		if child = self.keybd_focus:
+			self.keybd_focus = None
 	#
 	def need_mouse(self, child):
 		if child not in self.mouse_interest:
 			self.mouse_interest.append(child)
 			self.parent.need_mouse(self)
 	def no_mouse(self, child):
+		if child = self.mouse_focus:
+			self.mouse_focus = None
 		if child in self.mouse_interest:
 			self.mouse_interest.remove(child)
 			if not self.mouse_interest:
@@ -114,7 +165,11 @@
 		if child not in self.keybd_interest:
 			self.keybd_interest.append(child)
 			self.parent.need_keybd(self)
+		if not self.keybd_focus:
+			self.set_keybd_focus(child)
 	def no_keybd(self, child):
+		if child = self.keybd_focus:
+			self.keybd_focus = None # Don't call child.deactivate()
 		if child in self.keybd_interest:
 			self.keybd_interest.remove(child)
 			if not self.keybd_interest:
