updated code, add necessary modules