decouple implementation from core libs