refactored with returning self, added ham dist test, code cleanup