diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift
index c0a81cc..9a70f86 100644
--- a/Foundation/NSArray.swift
+++ b/Foundation/NSArray.swift
@@ -312,6 +312,13 @@
                 if val1 != val2 {
                     return false
                 }
+            } else if let val1 = object(at: idx) as? _ObjectBridgeable,
+                let val2 = otherArray[idx] as? _ObjectBridgeable {
+                if !(val1._bridgeToAnyObject() as! NSObject).isEqual(val2._bridgeToAnyObject()) {
+                    return false
+                }
+            } else {
+                return false
             }
         }
         
diff --git a/Foundation/NSDecimal.swift b/Foundation/NSDecimal.swift
index 3f10b3f..88785f2 100644
--- a/Foundation/NSDecimal.swift
+++ b/Foundation/NSDecimal.swift
@@ -24,7 +24,7 @@
             return Int32(__exponent)
         }
         set {
-            __exponent = Int8(truncatingBitPattern: newValue)
+            __exponent = Int8(extendingOrTruncating: newValue)
         }
     }
     // length == 0 && isNegative -> NaN
@@ -90,7 +90,7 @@
 
     public init(_exponent: Int32, _length: UInt32, _isNegative: UInt32, _isCompact: UInt32, _reserved: UInt32, _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16)){
         self._mantissa = _mantissa
-        self.__exponent = Int8(truncatingBitPattern: _exponent)
+        self.__exponent = Int8(extendingOrTruncating: _exponent)
         self.__lengthAndFlags = UInt8(_length & 0b1111)
         self.__reserved = 0
         self._isNegative = _isNegative
@@ -425,21 +425,21 @@
             while mantissa != 0 && i < NSDecimalMaxSize {
                 switch i {
                 case 0:
-                    _mantissa.0 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.0 = UInt16(extendingOrTruncating:mantissa)
                 case 1:
-                    _mantissa.1 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.1 = UInt16(extendingOrTruncating:mantissa)
                 case 2:
-                    _mantissa.2 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.2 = UInt16(extendingOrTruncating:mantissa)
                 case 3:
-                    _mantissa.3 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.3 = UInt16(extendingOrTruncating:mantissa)
                 case 4:
-                    _mantissa.4 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.4 = UInt16(extendingOrTruncating:mantissa)
                 case 5:
-                    _mantissa.5 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.5 = UInt16(extendingOrTruncating:mantissa)
                 case 6:
-                    _mantissa.6 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.6 = UInt16(extendingOrTruncating:mantissa)
                 case 7:
-                    _mantissa.7 = UInt16(truncatingBitPattern:mantissa)
+                    _mantissa.7 = UInt16(extendingOrTruncating:mantissa)
                 default:
                     fatalError("initialization overflow")
                 }
@@ -605,13 +605,13 @@
     for i in 0..<d._length {
         let accumulator: UInt32 = UInt32(d[i]) * UInt32(mul) + carry
         carry = accumulator >> 16
-        d[i] = UInt16(truncatingBitPattern: accumulator)
+        d[i] = UInt16(extendingOrTruncating: accumulator)
     }
     if carry != 0 {
         if d._length >= Decimal.maxSize {
             return .overflow
         }
-        d[d._length] = UInt16(truncatingBitPattern: carry)
+        d[d._length] = UInt16(extendingOrTruncating: carry)
         d._length += 1
     }
     return .noError
@@ -622,13 +622,13 @@
     for i in 0..<d._length {
         let accumulator: UInt32 = UInt32(d[i]) + carry
         carry = accumulator >> 16
-        d[i] = UInt16(truncatingBitPattern: accumulator)
+        d[i] = UInt16(extendingOrTruncating: accumulator)
     }
     if carry != 0 {
         if d._length >= Decimal.maxSize {
             return .overflow
         }
-        d[d._length] = UInt16(truncatingBitPattern: carry)
+        d[d._length] = UInt16(extendingOrTruncating: carry)
         d._length += 1
     }
     return .noError
@@ -776,8 +776,8 @@
             if i + j < big._length {
                 let bigij = UInt32(big[i+j])
                 accumulator = UInt32(carry) + bigij + UInt32(right[j]) * UInt32(left[i])
-                carry = UInt16(truncatingBitPattern:accumulator >> UInt32(16))
-                big[i+j] = UInt16(truncatingBitPattern:accumulator)
+                carry = UInt16(extendingOrTruncating:accumulator >> 16)
+                big[i+j] = UInt16(extendingOrTruncating:accumulator)
             } else if carry != 0 || (right[j] == 0 && left[j] == 0) {
                 return .overflow
             }
@@ -917,7 +917,7 @@
             acc = acc & 0xffff;
             acc = 0xffff + UInt32(u[ul - vl + i - UInt32(j) - UInt32(1)]) - acc + sk; // subtract
             sk = acc >> 16;
-            u[ul - vl + i - UInt32(j) - UInt32(1)] = UInt16(truncatingBitPattern:acc)
+            u[ul - vl + i - UInt32(j) - UInt32(1)] = UInt16(extendingOrTruncating:acc)
         }
 
         // D5: test remainder
@@ -933,7 +933,7 @@
                 let vl = v._length
                 acc = UInt32(v[i]) + UInt32(u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)]) + k
                 k = acc >> 16;
