correctly parses numeric data over 999, but messily