Change specific factory to abstract
More flexible AwareTrait
php 5.3 support