diff --git a/LMMS_Stable/.git/index b/LMMS_Modified/.git/index
index 9782ffd..3571b2c 100644
Binary files a/LMMS_Stable/.git/index and b/LMMS_Modified/.git/index differ
diff --git a/LMMS_Stable/.git/logs/HEAD b/LMMS_Modified/.git/logs/HEAD
index 38db7ff..1501976 100644
--- a/LMMS_Stable/.git/logs/HEAD
+++ b/LMMS_Modified/.git/logs/HEAD
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383699528 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
-2c28048e90be7efe4f73b90fe7385a0a130b9b6c e4d18e76d58afa03effc37051b4b7ce3bd44b956 knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383702751 -0600	checkout: moving from master to stable-0.4
+0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383701633 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
+2c28048e90be7efe4f73b90fe7385a0a130b9b6c e4d18e76d58afa03effc37051b4b7ce3bd44b956 knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383702764 -0600	checkout: moving from master to stable-0.4
diff --git a/LMMS_Stable/.git/logs/refs/heads/master b/LMMS_Modified/.git/logs/refs/heads/master
index b5d13a6..1f601b4 100644
--- a/LMMS_Stable/.git/logs/refs/heads/master
+++ b/LMMS_Modified/.git/logs/refs/heads/master
@@ -1 +1 @@
-0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383699528 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
+0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383701633 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
diff --git a/LMMS_Stable/.git/logs/refs/heads/stable-0.4 b/LMMS_Modified/.git/logs/refs/heads/stable-0.4
index a988adf..c5d1e5f 100644
--- a/LMMS_Stable/.git/logs/refs/heads/stable-0.4
+++ b/LMMS_Modified/.git/logs/refs/heads/stable-0.4
@@ -1 +1 @@
-0000000000000000000000000000000000000000 e4d18e76d58afa03effc37051b4b7ce3bd44b956 knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383702751 -0600	branch: Created from origin/stable-0.4
+0000000000000000000000000000000000000000 e4d18e76d58afa03effc37051b4b7ce3bd44b956 knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383702764 -0600	branch: Created from origin/stable-0.4
diff --git a/LMMS_Stable/.git/logs/refs/remotes/origin/HEAD b/LMMS_Modified/.git/logs/refs/remotes/origin/HEAD
index b5d13a6..1f601b4 100644
--- a/LMMS_Stable/.git/logs/refs/remotes/origin/HEAD
+++ b/LMMS_Modified/.git/logs/refs/remotes/origin/HEAD
@@ -1 +1 @@
-0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383699528 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
+0000000000000000000000000000000000000000 2c28048e90be7efe4f73b90fe7385a0a130b9b6c knightlain <knightlain@knightlain-Dimension-E521.(none)> 1383701633 -0600	clone: from git://lmms.git.sf.net/gitroot/lmms/lmms
diff --git a/LMMS_Stable/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.idx b/LMMS_Modified/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.idx
index ae427db..3f531f8 100644
Binary files a/LMMS_Stable/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.idx and b/LMMS_Modified/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.idx differ
diff --git a/LMMS_Stable/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.pack b/LMMS_Modified/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.pack
index 9ca60fd..4c7c281 100644
Binary files a/LMMS_Stable/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.pack and b/LMMS_Modified/.git/objects/pack/pack-ae612b5eed049a4586322f62c1726d422c98ea68.pack differ
diff --git a/LMMS_Stable/include/song.h b/LMMS_Modified/include/song.h
index eddfe2d..dc9d532 100644
--- a/LMMS_Stable/include/song.h
+++ b/LMMS_Modified/include/song.h
@@ -94,7 +94,22 @@ public:
 
 	void processNextBuffer();
 
