added programming principles used