seem to be finished, yet to be tested
worked! though a little bit slowly...