updating, almost all features done...