now with improved equals