 
       styl manifest, globs
 
-      if opts.watchCss
-        console.log {globs}
+
+      if opts.watchCss and not watchedGlobs[globs.join()]
+        watchedGlobs[globs.join()] = yes
+        console.log "watching #{globs}"
         w = chokidar.watch globs, persistent: yes
         w.on 'ready', -> w.on 'raw', onRaw
 
 
+    bunldeAllStyles = ->
+      manifests.forEach (manifest) ->
+        return  unless Array.isArray manifest.styles
+        bundle manifest
+
     init = =>
-      fn = ->
-        manifests.forEach (manifest) ->
-          return  unless Array.isArray manifest.styles
-          bundle manifest
-      @on '_updated-sprites', -> fn()
-      copyKd -> fn()
+      @on '_updated-sprites', bunldeAllStyles
+      copyKd bunldeAllStyles
+
+      commonsWatcher = chokidar.watch includes, persistent: yes
+      commonRaw = (e, file) ->
+
+        return  unless file
+
+        if e in ['change','modified','deleted']
+          console.log "updating all styles because common styles has changed!"
+          bunldeAllStyles()
+
+      commonsWatcher.on 'ready', -> commonsWatcher.on 'raw', throttle commonRaw, THROTTLE_WAIT
 
 
     if opts.sprites
       spriteSheets = path.join opts.spriteTmpCssOutdir, '*', \
         SPRITESMITH_CSS_NAME_PREFIX + '*x.' + SPRITESMITH_CSS_EXTENSION
       includes.push spriteSheets
-      @once '_updated-sprites', ->
-        init()
+      @once '_updated-sprites', init
     else
       init()
+
 
 
   _thirdparty: (done) ->


        glob  = path.join manifest.basedir, glob
        globs.push glob
        # globs.push "!#{commons}"

      onRaw = (e, file) ->


    timeEnd = @_timeEnd.bind this
    notify  = @_notify.bind this

    manifests    = opts.manifests
    watchingKd   = no
    watchedGlobs = {}

    commons  = path.join opts.basedir, STYLES_COMMONS_GLOB
    includes = [ commons ]
