will refactor accordingly later