diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
index a3d8951..4ba5619 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
@@ -87,6 +87,7 @@
     public final static String START_NEW_BUNDLES = "felix.fileinstall.bundles.new.start";
     public final static String NO_INITIAL_DELAY = "felix.fileinstall.noInitialDelay";
 
+    Dictionary properties;
     File watchedDirectory;
     File tmpDir;
     long poll;
@@ -112,6 +113,7 @@
     public DirectoryWatcher(Dictionary properties, BundleContext context)
     {
         super(properties.toString());
+        this.properties = properties;
         this.context = context;
         poll = getLong(properties, POLL, 2000);
         debug = getLong(properties, DEBUG, -1);
@@ -139,7 +141,13 @@
             flt = null;
         }
         scanner = new Scanner(watchedDirectory, flt);
+    }
 
+    public Dictionary getProperties() {
+        return properties;
+    }
+
+    public void start() {
         if (noInitialDelay)
         {
             log("Starting initial scan", null);
@@ -150,6 +158,7 @@
                 process(files);
             }
         }
+        super.start();
     }
 
     /**
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
index e5eb74b..26415b4 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
@@ -129,13 +129,10 @@
     public void stop(BundleContext context) throws Exception
     {
         List /*<DirectoryWatcher>*/ toClose = new ArrayList /*<DirectoryWatcher>*/();
-        if (watchers != null)
+        synchronized (watchers)
         {
-            synchronized (watchers)
-            {
-                toClose.addAll(watchers.values());
-                watchers.clear();
-            }
+            toClose.addAll(watchers.values());
+            watchers.clear();
         }
         for (Iterator w = toClose.iterator(); w.hasNext();)
         {
@@ -178,11 +175,25 @@
 
     public void updated(String pid, Dictionary properties)
     {
-        deleted(pid);
-        Util.performSubstitution(properties);    
-        
-        DirectoryWatcher watcher = new DirectoryWatcher(properties, context);
-        watchers.put(pid, watcher);
+        Util.performSubstitution(properties);
+        DirectoryWatcher watcher = null;
+        synchronized (watchers)
+        {
+            watcher = (DirectoryWatcher) watchers.get(pid);
+            if (watcher != null && watcher.getProperties().equals(properties))
+            {
+                return;
+            }
+        }
+        if (watcher != null)
+        {
+            watcher.close();
+        }
+        watcher = new DirectoryWatcher(properties, context);
+        synchronized (watchers)
+        {
+            watchers.put(pid, watcher);
+        }
         watcher.start();
     }
 
