reimplement non_empty?