moving Find functionality out and splitting into 3 types