see sections commented with MY ADDITION for added methods.