fix circular reference
working!
work+ cleanup