added singleton, facade and dispose pattern