-
+	inline int getMilliseconds() const
+	{
+		return elapsedmilliseconds;
+	}
+	inline void setMilliseconds(float _ellapsedmilliseconds)
+	{
+		elapsedmilliseconds = (_ellapsedmilliseconds);
+	}
+	inline int getTacts() const
+	{
+		return currentTact();
+	}
+	inline int getTicks() const
+	{
+		return currentTick();
+	}
 	inline bool isPaused() const
 	{
 		return m_paused;
@@ -313,6 +328,9 @@ private:
 	pattern * m_patternToPlay;
 	bool m_loopPattern;
 
+	double elapsedmilliseconds;
+	long int elapsedticks;
+	long int elapsedtacts;
 
 	enum Actions
 	{
diff --git a/LMMS_Modified/include/timer_widget.h b/LMMS_Modified/include/timer_widget.h
new file mode 100644
index 0000000..ec656f7
--- /dev/null
+++ b/LMMS_Modified/include/timer_widget.h
@@ -0,0 +1,54 @@
+/*
+ * timer_widget.cpp - widget for visualization of ellapsed time
+ * Based on visualization widget
+ * Uploaded by Ruben Ibarra
+ * TODO: Add glow effect and make it look more digital
+ * Licensed by GPLv2
+ */
+
+
+
+#ifndef _TIMER_WIDGET
+#define _TIMER_WIDGET
+
+#include <QtGui/QWidget>
+#include <QtGui/QPixmap>
+#include <QtGui/QGraphicsDropShadowEffect>
+
+#include "mixer.h"
+
+
+class timerWidget : public QWidget
+{
+	Q_OBJECT
+public:
+	timerWidget( const QPixmap & _bg, QWidget * _parent);
+	virtual ~timerWidget();
+	void setActive( bool _active );
+
+protected:
+	virtual void paintEvent( QPaintEvent * _pe );
+	virtual void mousePressEvent( QMouseEvent * _me );
+
+
+protected slots:
+	void updateAudioBuffer();
+
+
+private:
+	QPixmap s_background;
+	QPointF * m_points;
+	QString seconds;
+	QString minutes;
+	QString milliseconds;
+	QString tacts;
+	QString ticks;
+	QString time1,time2,time3;
+	QString total;
+	QGraphicsDropShadowEffect * dse;
+	sampleFrame * m_buffer;
+	int mode;
+
+} ;
+
+#endif
diff --git a/LMMS_Stable/src/core/song.cpp b/LMMS_Modified/src/core/song.cpp
index b8d281a..f2703c9 100644
--- a/LMMS_Stable/src/core/song.cpp
+++ b/LMMS_Modified/src/core/song.cpp
@@ -179,7 +179,9 @@ song::song() :
 			this, SLOT( masterPitchChanged() ) );*/
 
 	qRegisterMetaType<note>( "note" );
-
+ 	elapsedmilliseconds = 0;
+ 	elapsedticks = 0;
+ 	elapsedtacts = 0;
 }
 
 
@@ -285,6 +287,7 @@ void song::doActions()
 		{
 			case timeLine::BackToZero:
 				m_playPos[m_playMode].setTicks( 0 );
+				elapsedmilliseconds = 0;
 				break;
 
 			case timeLine::BackToStart:
@@ -292,6 +295,7 @@ void song::doActions()
 				{
 					m_playPos[m_playMode].setTicks(
 						tl->savedPos().getTicks() );
+					elapsedmilliseconds = (((tl->savedPos().getTicks())*60*1000/48)/getTempo());
 					tl->savePos( -1 );
 				}
 				break;
@@ -305,6 +309,7 @@ void song::doActions()
 				else
 				{
 					m_playPos[m_playMode].setTicks( 0 );
+					elapsedmilliseconds = 0;
 				}
 
 				m_playPos[m_playMode].setCurrentFrame( 0 );
@@ -454,6 +459,7 @@ void song::processNextBuffer()
 		if( m_playPos[m_playMode] < tl->loopBegin() ||
 					m_playPos[m_playMode] >= tl->loopEnd() )
 		{
+			elapsedmilliseconds = (tl->loopBegin().getTicks()*60*1000/48)/getTempo();
 			m_playPos[m_playMode].setTicks(
 						tl->loopBegin().getTicks() );
 		}
@@ -546,6 +552,7 @@ void song::processNextBuffer()
 				{
 					m_playPos[m_playMode].setTicks(
 						tl->loopBegin().getTicks() );
+					elapsedmilliseconds = ((tl->loopBegin().getTicks())*60*1000/48)/getTempo();
 				}
 			}
 			else
@@ -599,6 +606,9 @@ void song::processNextBuffer()
 		total_frames_played += played_frames;
 		m_playPos[m_playMode].setCurrentFrame( played_frames +
 								current_frame );
+		elapsedmilliseconds += (((played_frames/frames_per_tick)*60*1000/48)/getTempo());
+		elapsedtacts = m_playPos[Mode_PlaySong].getTact();
+		elapsedticks = (m_playPos[Mode_PlaySong].getTicks()%ticksPerTact())/48;
 	}
 }
 
