Added implementation and testing.

Still requires additional documentation