Learning from CleanBC implementation (Part 1)

Learning from CleanBC implementation (Part 1)