local t = Def.ActorFrame {
	LoadFont("SortDisplay") ..{
		InitCommand=cmd(horizalign,left;shadowlength,0;SetTextureFiltering,false);
		OnCommand=cmd(playcommand,"Set");
		SetCommand=function(self)
			local SongOrCourse;
			local timeText = "??:??.??";
			if GAMESTATE:IsCourseMode() then
				SongOrCourse = GAMESTATE:GetCurrentCourse();
			else
				SongOrCourse = GAMESTATE:GetCurrentSong();
			end;
			if SongOrCourse then
				if GAMESTATE:IsCourseMode() then
					local trail = GAMESTATE:GetCurrentTrail(GAMESTATE:GetMasterPlayerNumber());
					if trail then
						local st = trail:GetStepsType();
						if st then
							timeText = SecondsToMSSMsMs(TrailUtil.GetTotalSeconds(trail));
						else
							timeText = "??:??.??";
						end;
					else
						timeText = "??:??.??";
					end;
				else
					timeText = SecondsToMSSMsMs(SongOrCourse:MusicLengthSeconds());
				end;
			else
				timeText = "";
			end;
			self:settext(timeText);
		end;
		CurrentSongChangedMessageCommand=cmd(playcommand,"Set");
		CurrentCourseChangedMessageCommand=cmd(playcommand,"Set");
		CurrentTrailP1ChangedMessageCommand=cmd(playcommand,"Set");
		CurrentTrailP2ChangedMessageCommand=cmd(playcommand,"Set");
	};
};

return t;