runnable with minor buts
fix set NULL bug