implement basic linear functionality