 	@define "props",
 		excludeFromProps: true
 		get: ->
-			value = {}
-			for k, v of @constructor[DefinedPropertiesKey]
-				value[k] = @[k]
-
-			value
+			_.pick(@, _.keys(@_propertyList()))
 
 		set: (value) ->
-			for k, v of value
-				if @constructor[DefinedPropertiesKey].hasOwnProperty(k)
-					if @constructor[DefinedPropertiesKey].exportable isnt false
-						@[k] = v
+			propertyList = @_propertyList()
+			for k,v of value
+				if propertyList.hasOwnProperty(k)
+					@[k] = v
 
 	@define "id",
 		get: -> @_id


		# See if we need to add this property to the internal properties class
		if @ isnt BaseClass
			descriptor.enumerable = descriptor.enumerable || !descriptor.hasOwnProperty('enumerable')
			descriptor.propertyName = propertyName

			if not descriptor.excludeFromProps

			@_getPropertyDefaultValue k

	_getPropertyDefaultValue: (k) ->
		@_propertyList()[k]["default"]

	_propertyList: ->
		@constructor[DefinedPropertiesKey]
