 extension UInt64 : SDAtomicProtocol {
     
     /// Atomic fetch the current value with barrier.
-    public mutating func fetch() -> UInt64 {
-        return _AtomicLoadU64Barrier(&self)
+    public mutating func fetchSelf() -> (self: UInt64, value: UInt64) {
+        let val = _AtomicLoadU64Barrier(&self)
+        return (val, val)
     }
     
     /// Atomic sets the value with barrier.

extension UInt16 : SDAtomicProtocol {
    
    /// Atomic fetch the current value with barrier.
    public mutating func fetch() -> UInt16 {
        return _AtomicLoadU16Barrier(&self)
    }
    
    /// Atomic sets the value with barrier.

extension Bool : SDAtomicProtocol {
    
    /// Atomic fetch the current value with barrier.
    public mutating func fetchSelf() -> (self: Bool, value: Bool) {
        let val = _AtomicLoadBoolBarrier(&self)
        return (val, val)
    }
    
    /// Atomic sets the value with barrier.
