- some meta programming
- need to ease up paramter construction