add guard and update project structure