main logic and empty classes