Hi, i am maybe completely ignorant, but can someone tell me where such precision is used? In order to achieve this (or well, get close to), a current implementation goes into very long circles to squeeze accuracy from underlying OS & primitives.. just take a look at this code and tell me what you think: secondsWhenClockTicks "waits for the moment when a new second begins" | lastSecond delay | delay := Delay forMilliseconds: 1. lastSecond := self primSecondsClock. [ lastSecond = self primSecondsClock ] whileTrue: [ delay wait ]. ^ lastSecond + 1 initializeOffsets | durationSinceEpoch secondsSinceMidnight nowSecs | LastTick := 0. nowSecs := self clock secondsWhenClockTicks. LastMilliSeconds := self millisecondClockValue. durationSinceEpoch := Duration days: SqueakEpoch hours: 0 minutes: 0 seconds: nowSecs. DaysSinceEpoch := durationSinceEpoch days. secondsSinceMidnight := (durationSinceEpoch - (Duration days: DaysSinceEpoch hours: 0 minutes: 0 seconds: 0)) asSeconds. MilliSecondOffset := secondsSinceMidnight * 1000 - LastMilliSeconds what amuses me is then the way how TimeStamp class dealing with it to actually throw away extra precision: TimeStamp >> current "called by #now" | ts ticks | ts := super now. ticks := ts ticks. ticks at: 3 put: 0. ts ticks: ticks offset: ts offset. ^ ts DateAndTime>>ticks "Private - answer an array with our instance variables. Assumed to be UTC " ^ Array with: julianDayNumber with: seconds with: nanos. if it is not obvious for someone, the right way to reset the nanoseconds field in timestamp is not sending a message to existing timestamp, say #resetNanoseconds, NO! you should call a private method, which answers you an Array and then you do "at:3 put: 0", and then pass it again to same object as two arguments. -- Best regards, Igor Stasenko.