Wider function support and more expression support
Abstracted things a bit