 
 	@define = (propertyName, descriptor) ->
 
+		# See if we need to add this property to the internal properties class
 		if @ isnt BaseClass and descriptor.exportable == true
 			# descriptor.enumerable = true
 			descriptor.propertyName = propertyName

			@[DefinedPropertiesKey] ?= {}
			@[DefinedPropertiesKey][propertyName] = descriptor

		if not descriptor.set
			descriptor.set = -> throw Error("#{@constructor.name}.#{propertyName} property is readonly")

		Object.defineProperty(@prototype, propertyName, descriptor)
		Object.__

	@simpleProperty = (name, fallback, exportable=true) ->
		exportable: exportable
		default: fallback
		get: ->  @_getPropertyValue name
		set: (value) -> @_setPropertyValue name, value

	_setPropertyValue: (k, v) =>
		@[DefinedPropertiesValuesKey][k] = v

DefinedPropertiesKey = "_DefinedPropertiesKey"
DefinedPropertiesValuesKey = "_DefinedPropertiesValuesKey"

capitalizeFirstLetter = (string) ->
	string.charAt(0).toUpperCase() + string.slice(1)

class exports.BaseClass extends EventEmitter

