The expression problem (aka the extensibility problem) refers to a fundamental dilemma of programming: Can your application be structured in such a way that both the data model and the set of virtual operations over it can be extended without the need to modify existing code, without the need for code repetition and without runtime type errors. Over the years, many solutions to this problem have been proposed, each having different characteristics of type safety and reusability. In this paper we present four new solutions to the problem, formulated