basic monoid
improve monoid