We should revisit the necessity to use casts. Perhaps internal interfaces that are only visible to 3rd level API are needed