Working version still need to clean