This clearly can get very complicated....