Removing unlock from CDBirthdayCalendar::updateBirthday should work just fine if the check condition is changed to !notebook().isNull(). But local readonly change does not work since SqliteStorage::saveIncidences() checks isValidNotebook() and does not save invalid notebooks incidences. So updateNotebook() is needed at unlockCalendar. There is small possibility that during sync that causes birthday updated's user can see/edit/add events to birthday calendar, but window of opportunity is really small time wise.