       @$type.validate(aValue, checkValidity) if checkValidity isnt false
       @_assign aValue
     return @
+  create: (aValue, aOptions)->
+    @$type.createValue aValue, aOptions
+  clone: @::create
   toString: ->String(@value)
   valueOf: ->@value
   toObject: (aOptions)->

    aOptions = @mergeOptions(aOptions)
    aOptions.name = @name unless aOptions.name
    @createType aOptions
  # Get aType class from the encoded string.
  fromString: (aString, aOptions)->
    aString = @encoding.decode aString, aOptions if @encoding

  isValid: (aValue) ->
    @validate(aValue, false)
  createValue: (aValue, aOptions)->
    if aOptions
      aOptions = @mergeOptions(aOptions)
      vType = createObject @Class, aOptions
    else
      vType = @
    Value aValue, vType
  create: @::createValue
  createType: (aOptions)->
    delete aOptions.value if aOptions
    createObject @Class, aOptions
