 		self.rawValue = rawValue
 	}
 	
-	fileprivate static var collisions	= [PhysicsBodyCategory : Set<PhysicsBodyCategory>]()
-	fileprivate static var contacts		= [PhysicsBodyCategory : Set<PhysicsBodyCategory>]()
+	 internal static var collisions	= [PhysicsBodyCategory : Set<PhysicsBodyCategory>]()
+	 internal static var contacts		= [PhysicsBodyCategory : Set<PhysicsBodyCategory>]()
 	
 }
 
+// MARK: - Built In Categories
+public extension PhysicsBodyCategory {
+	
+	public static let none			= PhysicsBodyCategory(rawValue: UInt32.allZeros)
+	public static let all 			= PhysicsBodyCategory(rawValue: ~UInt32.allZeros)
+	
+	public static let `static` 		= PhysicsBodyCategory(rawValue: 1 << 31)
+	public static let enviroment	= PhysicsBodyCategory(rawValue: 1 << 30)
+	public static let effect 		= PhysicsBodyCategory(rawValue: 1 << 29)
+	
+}
+
+// MARK: - Setting Collisions and Contacts
 public extension PhysicsBodyCategory {
 	
 	public static func enableCollision(between a: PhysicsBodyCategory, and b: PhysicsBodyCategory) {

		}
	}
	
	private var seperatedFlags : Set<PhysicsBodyCategory> {
		var flags = Set<PhysicsBodyCategory>()
		
		for i : UInt32 in 0..<31 {
			let mask = PhysicsBodyCategory(rawValue: 1 << i)
			if self.contains(mask) {
				flags.insert(mask)

		combineSeperatedFlags(compositeA: a, compositeB: b) { (x, y) in
			let previous = PhysicsBodyCategory.contacts[x] ?? Set<PhysicsBodyCategory>()
			let updated = previous.union([y])
			PhysicsBodyCategory.contacts[x] = updated
		}
	}
	