-                u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)] = UInt16(truncatingBitPattern:acc)
+                u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)] = UInt16(extendingOrTruncating:acc)
             }
             // k must be == 1 here
         }
@@ -1186,8 +1186,8 @@
         let li = UInt32(left[i])
         let ri = UInt32(right[i])
         accumulator = li + ri + UInt32(carry)
-        carry = UInt16(truncatingBitPattern:accumulator >> 16)
-        result[i] = UInt16(truncatingBitPattern:accumulator)
+        carry = UInt16(extendingOrTruncating:accumulator >> 16)
+        result[i] = UInt16(extendingOrTruncating:accumulator)
         i += 1
     }
 
@@ -1195,8 +1195,8 @@
         if carry != 0 {
             let li = UInt32(left[i])
             accumulator = li + UInt32(carry)
-            carry = UInt16(truncatingBitPattern:accumulator >> 16)
-            result[i] = UInt16(truncatingBitPattern:accumulator)
+            carry = UInt16(extendingOrTruncating:accumulator >> 16)
+            result[i] = UInt16(extendingOrTruncating:accumulator)
             i += 1
         } else {
             while i < left._length {
@@ -1210,8 +1210,8 @@
         if carry != 0 {
             let ri = UInt32(right[i])
             accumulator = ri + UInt32(carry)
-            carry = UInt16(truncatingBitPattern:accumulator >> 16)
-            result[i] = UInt16(truncatingBitPattern:accumulator)
+            carry = UInt16(extendingOrTruncating:accumulator >> 16)
+            result[i] = UInt16(extendingOrTruncating:accumulator)
             i += 1
         } else {
             while i < right._length {
@@ -1253,8 +1253,8 @@
         let li = UInt32(left[i])
         let ri = UInt32(right[i])
         accumulator = 0xffff + li - ri + UInt32(carry)
-        carry = UInt16(truncatingBitPattern:accumulator >> 16)
-        result[i] = UInt16(truncatingBitPattern:accumulator)
+        carry = UInt16(extendingOrTruncating:accumulator >> 16)
+        result[i] = UInt16(extendingOrTruncating:accumulator)
         i += 1
     }
 
@@ -1262,8 +1262,8 @@
         if carry != 0 {
             let li = UInt32(left[i])
             accumulator = 0xffff + li // + no carry
-            carry = UInt16(truncatingBitPattern:accumulator >> 16)
-            result[i] = UInt16(truncatingBitPattern:accumulator)
+            carry = UInt16(extendingOrTruncating:accumulator >> 16)
+            result[i] = UInt16(extendingOrTruncating:accumulator)
             i += 1
         } else {
             while i < left._length {
@@ -1276,8 +1276,8 @@
     while i < right._length {
         let ri = UInt32(right[i])
         accumulator = 0xffff - ri + UInt32(carry)
-        carry = UInt16(truncatingBitPattern:accumulator >> 16)
-        result[i] = UInt16(truncatingBitPattern:accumulator)
+        carry = UInt16(extendingOrTruncating:accumulator >> 16)
+        result[i] = UInt16(extendingOrTruncating:accumulator)
         i += 1
     }
 
diff --git a/Foundation/NSError.swift b/Foundation/NSError.swift
index bee29e3..e9448fc 100644
--- a/Foundation/NSError.swift
+++ b/Foundation/NSError.swift
@@ -393,7 +393,7 @@
             return nil
         }
         
-        self.init(rawValue: RawValue(IntMax(_bridgedNSError.code)))
+        self.init(rawValue: RawValue(Int(_bridgedNSError.code)))
     }
     
     public var hashValue: Int { return _code }
@@ -421,7 +421,7 @@
             return nil
         }
         
-        self.init(rawValue: RawValue(UIntMax(UInt(_bridgedNSError.code))))
+        self.init(rawValue: RawValue(UInt(_bridgedNSError.code)))
     }
     
     public var hashValue: Int { return _code }
diff --git a/TestFoundation/TestNSArray.swift b/TestFoundation/TestNSArray.swift
index 50a6a96..8442ecd 100644
--- a/TestFoundation/TestNSArray.swift
+++ b/TestFoundation/TestNSArray.swift
@@ -421,6 +421,12 @@
 
         XCTAssertFalse(array1.isEqual(nil))
         XCTAssertFalse(array1.isEqual(NSObject()))
+
+        let objectsArray1 = NSArray(array: [NSArray(array: [0])])
+        let objectsArray2 = NSArray(array: [NSArray(array: [1])])
+        XCTAssertFalse(objectsArray1 == objectsArray2)
+        XCTAssertFalse(objectsArray1.isEqual(objectsArray2))
+        XCTAssertFalse(objectsArray1.isEqual(to: Array(objectsArray2)))
     }
 
     /// - Note: value type conversion will destroy identity. So use index(of:) instead of indexOfObjectIdentical(to:)
