implementing restore