finally a real recursive OMG