public void run() {
        PropertiesDB propertiesDB   = PropertiesDB.getInstance();
        String      oldIPAddress    = propertiesDB.getMyOldIPAddress();
        AddressDB   addressList     = new AddressDB(kAddressList);
        String[]    entries         = addressList.getListOfAddressCache();
        String[]    addresses       = null;
        String      senderName      = propertiesDB.getUserName();
            
        while (entries.length > 0) {
            // Copy all addresses so that updated AddressList can be saved later
            if (addresses == null || 
            	addresses.length < entries.length)
                addresses = new String[entries.length];

            for (int i = 0; i < entries.length; i++)
                addresses[i] = addressList.lookUpAddressCache(entries[i]);

            // Now notify the address change.
            MiscProtocol    miscProtocol = MiscProtocol.getInstance();
            for (int i = 0; i < entries.length; i++) {
                if (miscProtocol.notifyNewAddress(senderName, entries[i], oldIPAddress) != null) {
                    // Successful
                    entries[i] = null;
				}
			}

            // Save the updated AddressList.
            addressList.clearAddressCache();
            for (int i = 0; i < entries.length; i++) {
                if (entries[i] != null)
                    addressList.addAddressCache(entries[i], addresses[i]);
			}
            addressList.save(kAddressList);

            // Now get the updated entries. If there are still remained entries, we should
            // wait for another ten minutes to repeat this process.
            entries = addressList.getListOfAddressCache();
            if (entries.length != 0) 
                TimerUtil.sleep(600 * 1000);
		}

        // Delete the addressList file.
        File    file = new File(FileUtil.makeFullPathname(kAddressList));
        
        file.delete();
	}