Working version. 
Working on templated interface now...