This probably should be done one and cached. See the way callbacks work.