Restructrure the code