diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb
index <HASH>..<HASH> 100644
--- a/activesupport/lib/active_support/callbacks.rb
+++ b/activesupport/lib/active_support/callbacks.rb
@@ -117,8 +117,8 @@ module ActiveSupport
               (skipped ||= []) << current
               next
             else
-              expanded = current.expand_call_template(env, invoke_sequence)
-              expanded.shift.send(*expanded, &expanded.shift)
+              target, block, method, *arguments = current.expand_call_template(env, invoke_sequence)
+              target.send(method, *arguments, &block)
             end
             current.invoke_after(env)
             skipped.pop.invoke_after(env) while skipped && skipped.first
Additional fix for argument-splat ordering differences.

See #<I>