make Data a final class instead of protocol