16 bit arduino timer reading

Hi all. I encountered these details about timers in this link here: http://www.avrbeginners.net/architecture/timers/timers.html

I'm tinkering with arduino timers, and just trying to understand these two seemingly contradicting details in the article, which says :

"All 16-bit registers have can only be accessed one byte at a time."

"When reading the low byte, the high byte is read from TCNT1 simultaneously and can be read afterwards."

Does the above actually mean that it IS possible to access/read two separate bytes simultaneously (at exactly the same time) from a 16 bit register ..... except we just have to later stitch these two bytes together?

UPDATE: I just came across explanations that seems to clear things up.

15.3 Accessing 16-bit Registers
The TCNT1, OCR1A/B, and ICR1 are 16-bit registers that can be accessed by the AVR CPU via the 8-bit data bus. The 16-bit register must be byte accessed using two read or write operations. Each 16-bit timer has a single 8-bit register for temporary storing of the high byte of the 16-bit access. The same temporary register is shared between all 16-bit registers within each 16-bit timer. Accessing the low byte triggers the 16-bit read or write operation. When the low byte of a 16-bit register is written by the CPU, the high byte stored in the temporary register, and the low byte written are both copied into the 16-bit register in the same clock cycle.

When the low byte of a 16-bit register is read by the CPU, the high byte of the 16-bit register is copied into the temporary register in the same clock cycle as the low byte is read.

Not all 16-bit accesses uses the temporary register for the high byte. Reading the OCR1A/B 16-bit registers does not involve using the temporary register.

To do a 16-bit write, the high byte must be written before the low byte. For a 16-bit read, the low byte must be read before the high byte.

What it appears to mean is ------ if we use an arbitrary variable for grabbing the contents of the count register of a timer (eg. timer5 register TCNT5), such as .....

timer5CounterValue = TCNT5;

..... then the system pretty much takes care of everything for us. That is, they use extra hardware (an extra 8 bit register, aside from having the existing 16 bit register) that eventually allows all 16 bits to be acquired at once ....... which is for overcoming data corrupt issues that could be encountered if this extra helping-hand extra register were not available for usage.

Southpark:
What it appears to mean is ------ if we use an arbitrary variable for grabbing the contents of the count register of a timer (eg. timer5 register TCNT5), such as .....

timer5CounterValue = TCNT5;

I don't know why you want to use an "arbitrary variable". Use the proper variable type for the job. Make it a 'uint16_t' or 'unsigned int'.

Aka, it's not possible to copy the register value at the same time, but it's possible to get the high and low byte of the same reading although read one after the other.

Southpark:
....... which is for overcoming data corrupt issues that could be encountered if this extra helping-hand extra register were not available for usage.

It's because of -

The TCNT1, OCR1A/B, and ICR1 are 16-bit registers that can be accessed by the AVR CPU via the 8-bit data bus.

gfvalvo, septillion and dougp ........ thanks very much for your help. You guys (and/or girls) really cleared things up 100% for me here. These key pieces of information really did it for me here. It's definitely nice when I seriously wanted to understand certain features and details about this side of thing ------ and these accurate pushes and help you provide --- in the right direction, makes a massive difference. I totally appreciate this forum, and the knowledge/ability of the member here. Genuinely appreciated.