Use filters instead of rewriting core functions
Need test