added interface class and derivates