edited by zzd