some changes, still not stable