Added algorithm abstraction
Added basic driver