In order to not get results like the extent and width should be calculated values. That would change the example code to something like LoginModel class>>defaultSpec <spec: #default> ^SpecLayout composed newColumn: [ :col | col newRow: [ :row | row add: #usernameLabel width: self labelWidth; add: #usernameField ] height: self inputTextHeight; newRow: [ :row | row add: #passwordLabel width: self labelWidth; add: #passwordField ] height: self inputTextHeight ]; yourself LoginModel class>>labelWidth ^((StandardFonts defaultFont widthOfString: 'Password') max: (StandardFonts defaultFont widthOfString: 'Username'))+12 Please note that there are still several places in Spec where hardcoded values like 12 are used instead of semantic values. This value should actually be dependent on font size. Having the label texts twice in the code should also be avoided. LoginModel class>>textFieldWidth ^(StandardFonts defaultFont widthOfString: 'longest.email@addressThatShould.fit')+12 LoginModel>>initialExtent ^(3*12+self class labelWidth+ self class textFieldWidth) @ (5*self class buttonHeight) There are several calculated values missing: width = outside border + labelWidth + label field separator+fieldWidth+outside border height = dialog title + textInput height + separator + textInput height+ separator+button height + outside border Stephan