Added very detailed comments