some progress on swap*idemp