code improved, add new feature supports