cleaned up effects framework