refactored, removed self