projectile and some refactoring