 
 doNothing = -> return
 
-# Extra Option Handler
-class ExOptHandler
+class Logger
   Object.defineProperties @prototype,
+    _log:
+      value: doNothing
+      writable: true
     log:
       get: -> if @isEnabled() then @_log else doNothing
+
+# Extra Option Handler
+class ExOptHandler extends Logger
 
 # Extra options container (just need the name)
 class ExtraDebugOptions
 
 # Base Implementation
-class DebugBase
+class DebugBase extends Logger
   setEnabled: (b) ->
     enabled = b
     Debug.wrap {enabled: b}

        toString:
          value: -> "[#{tag}: #{if @isEnabled() then 'enabled' else 'disabled'}]"

  _log: doNothing
  Object.defineProperties @prototype,
    log:
      get: -> if @isEnabled() then @_log else doNothing
    extra:
      value: new ExtraDebugOptions
      enumerable: true

  initialized = false
  isInitialized: ->


# For the Browser Process
class DebugBrowser extends DebugBase
  constructor: ->
    @_log = console.log.bind console, '[DEBUG] %s'.cyan

  init: ->
    return Debug.wrap('Already initialized') if @isInitialized()
