I've solved it. It takes a different approach: instead of extending layoutChildren, you should register to all kinds of properties and then do a relayout. For example: I've registered to the ScrollPane's viewportBounds and react to the changing width and height. Also I'm now refactoring to not do a getChildren().clear on every relayout, but modify the sized. Looking good.