// I create this class BoundingFrustum f= new BoundingFrustum(new Matrix(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2)); // I compare it to itself f.Equals(f) // I enter this method public bool Equals(BoundingFrustum other) { // Other is *not* null, therefore it should go to this.matrix.Equals(other.matrix) return (other == null) ? false : this.matrix.Equals(other.matrix); } // However i end up in this method (in the BoundingFrustum class) public static bool operator == (BoundingFrustum a, BoundingFrustum b) { // Here "b" is equal to null return a.Equals(b); } // So that method calls into here again: public bool Equals(BoundingFrustum other) { // This returns false as "other" is null this time return (other == null) ? false : this.matrix.Equals(other.matrix); } // But this (wierdly enough) bounces me back out to the op_equality again, with both a and b equal to null public static bool operator == (BoundingFrustum a, BoundingFrustum b) { // I get a NullReferenceException here as both a and b are now null return a.Equals(b); }