local t = Def.ActorFrame{
	InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y);
	-- banner off command
	OffCommand=cmd(playcommandonchildren,"ChildOff");
	ChildOffCommand=cmd(linear,0.2;diffusealpha,0);

	-- banner
	Def.Banner{
		BeginCommand=function(self)
			local SongOrCourse;
			if GAMESTATE:IsCourseMode() then
				SongOrCourse = GAMESTATE:GetCurrentCourse();
			else
				SongOrCourse = GAMESTATE:GetCurrentSong();
			end;

			if SongOrCourse then
				if GAMESTATE:IsCourseMode() then
					self:LoadFromCourse(SongOrCourse);
				else
					self:LoadFromSong(SongOrCourse);
				end;
			else
				self:Load( THEME:GetPathG("common fallback","banner") );
			end;
			self:zoomto(204,204);
		end;
	};
	-- frame
	LoadActor( THEME:GetPathG("MusicWheelItem Song","NormalPart/songframe") )..{
		Name="SongFrame";
	};
	-- top text
	LoadFont("_venacti Bold 15px")..{
		InitCommand=cmd(maxwidth,204;y,-88);
		BeginCommand=function(self)
			local SongOrCourse;
			local displayText = "";
			if GAMESTATE:IsCourseMode() then
				SongOrCourse = GAMESTATE:GetCurrentCourse();
			else
				SongOrCourse = GAMESTATE:GetCurrentSong();
			end;
			if SongOrCourse then
				displayText = SongOrCourse:GetDisplayFullTitle();
			end;
			self:settext(displayText);
		end;
	};
	-- bottom text
	LoadFont("_venacti Bold 15px")..{
		InitCommand=cmd(maxwidth,204;y,88);
		BeginCommand=function(self)
			local SongOrCourse;
			local displayText;
			if GAMESTATE:IsCourseMode() then
				SongOrCourse = GAMESTATE:GetCurrentCourse();
				-- xxx: what to put here?? -aj
				displayText = "";
			else
				SongOrCourse = GAMESTATE:GetCurrentSong();
				displayText = SongOrCourse:GetDisplayArtist();
			end;
			self:settext(displayText);
		end;
	};
};

return t;