having to perform different logic based on the adapter kind of defeats the purpose of an abstraction library IMO. Ins't there a better way ?