improved algorithm