public void run() {

			FileRootEnumeration list = (FileRootEnumeration)FileSystemRegistry.listRoots();

			while(list.hasMoreElements()){
				String element = (String)list.nextElement();
				roots.put(element, element);
			}
			
			while (FileSystemRegistry.fslistener != null) {
				list = (FileRootEnumeration)FileSystemRegistry.listRoots();

				// new root has beed added
				if (list.size() > roots.size()) {
					while (list.hasMoreElements()) {
						String element = (String)list.nextElement();
						if (roots.get(element) == null) {
							roots.put(element, element);

							fslistener.rootChanged(FileSystemListener.ROOT_ADDED, element);
							break;
						}
					}

				}
				// root has been removed
				else if (list.size() < roots.size()) {
					while (list.hasMoreElements()) {
						roots.remove(list.nextElement());
					}
					String removedRoot = (String) roots.elements().nextElement();
					fslistener.rootChanged(FileSystemListener.ROOT_REMOVED, removedRoot);
					
					roots = new Hashtable();
					
					list = (FileRootEnumeration)FileSystemRegistry.listRoots();					
					
					while(list.hasMoreElements()) {
						String element = (String)list.nextElement();
						roots.put(element, element);
					}
				}
				
				try {
					sleep(2500);
				}
				catch (InterruptedException e) {
				}
			}
		}