added fields, made abstract