 			locale = UnsafePointer<Int8>(Array<UInt8>(utf8Chars))
 		}
 		
-		let dateFormat = udat_open_wrapper(UDAT_PATTERN, UDAT_PATTERN, locale, timezone, timeZoneLength, Array<UInt16>(utf16Chars), Int32(utf16Chars.count), &status)
+		let dateFormat = udat_open(UDAT_PATTERN, UDAT_PATTERN, locale, timezone, timeZoneLength, Array<UInt16>(utf16Chars), Int32(utf16Chars.count), &status)
 		
 		guard U_SUCCESS(status) else {
 			try ThrowICUError(status)
 		}
 		
-		defer { udat_close_wrapper(dateFormat) }
+		defer { udat_close(dateFormat) }
 		
 		let buffer = UnsafeMutablePointer<UInt16>(allocatingCapacity: 1024)
 		defer { buffer.deallocateCapacity(1024) }
-		let formatResult = udat_format_wrapper(dateFormat, date, buffer, 1024, nil, &status)
+		let formatResult = udat_format(dateFormat, date, buffer, 1024, nil, &status)
 		
 		guard formatResult > 0 && U_SUCCESS(status) else {
 			try ThrowICUError(status)

			locale = UnsafePointer<Int8>(Array<UInt8>(utf8Chars))
		}
		
		let dateFormat = udat_open_wrapper(UDAT_PATTERN, UDAT_PATTERN, locale, timezone, timeZoneLength, Array<UInt16>(utf16Chars), Int32(utf16Chars.count), &status)
		
		guard U_SUCCESS(status) else {
			try ThrowICUError(status)
		}
		
		defer { udat_close_wrapper(dateFormat) }
		
		let srcUtf16Chars = dateStr.utf16
		let date = udat_parse_wrapper(dateFormat, Array<UInt16>(srcUtf16Chars), Int32(srcUtf16Chars.count), nil, &status)
		
		guard U_SUCCESS(status) else {
			try ThrowICUError(status)

	
	@noreturn
	static func ThrowICUError(code: UErrorCode) throws {
		let msg = String(validatingUTF8: u_errorName(code))!
		
		print("ICUError: \(code.rawValue) \(msg)")
		
		throw PerfectError.SystemError(Int32(code.rawValue), msg)
	}
	
	/// Parse a date string according to the indicated format string and return an ICU date.
