fix bugs add new functions...