-do (root = @) ->
-  
-  ownProp = Object.hasOwnProperty
+ownProp = Object.hasOwnProperty
 
+udefine 'mixer', ->
   mixinList = {}
-  
-  # DEBUG is set to false by default
-  DEBUG = false
-  
-  # Expose mixer list if debug
-  root.mixinList = mixinList if DEBUG
 
-  root.mixer = (target, name, params...) ->
+  mixer = (target, name, params...) ->
     mixObject = (target, obj) ->
       for key, value of obj when not ownProp.call target, key
         target[key] = value

      
    mixFunction = (target, func, params) -> func.apply target, params
    
    root.mixer(target, n, params) for n in name if Array.isArray name

    if typeof name is 'string' and ownProp.call mixinList, name
      if typeof mixinList[name] is 'function'


    null
    
  mixer.remove = (name) ->
    delete mixinList[name] if name? and mixinList[name]?

    null

  mixer.exists = (name) -> ownProp.call mixinList, name
  
  mixer