Adding OOP
REINTEGRATE Refactoring_code_for_OOP into master