             if (soundChannel == null) {
                 return 0;
             } else {
-                return soundChannel.position / 1000 - fudgeFactor;
+                return soundChannel.position / 1000 - starvedAudioTime - droppedAudioTime;
             }
         }
 

                    // Out of data? Write some silence to round it out,
                    // and wait for the next set of data...
                    droppedAudio++;
                    fudgeFactor += (audioBufferSize - samplesWritten) / 44100;
                    while (samplesWritten < audioBufferSize) {
                        event.data.writeFloat(0.0);
                        event.data.writeFloat(0.0);

            var samplesWritten:int = 0;
            var leftSample:Number, rightSample:Number;

            droppedAudioTime = (event.position / targetRate) - totalBufferedAudio;
            while (samplesWritten < audioBufferSize) {

                if (audioBuffers.length == 0) {
