try to split code into more files, but failed(caused by inner class issue)