characteristic and descriptor discovery work. also a little refactoring