generalising shell methods