Use the Symfony request stack
Fixed potential problem with APC-enabled PHP versions

See https://bugs.php.net/bug.php?id=61384
Use interface instead of real classes
Call parent constructor, added missing summary bag
Reduce duplicate code