@@ -733,6 +743,8 @@ void song::updateLength()
 
 void song::setPlayPos( tick_t _ticks, PlayModes _play_mode )
 {
+  	elapsedticks += m_playPos[_play_mode].getTicks() - _ticks;
+	elapsedmilliseconds += (((( _ticks - m_playPos[_play_mode].getTicks()))*60*1000/48)/getTempo());
 	m_playPos[_play_mode].setTicks( _ticks );
 	m_playPos[_play_mode].setCurrentFrame( 0.0f );
 }
diff --git a/LMMS_Stable/src/core/timeline.cpp b/LMMS_Modified/src/core/timeline.cpp
index f3dc59d..1529f8b 100644
--- a/LMMS_Stable/src/core/timeline.cpp
+++ b/LMMS_Modified/src/core/timeline.cpp
@@ -324,6 +324,7 @@ void timeLine::mouseMoveEvent( QMouseEvent * _me )
 	{
 		case MovePositionMarker:
 			m_pos.setTicks( t.getTicks() );
+			engine::getSong()->setMilliseconds(((((t.getTicks()))*60*1000/48)/engine::getSong()->getTempo()));
 			m_pos.setCurrentFrame( 0 );
 			updatePosition();
 			break;
diff --git a/LMMS_Stable/src/gui/song_editor.cpp b/LMMS_Modified/src/gui/song_editor.cpp
index cd1bba8..3d81099 100644
--- a/LMMS_Stable/src/gui/song_editor.cpp
+++ b/LMMS_Modified/src/gui/song_editor.cpp
@@ -50,6 +50,7 @@
 #include "tool_button.h"
 #include "tooltip.h"
 #include "visualization_widget.h"
+#include "timer_widget.h"
 #include "AudioDevice.h"
 #include "piano_roll.h"
 #include "config_mgr.h"
@@ -230,7 +231,12 @@ songEditor::songEditor( song * _song, songEditor * & _engine_ptr ) :
 	vcw_layout->addStretch();
 
 	engine::mainWindow()->addWidgetToToolBar( vc_w );
-
+	QWidget * timer_w = new QWidget( tb );
+	QHBoxLayout * timer_layout = new QHBoxLayout ( timer_w );
+	timer_layout->setMargin( 0 );
+	timer_layout->setSpacing( 5 );
+	timer_layout->addWidget( new timerWidget(embed::getIconPixmap( "output_graph" ), timer_w ) );
+	engine::mainWindow()->addWidgetToToolBar( timer_w);
 
 	// create own toolbar
 	m_toolBar = new QWidget( this );
diff --git a/LMMS_Modified/src/gui/timer_widget.cpp b/LMMS_Modified/src/gui/timer_widget.cpp
new file mode 100644
index 0000000..3db7707
--- /dev/null
+++ b/LMMS_Modified/src/gui/timer_widget.cpp
@@ -0,0 +1,180 @@
+/*
+ * timer_widget.cpp - widget for visualization of elapsed time
+ * Based on visualization widget
+ * Uploaded by Ruben Ibarra
+* TODO: Add glow effect and make it look more digital
+ * Licensed by GPLv2
+ */
+
+
+#include <QtGui/QMouseEvent>
+#include <QtGui/QPainter>
+
+#include "timer_widget.h"
+#include "gui_templates.h"
+#include "MainWindow.h"
+#include "embed.h"
+#include "engine.h"
+#include "tooltip.h"
+#include "song.h"
+
+
+
+timerWidget::timerWidget( const QPixmap & _bg, QWidget * _p ) :
+	QWidget( _p ),
+	s_background( _bg ),
+	mode( 0 )
+{
+	setFixedSize( s_background.width(), s_background.height() );
+	setAttribute( Qt::WA_OpaquePaintEvent, true );
+
+	const fpp_t frames = engine::getMixer()->framesPerPeriod();
+	m_buffer = new sampleFrame[frames];
+
+	engine::getMixer()->clearAudioBuffer( m_buffer, frames );
+
+	toolTip::add( this, tr( "click to enable/disable visualization of "
+							"time" ) );
+}
+
+
+
+
+timerWidget::~timerWidget()
+{
+	delete[] m_buffer;
+}
+
+
+
+
+void timerWidget::updateAudioBuffer()
+{
+	if( !engine::getSong()->isExporting() )
+	{
+		engine::getMixer()->lock();
+		const surroundSampleFrame * c = engine::getMixer()->
+							currentReadBuffer();
+		const fpp_t fpp = engine::getMixer()->framesPerPeriod();
+		memcpy( m_buffer, c, sizeof( surroundSampleFrame ) * fpp );
+		engine::getMixer()->unlock();
+	}
+}
+
+
+
+
+void timerWidget::setActive( bool _active )
+{
+
+	if( mode != 2 )
+	{
+		connect( engine::mainWindow(),
+					SIGNAL( periodicUpdate() ),
+					this, SLOT( update() ) );
+		connect( engine::getMixer(),
+					SIGNAL( nextAudioBuffer() ),
+				this, SLOT( updateAudioBuffer() ) );
+	}
+	else
+	{
+		disconnect( engine::mainWindow(),
+					SIGNAL( periodicUpdate() ),
+					this, SLOT( update() ) );
+		disconnect( engine::getMixer(),
+					SIGNAL( nextAudioBuffer() ),
+				this, SLOT( updateAudioBuffer() ) );
+		// we have to update (remove last waves),
+		// because timer doesn't do that anymore
+		update();
+	}
+}
+
+
+
+
+void timerWidget::paintEvent( QPaintEvent * )
+{
+	QPainter p( this );
+
+	p.drawPixmap( 0, 0, s_background );
+
+	//if( m_active && !engine::getSong()->isExporting() )
+	if( (mode == 1) && !engine::getSong()->isExporting() )
+	{
+		p.setPen( QColor( 64, 224, 255 ) );
+		p.setRenderHint( QPainter::Antialiasing );
+
+		// now draw all that stuff
+		milliseconds = milliseconds.setNum(engine::getSong()->getMilliseconds()%100);
+		seconds = seconds.setNum((engine::getSong()->getMilliseconds()/1000)%60);
+		minutes = minutes.setNum((engine::getSong()->getMilliseconds()/60000));
+		p.setFont( pointSize<16>( p.font() ) );
+		if((engine::getSong()->getMilliseconds()/60000) < 10)//Minutes
+		  time1 = "0";
+		else
+		  time1 = "";
+                if((engine::getSong()->getMilliseconds()/1000)%60 < 10)//Seconds
+		  time2 = ":0";
+		else
+		  time2 = ":";
+                if(engine::getSong()->getMilliseconds()%100 < 10)//Milliseconds
+		  time3 = ":0";
+		else
+		  time3 = ":";
+		total = minutes + ":" + seconds  + ":" + milliseconds;
+		total = time1 + minutes + time2 + seconds + time3 + milliseconds;
+		p.drawText( 10, 30,total);
+	}
+	else if(mode == 2)
+	{
+		p.setPen( QColor( 64, 224, 255 ) );
+		p.setRenderHint( QPainter::Antialiasing );
+		tacts = seconds.setNum(engine::getSong()->getTacts());
+		ticks = minutes.setNum(engine::getSong()->getTicks());
+		milliseconds = milliseconds.setNum(engine::getSong()->getMilliseconds()/10%100);
+		p.setFont( pointSize<16>( p.font() ) );
+		if(engine::getSong()->getTacts() < 10)//Tacts
+		  time1 = "0";
+		else
+		  time1 = "";
+                if(engine::getSong()->getTicks() < 10)//Ticks
+		  time2 = ":0";
+		else
+		  time2 = ":";
+                if(engine::getSong()->getMilliseconds()/10%100 < 10)//Milliseconds
+		  time3 = ":0";
+		else
+		  time3 = ":";
+		total = time1 + tacts + time2 + ticks + time3 + milliseconds;
+		p.drawText( 10, 30,total);
+	}
+	else
+	{
+		p.setPen( QColor( 192, 192, 192 ) );
+		p.setFont( pointSize<7>( p.font() ) );
+		p.drawText( 6, height()-5, tr( "Click to enable" ) );
+	}
+}
+
+
+
+
+void timerWidget::mousePressEvent( QMouseEvent * _me )
+{
+	if( _me->button() == Qt::LeftButton )
+	{
+		if(mode == 0)
+			setActive( true );
+		else if(mode == 2)
+			setActive( false);
+		mode++;
+		mode = mode%3;
+	}
+}
+
+
+
+#include "moc_timer_widget.cxx"
+
+
