private synchronized boolean mustPerformBackup() {
		final Calendar backupDate = getLastBackupDate();
		
		final long lastBackupDate = (backupDate != null) ? backupDate.getTimeInMillis() : 0;
		
		final long now = Calendar.getInstance().getTimeInMillis();
		final BackupPeriod backupPeriod = getBackupPeriod();
		
		if (BackupPeriod.ALWAYS.equals(backupPeriod)) {
			return true;
		} else if (!BackupPeriod.DISABLED.equals((backupPeriod))) {
			final double millisecondsSinceBackup = now - lastBackupDate;
			if (millisecondsSinceBackup > 0) {
				final double months = millisecondsSinceBackup / (30 * 24 * 60 * 60 * 1000D);
				final double days;
				if ((int) months != 0) {
					days = (millisecondsSinceBackup % (int) months) / (24 * 60 * 60 * 1000);
				} else {
					days = millisecondsSinceBackup / (24 * 60 * 60 * 1000);
				}
				if (months > backupPeriod.getMonths() || 
						months == backupPeriod.getMonths() 
						&& days >= backupPeriod.getDays()) {
					return true;
				}
			}
		}
		return false;
	}