Too Many Staff Meetings
Just a quick shot
This

public override bool Equals(object obj)
{
    return base.Equals(obj);
}
public override int GetHashCode()
{
    return base.GetHashCode();
}  


doesn't buy you anything. Overriding a method and the calling the base method is just rubbish which lays around in the codebase.