refactoring and thinking of improved expression support