 extension UInt16 : Arbitrary {
 	typealias A = UInt16
 	public static func arbitrary() -> Gen<UInt16> {
-		return sized({ n in Gen<UInt16>.pure(UInt16(truncatingBitPattern: arc4random()) % UInt16(truncatingBitPattern: abs(n))) })
+		return sized { n in Gen<UInt16>.pure(UInt16(arc4random_uniform(UInt32(abs(n))))) }
 	}
 
 	public static func shrink(x : UInt16) -> [UInt16] {

extension UInt : Arbitrary {
	typealias A = UInt
	public static func arbitrary() -> Gen<UInt> {
		return sized({ n in Gen<UInt>.pure(UInt(arc4random()) % UInt(abs(n))) })
	}

	public static func shrink(x : UInt) -> [UInt] {

extension Int : Arbitrary {
	typealias A = Int
	public static func arbitrary() -> Gen<Int> {
		let sign = ((arc4random() % 2) == 1)
		return sized { n in Gen.pure((sign ? 1 : -1) * Int(arc4random_uniform(UInt32(n)))) }
	}

	public static func shrink(x : Int) -> [Int] {
