Instead of using Type for everything, use primary and source fields