If it's not very straigh forward to know why update is called in unfloat but not in float - maybe figure this our and comment in the code? Other than this (and couple small comments aboe) all LGTM.