Refactored to prevent runaway implicit