Created for learning purpose.