diff --git a/TestFoundation/TestNSDictionary.swift b/TestFoundation/TestNSDictionary.swift
index ff415ef..096f0a6 100644
--- a/TestFoundation/TestNSDictionary.swift
+++ b/TestFoundation/TestNSDictionary.swift
@@ -134,6 +134,24 @@
 
         XCTAssertFalse(dict1.isEqual(nil))
         XCTAssertFalse(dict1.isEqual(NSObject()))
+
+        let nestedDict1 = NSDictionary(dictionary: [
+            "key.entities": [
+                ["key": 0]
+            ]
+        ])
+        let nestedDict2 = NSDictionary(dictionary: [
+            "key.entities": [
+                ["key": 1]
+            ]
+        ])
+        XCTAssertFalse(nestedDict1 == nestedDict2)
+        XCTAssertFalse(nestedDict1.isEqual(nestedDict2))
+        XCTAssertFalse(nestedDict1.isEqual(to: [
+            "key.entities": [
+                ["key": 1]
+            ]
+        ]))
     }
 
     func test_copying() {
diff --git a/build.py b/build.py
index f1a3ef4..669199a 100644
--- a/build.py
+++ b/build.py
@@ -9,7 +9,7 @@
 
 script = Script()
 
-foundation = DynamicLibrary("Foundation")
+foundation = StaticAndDynamicLibrary("Foundation")
 
 foundation.GCC_PREFIX_HEADER = 'CoreFoundation/Base.subproj/CoreFoundation_Prefix.h'
 
@@ -513,6 +513,8 @@
 rule InstallFoundation
     command = mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $
     cp "${BUILD_DIR}/Foundation/${DYLIB_PREFIX}Foundation${DYLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $
+    mkdir -p "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $
+    cp "${BUILD_DIR}/Foundation/${STATICLIB_PREFIX}Foundation${STATICLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $
     mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}"; $
     cp "${BUILD_DIR}/Foundation/Foundation.swiftmodule" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $
     cp "${BUILD_DIR}/Foundation/Foundation.swiftdoc" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $
