Allows more types for condition; refactors