sync with needbmw fork