latest design update: needed to be more simple design pattern