diff --git a/Lib/lib-stdwin/HVSplit.py b/Lib/lib-stdwin/HVSplit.py
index 36192a7..c35ce4c 100644
--- a/Lib/lib-stdwin/HVSplit.py
+++ b/Lib/lib-stdwin/HVSplit.py
@@ -10,16 +10,19 @@
 class HVSplit() = Split():
 	#
 	def create(self, (parent, hv)):
-		# hv is 0 or 1 for HSplit or VSplit
+		# hv is 0 for HSplit, 1 for VSplit
 		self = Split.create(self, parent)
 		self.hv = hv
 		return self
 	#
-	def minsize(self, m):
+	def getminsize(self, (m, sugg_size)):
 		hv, vh = self.hv, 1 - self.hv
 		size = [0, 0]
+		sugg_size = [sugg_size[0], sugg_size[1]]
+		sugg_size[hv] = 0
+		sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
 		for c in self.children:
-			csize = c.minsize(m)
+			csize = c.getminsize(m, sugg_size)
 			if csize[vh] > size[vh]: size[vh] = csize[vh]
 			size[hv] = size[hv] + csize[hv]
 		return size[0], size[1]
@@ -31,14 +34,17 @@
 		self.bounds = bounds
 		hv, vh = self.hv, 1 - self.hv
 		mf = self.parent.beginmeasuring
-		size = self.minsize(mf())
-		# XXX not yet used!  Later for stretching
-		maxsize_hv = bounds[1][hv] - bounds[0][hv]
-		origin = [self.bounds[0][0], self.bounds[0][1]]
+		begin, end = bounds
+		sugg_size = end[0] - begin[0], end[1] - begin[1]
+		size = self.getminsize(mf(), sugg_size)
+		origin = [begin[0], begin[1]]
+		sugg_size = [sugg_size[0], sugg_size[1]] # Make a list
+		sugg_size[hv] = 0
+		sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
 		for c in self.children:
-			size = c.minsize(mf())
+			size = c.getminsize(mf(), sugg_size)
 			corner = [0, 0]
-			corner[vh] = bounds[1][vh]
+			corner[vh] = end[vh]
 			corner[hv] = origin[hv] + size[hv]
 			c.setbounds((origin[0], origin[1]), \
 					(corner[0], corner[1]))
diff --git a/Lib/lib-stdwin/Sliders.py b/Lib/lib-stdwin/Sliders.py
index f655e77..a07c3c4 100644
--- a/Lib/lib-stdwin/Sliders.py
+++ b/Lib/lib-stdwin/Sliders.py
@@ -145,14 +145,13 @@
 	#
 	# Override HSplit methods
 	#
-	def minsize(self, m):
-		w1, h1 = self.downbutton.minsize(m)
-		w2, h2 = self.dragbutton.minsize(m)
-		w3, h3 = self.upbutton.minsize(m)
-		height = max(h1, h2, h3)
-		w1 = max(w1, height)
-		w3 = max(w3, height)
-		return w1+w2+w3, height
+	def getminsize(self, (m, (width, height))):
+		w1, h1 = self.downbutton.getminsize(m, (0, height))
+		w3, h3 = self.upbutton.getminsize(m, (0, height))
+		w1 = max(w1, h1)
+		w3 = max(w3, h3)
+		w2, h2 = self.dragbutton.getminsize(m, (width-w1-w3, height))
+		return w1+w2+w3, max(h1, h2, h3)
 	#
 	def setbounds(self, bounds):
 		(left, top), (right, bottom) = self.bounds = bounds
diff --git a/Lib/stdwin/HVSplit.py b/Lib/stdwin/HVSplit.py
index 36192a7..c35ce4c 100755
--- a/Lib/stdwin/HVSplit.py
+++ b/Lib/stdwin/HVSplit.py
@@ -10,16 +10,19 @@
 class HVSplit() = Split():
 	#
 	def create(self, (parent, hv)):
-		# hv is 0 or 1 for HSplit or VSplit
+		# hv is 0 for HSplit, 1 for VSplit
 		self = Split.create(self, parent)
 		self.hv = hv
 		return self
 	#
-	def minsize(self, m):
+	def getminsize(self, (m, sugg_size)):
 		hv, vh = self.hv, 1 - self.hv
 		size = [0, 0]
+		sugg_size = [sugg_size[0], sugg_size[1]]
+		sugg_size[hv] = 0
+		sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
 		for c in self.children:
-			csize = c.minsize(m)
+			csize = c.getminsize(m, sugg_size)
 			if csize[vh] > size[vh]: size[vh] = csize[vh]
 			size[hv] = size[hv] + csize[hv]
 		return size[0], size[1]
@@ -31,14 +34,17 @@
 		self.bounds = bounds
 		hv, vh = self.hv, 1 - self.hv
 		mf = self.parent.beginmeasuring
-		size = self.minsize(mf())
-		# XXX not yet used!  Later for stretching
-		maxsize_hv = bounds[1][hv] - bounds[0][hv]
-		origin = [self.bounds[0][0], self.bounds[0][1]]
+		begin, end = bounds
+		sugg_size = end[0] - begin[0], end[1] - begin[1]
+		size = self.getminsize(mf(), sugg_size)
+		origin = [begin[0], begin[1]]
+		sugg_size = [sugg_size[0], sugg_size[1]] # Make a list
+		sugg_size[hv] = 0
+		sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
 		for c in self.children:
-			size = c.minsize(mf())
+			size = c.getminsize(mf(), sugg_size)
 			corner = [0, 0]
-			corner[vh] = bounds[1][vh]
+			corner[vh] = end[vh]
 			corner[hv] = origin[hv] + size[hv]
 			c.setbounds((origin[0], origin[1]), \
 					(corner[0], corner[1]))
diff --git a/Lib/stdwin/Sliders.py b/Lib/stdwin/Sliders.py
index f655e77..a07c3c4 100755
--- a/Lib/stdwin/Sliders.py
+++ b/Lib/stdwin/Sliders.py
@@ -145,14 +145,13 @@
 	#
 	# Override HSplit methods
 	#
-	def minsize(self, m):
-		w1, h1 = self.downbutton.minsize(m)
-		w2, h2 = self.dragbutton.minsize(m)
-		w3, h3 = self.upbutton.minsize(m)
-		height = max(h1, h2, h3)
-		w1 = max(w1, height)
-		w3 = max(w3, height)
-		return w1+w2+w3, height
+	def getminsize(self, (m, (width, height))):
+		w1, h1 = self.downbutton.getminsize(m, (0, height))
+		w3, h3 = self.upbutton.getminsize(m, (0, height))
+		w1 = max(w1, h1)
+		w3 = max(w3, h3)
+		w2, h2 = self.dragbutton.getminsize(m, (width-w1-w3, height))
+		return w1+w2+w3, max(h1, h2, h3)
 	#
 	def setbounds(self, bounds):
 		(left, top), (right, bottom) = self.bounds = bounds
