Added Interface and implemented classes for step 4