diff --git a/lib/http/2/emitter.rb b/lib/http/2/emitter.rb
index <HASH>..<HASH> 100644
--- a/lib/http/2/emitter.rb
+++ b/lib/http/2/emitter.rb
@@ -20,8 +20,8 @@ module HTTP2
     # @param event [Symbol]
     # @param block [Proc] callback function
     def once(event, &block)
-      add_listener(event) do |*args|
-        block.call(*args)
+      add_listener(event) do |*args, &callback|
+        block.call(*args, &callback)
         :delete
       end
     end
diff --git a/spec/emitter_spec.rb b/spec/emitter_spec.rb
index <HASH>..<HASH> 100644
--- a/spec/emitter_spec.rb
+++ b/spec/emitter_spec.rb
@@ -31,6 +31,14 @@ describe HTTP2::Emitter do
     args.should eq 123
   end
 
+  it "should pass emitted callbacks to listeners" do
+    @w.on(:a)   { |&block| block.call }
+    @w.once(:a) { |&block| block.call }
+    @w.emit(:a) { @cnt += 1 }
+
+    @cnt.should eq 2
+  end
+
   it "should allow events with no callbacks" do
     expect { @w.emit(:missing) }.to_not raise_error
   end
Update 'once' listeners to accept a block argument

One-time listeners now accept an emitted callback to match the
behavior of persistent listeners.