updated to return concrete types.