             return superentityLocalPrimaryKey
         }
         
-        /// TODO: Decide if this should provide a default or fail
-        //fatalError("No local primary key was set. You must add `localPrimaryKey` to this `NSEntityDescription`s `userInfo` dictionary.")
         return RemoteMapping.Key.DefaultLocalPrimaryKey.rawValue
     }
-    
+}
+
+/// MARK: - Propery Helpers
+/// MARK: Remote Properties
+extension NSEntityDescription {
     /// The properties represented on the remote.
     public var remoteProperties: [NSPropertyDescription] {
         return properties.filter { !$0.remoteShouldIgnore }

                properties[key] = propertyDescription
                
                return properties
        }
    }
    
    public var relationships: [NSRelationshipDescription] {
        return properties.flatMap { $0 as? NSRelationshipDescription }
    }

        return remoteProperties.flatMap { $0 as? NSAttributeDescription }
    }
    
    /// An index of remote attribute names and the corresponding attribute
    /// description.
    public func remoteAttributesByName(_ useLocalNames: Bool = false) -> [String: NSAttributeDescription] {
        return remoteAttributes
            .reduce([String: NSAttributeDescription]()) { remoteAttributesByName, attributeDescription in
