Added some implementation. Still a work in progress.