added abstractItem class