complete and working. can be perfected