diff --git a/Lib/stdwin/Split.py b/Lib/stdwin/Split.py
index 80e1e74..a5a6542 100755
--- a/Lib/stdwin/Split.py
+++ b/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:
