this method is complicated enough to have a short description