better o-o implementation of elements