updated with newest stuff