Index: cpukit/score/include/rtems/score/timecounter.h
===================================================================
--- cpukit/score/include/rtems/score/timecounter.h	(revision 2256946e9c0bc452004521d7aeeb68b72f680f42)
+++ cpukit/score/include/rtems/score/timecounter.h	(revision 65012bfebbc03088f0740b086abb26d2ff6ebd8b)
@@ -70,4 +70,11 @@
 
 /**
+ * @brief Returns the uptime in the sbintime_t format.
+ *
+ * @return Returns the uptime.
+ */
+sbintime_t _Timecounter_Sbinuptime( void );
+
+/**
  * @brief Returns the uptime in the timespec format.
  *
Index: cpukit/score/include/rtems/score/timestamp.h
===================================================================
--- cpukit/score/include/rtems/score/timestamp.h	(revision 2256946e9c0bc452004521d7aeeb68b72f680f42)
+++ cpukit/score/include/rtems/score/timestamp.h	(revision 65012bfebbc03088f0740b086abb26d2ff6ebd8b)
@@ -53,5 +53,5 @@
  *   Define the Timestamp control type.
  */
-typedef struct bintime Timestamp_Control;
+typedef sbintime_t Timestamp_Control;
 
 /**
@@ -76,5 +76,5 @@
   _ts.tv_nsec = _nanoseconds;
 
-  timespec2bintime( &_ts, _time );
+  *_time = tstosbt(_ts);
 }
 
@@ -92,6 +92,5 @@
 )
 {
-  _time->sec = 0;
-  _time->frac = 0;
+  *_time = 0;
 }
 
@@ -113,11 +112,5 @@
 )
 {
-  if ( _lhs->sec < _rhs->sec )
-    return true;
-
-  if ( _lhs->sec > _rhs->sec )
-    return false;
-
-  return _lhs->frac < _rhs->frac;
+  return *_lhs < *_rhs;
 }
 
@@ -139,11 +132,5 @@
 )
 {
-  if ( _lhs->sec > _rhs->sec )
-    return true;
-
-  if ( _lhs->sec < _rhs->sec )
-    return false;
-
-  return _lhs->frac > _rhs->frac;
+  return *_lhs > *_rhs;
 }
 
@@ -165,5 +152,5 @@
 )
 {
-  return _lhs->sec == _rhs->sec && _lhs->frac == _rhs->frac;
+  return *_lhs == *_rhs;
 }
 
@@ -182,5 +169,5 @@
 )
 {
-  bintime_add( _time, _add );
+  *_time += *_add;
 }
 
@@ -204,8 +191,5 @@
 )
 {
-  _result->sec = _end->sec;
-  _result->frac = _end->frac;
-
-  bintime_sub( _result, _start );
+  *_result = *_end - *_start;
 }
 
@@ -233,6 +217,6 @@
   struct timespec _ts_right;
 
-  bintime2timespec( _lhs, &_ts_left );
-  bintime2timespec( _rhs, &_ts_right );
+  _ts_left = sbttots( *_lhs );
+  _ts_right = sbttots( *_rhs );
 
   _Timespec_Divide(
@@ -257,5 +241,5 @@
 )
 {
-  return _time->sec;
+  return (*_time >> 32);
 }
 
@@ -275,5 +259,5 @@
   struct timespec _ts;
 
-  bintime2timespec( _time, &_ts );
+  _ts = sbttots( *_time );
 
   return (uint32_t) _ts.tv_nsec;
@@ -295,5 +279,5 @@
   struct timespec _ts;
 
-  bintime2timespec( _time, &_ts );
+  _ts = sbttots( *_time );
 
   return _Timespec_Get_as_nanoseconds( &_ts );
@@ -313,5 +297,5 @@
 )
 {
-  bintime2timespec( _timestamp, _timespec );
+  *_timespec = sbttots( *_timestamp );
 }
 
@@ -327,5 +311,5 @@
 )
 {
-  bintime2timeval( _timestamp, _timeval );
+  *_timeval = sbttotv( *_timestamp );
 }
 
Index: cpukit/score/include/rtems/score/todimpl.h
===================================================================
--- cpukit/score/include/rtems/score/todimpl.h	(revision 2256946e9c0bc452004521d7aeeb68b72f680f42)
+++ cpukit/score/include/rtems/score/todimpl.h	(revision 65012bfebbc03088f0740b086abb26d2ff6ebd8b)
@@ -202,5 +202,5 @@
 )
 {
-  _Timecounter_Binuptime( time );
+  *time = _Timecounter_Sbinuptime();
 }
 
@@ -217,6 +217,5 @@
 )
 {
-  _Timecounter_Binuptime( time );
-  --time->sec;
+  *time = _Timecounter_Sbinuptime() - SBT_1S;
 }
 
Index: cpukit/score/src/kern_tc.c
===================================================================
--- cpukit/score/src/kern_tc.c	(revision 2256946e9c0bc452004521d7aeeb68b72f680f42)
+++ cpukit/score/src/kern_tc.c	(revision 65012bfebbc03088f0740b086abb26d2ff6ebd8b)
@@ -67,4 +67,5 @@
 #ifdef __rtems__
 #include <limits.h>
+#include <string.h>
 #include <rtems.h>
 ISR_LOCK_DEFINE(, _Timecounter_Lock, "Timecounter")
@@ -470,4 +471,22 @@
 	} while (gen == 0 || gen != tc_getgen(th));
 }
+#ifdef __rtems__
+sbintime_t
+_Timecounter_Sbinuptime(void)
+{
+	struct timehands *th;
+	uint32_t gen;
+	sbintime_t sbt;
+
+	do {
+		th = timehands;
+		gen = tc_getgen(th);
+		sbt = bttosbt(th->th_offset);
+		sbt += (th->th_scale * tc_delta(th)) >> 32;
+	} while (gen == 0 || gen != tc_getgen(th));
+
+	return (sbt);
+}
+#endif /* __rtems__ */
 
 void
