These functions should not be const, that's misleading because the hidden
members are certainly modified.
added another constructor