Pull out puzzle/node functionality into module