first version, still need imprvement on anealing