         return self
     }
 
+
+    // ---- String Enums
+
+    public func listenTo<Publisher, EventType where Publisher: EventManagerHost, EventType: RawRepresentable, EventType.RawValue == String>(publisher: Publisher, _ name: EventType, callback: () -> ()) -> Self{
+        eventManager.listenTo(publisher.eventManager, name: name.rawValue, callback: callback)
+        return self
+    }
+
+    public func listenTo<Publisher, EventType where Publisher: EventManagerHost, EventType: RawRepresentable, EventType.RawValue == String>(publisher: Publisher, _ name: EventType, callback: (Publisher) -> ()) -> Self{
+        eventManager.listenTo(publisher.eventManager, name: name.rawValue, callback: callback)
+        return self
+    }
+
+    public func listenTo<Publisher, Data, EventType where Publisher: EventManagerHost,EventType: RawRepresentable, EventType.RawValue == String>(publisher: Publisher, _ name: EventType, callback: (Publisher, Data) -> ()) -> Self{
+        eventManager.listenTo(publisher.eventManager, name: name.rawValue, callback: callback)
+        return self
+    }
 
     // ----
 

        eventManager.trigger(event)
    }

    public func stopListening(name: String) -> Self{
        eventManager.stopListening(self.eventManager, name: name)
        return self

        eventManager.stopListening()
        return self
    }

    // --- String Enums

    public func stopListening<EventType: RawRepresentable where EventType.RawValue == String>(name: EventType) -> Self{
        eventManager.stopListening(self.eventManager, name: name.rawValue)
        return self
    }

    public func stopListening<Publisher, EventType where Publisher: EventManagerHost, EventType: RawRepresentable, EventType.RawValue == String>(publisher: Publisher, _ name: EventType) -> Self{
        eventManager.stopListening(publisher.eventManager, name: name.rawValue)
        return self
    }
}