added a protected setId method; only use in derived classes when absolutely needed