diff --git a/basic.go b/basic.go
index b81868e..0e02bf0 100644
--- a/basic.go
+++ b/basic.go
@@ -28,11 +28,12 @@ type emitter struct {
 	dropper func(reflect.Type)
 }
 
-func (e *emitter) Emit(evt interface{}) {
+func (e *emitter) Emit(evt interface{}) error {
 	if atomic.LoadInt32(&e.closed) != 0 {
-		panic("emitter is closed")
+		return fmt.Errorf("emitter is closed")
 	}
 	e.n.emit(evt)
+	return nil
 }
 
 func (e *emitter) Close() error {
diff --git a/basic_test.go b/basic_test.go
index b3a8dcd..c2aebe2 100644
--- a/basic_test.go
+++ b/basic_test.go
@@ -109,18 +109,13 @@ func TestEmitOnClosed(t *testing.T) {
 		t.Fatal(err)
 	}
 	em.Close()
-
-	defer func() {
-		r := recover()
-		if r == nil {
-			t.Errorf("expected panic")
-		}
-		if r.(string) != "emitter is closed" {
-			t.Error("unexpected message")
-		}
-	}()
-
-	em.Emit(EventA{})
+	err = em.Emit(EventA{})
+	if err == nil {
+		t.Errorf("expected panic")
+	}
+	if err.Error() != "emitter is closed" {
+		t.Error("unexpected message")
+	}
 }
 
 func TestClosingRaces(t *testing.T) {