Implement Custom actions

There's actually lot of redundant code here. Should we better use Traits? I tried to avoid them to keep the code more readable.