basic functionality, plus decimal handling