abstracting everything into plugin and making the admin part