implement upgrade