Second commit with codes from previous project. So it's a bit messy transferring the features one by one.