update with new features but need more testing