Please remove the portable abstraction and implement the provider-specific calls first.  Subsequent commits can include the portable abstraction.