updated algorithm1