this fireChanges method is now a complete clusterfuck of spaghetti, i should rewrite