working
self reference
in progress
fix unit test