diff --git a/configure b/configure
index 32a3f2f..4e0f128 100755
--- a/configure
+++ b/configure
@@ -28,6 +28,7 @@
 from lib.product import DynamicLibrary
 from lib.product import Framework
 from lib.product import StaticLibrary
+from lib.product import StaticAndDynamicLibrary
 from lib.product import Application
 from lib.product import Executable
 
diff --git a/lib/product.py b/lib/product.py
index ad9af82..925cd78 100644
--- a/lib/product.py
+++ b/lib/product.py
@@ -112,10 +112,11 @@
 class DynamicLibrary(Library):
     def __init__(self, name):
         Library.__init__(self, name)
-        self.rule = "Link"
-        self.product_name = Configuration.current.target.dynamic_library_prefix + name + Configuration.current.target.dynamic_library_suffix
+        self.name = name
 
     def generate(self):
+        self.rule = "Link"
+        self.product_name = Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix
         if Configuration.current.target.sdk == OSType.Linux or Configuration.current.target.sdk == OSType.FreeBSD:
             self.conformance_begin = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_begin.o' 
             self.conformance_end = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_end.o' 
@@ -172,16 +173,23 @@
 
         return generated
 
-
 class StaticLibrary(Library):
     def __init__(self, name):
         Library.__init__(self, name)
-        self.rule = "Archive"
-        self.product_name = Configuration.current.target.static_library_prefix + name + Configuration.current.target.static_library_suffix
-    
+        self.name = name
+
     def generate(self):
+        self.rule = "Archive"
+        self.product_name = Configuration.current.target.static_library_prefix + self.name + Configuration.current.target.static_library_suffix
         return Library.generate(self, [])
-        
+
+class StaticAndDynamicLibrary(StaticLibrary, DynamicLibrary):
+    def __init__(self, name):
+        StaticLibrary.__init__(self, name)
+        DynamicLibrary.__init__(self, name)
+
+    def generate(self):
+        return StaticLibrary.generate(self) + DynamicLibrary.generate(self)
 
 class Executable(Product):
     def __init__(self, name):
@@ -190,9 +198,8 @@
 
     def generate(self):
         generated = Product.generate(self)
-        
-        return generated
 
+        return generated
 
 class Application(Product):
     executable = None
diff --git a/lib/script.py b/lib/script.py
index 4f6a39f..150eb95 100644
--- a/lib/script.py
+++ b/lib/script.py
@@ -63,6 +63,8 @@
 ARCH                  = """ + Configuration.current.target.swift_arch + """
 DYLIB_PREFIX          = """ + Configuration.current.target.dynamic_library_prefix + """
 DYLIB_SUFFIX          = """ + Configuration.current.target.dynamic_library_suffix + """
+STATICLIB_PREFIX      = """ + Configuration.current.target.static_library_prefix + """
+STATICLIB_SUFFIX      = """ + Configuration.current.target.static_library_suffix + """
 PREFIX                = """ + Configuration.current.prefix + """
 """
         if Configuration.current.requires_pkg_config:
@@ -206,7 +208,7 @@
     description = Link: $out
 
 rule Archive
-    command = mkdir -p `dirname $out`; ${AR} ${AR_FLAGS} $flags $out $in
+    command = mkdir -p `dirname $out`; ${AR} ${AR_FLAGS} $out $in
     description = Archive: $out
 """
         
