moved some implicit definitions to companion objects to speed up search