OK .. I chose the route of not reloading the database on cancel, but rather making the FID* classes cleanup at the end of the synchronize method. Basically the changes were:

FIDLocalFile at the end creates an FIDRemoteFile with its tags (replacing itself) and unmarks dirty

FIDRemoteTune unmarks dirty

FIDPlaylist unmarks dirty

FIDDeleted removes itself from the database (and unmarks dirty, but this is not really necessary since its gone)

Mike