make a big changes to the code, but it is not finished.