ISubject interface added, code duplication removed