implement scanner
Add UT