decorator class changed to abstract and added more explanation comments.