Self-documented, modified some type names to clear up ambiguities