refactored towards common interface