added chainable interface