main stream algorithm