some changes (still invalid pointer freed!)