       
       plugin
 
+  _.bindAll hlf, 'createPlugin'
+
+  # Mixin Support
+  # -------------
+
+  _.extend hlf,
+
+    applyMixin: (context, dependencies, mixin) ->
+      if _.isString(mixin) then mixin = @mixins[mixin] 
+      return unless mixin?
+      if _.isFunction(mixin) then mixin = mixin dependencies
+      onceMethods = []
+      handlerNames = []
+      for own name, prop of mixin when _.isFunction(prop)
+        if name in @mixinOnceNames then onceMethods.push prop
+        if name.indexOf('handle') is 0 and name isnt 'handleCommand'
+          handlerNames.push name
+      mixinToApply = _.omit mixin, @mixinOnceNames
+      _.extend context, mixinToApply
+      method.call(context) for method in onceMethods
+      if handlerNames.length then _.bindAll context, handlerNames...
+
+    applyMixins: (context, dependencies, mixins...) ->
+      @applyMixin context, dependencies, mixin for mixin in mixins
+
+    createMixin: (mixins, name, mixin) ->
+      mixins ?= hlf.mixins
+      return no if name of mixins
+      mixins[name] = mixin
+      if $.isPlainObject(mixin)
+        (prop.mixin = name) for own k, prop of mixin when _.isFunction(prop)
+      mixin
+
     mixinOnceNames: [
       'decorate'
       'decorateOptions'


  _.templateSettings = interpolate: /\{\{(.+?)\}\}/g

  hlf = {}

  _noConflicts = []

  _createPluginInstance = ($el, options, $context, namespace, apiClass, apiMixins, mixinFilter, createOptions) ->
    data = $el.data namespace.toString('data')

          for own name, selector of @selectors
            @["$#{name}"] = @$el.find selector

  # Export
  # ------

  safeSet = (key, toContext=$, fromContext=hlf) ->
    _oldValue = toContext[key]
