this is more complicated than I can compreheend