Add decorator and factory pattern stuff