 		}
 		
 		// Event Handlers
+		private function onEnterFrame(e:Event):void {
+			var data:Object = {muted: this.muted, recording: this.recording, volume: mic.activityLevel};
+			if (this.time) data.time = this.time;
+			dispatchEvent(new RecorderEvent(RecorderEvent.STATUS, data, true));
+		}
+		
 		private function onRecording(e:RecordingEvent):void {
-			dispatchEvent(new Event('Recorder.recording', true));
+			var data:Object = {time: e.time, volume: mic.activityLevel};
+			dispatchEvent(new RecorderEvent(RecorderEvent.RECORDING, data, true));
 		}
 		
 		private function onComplete(e:Event):void {
-			dispatchEvent(new Event('Recorder.complete', true));
+			var data:Object = {};
+			dispatchEvent(new RecorderEvent(RecorderEvent.COMPLETE, data, true));
 		}
 		
 		private function onMicStatus(e:StatusEvent):void {
 			if (e.code == "Microphone.Unmuted"){
 				muted = false;
 				mic.removeEventListener(StatusEvent.STATUS, onMicStatus);
-				dispatchEvent(new Event('Recorder.enabled', true));
+				dispatchEvent(new RecorderEvent(RecorderEvent.ENABLED, true));
 			} else if (e.code == "Microphone.Muted") {
-				muted = true;
 				mic.removeEventListener(StatusEvent.STATUS, onMicStatus);
-				dispatchEvent(new Event('Recorder.disabled', true));
+				dispatchEvent(new RecorderEvent(RecorderEvent.DISABLED, true));
 			}
 		}
 		

			Security.showSettings("2");
		}
		
		// Methods
		public function isMuted():Boolean {
			return muted;
		}
		
		public function getActivityLevel():Number {
			return mic.activityLevel;
		}
		
		public function getDataURL():String {

    import flash.media.Microphone;
	
	import Base64;
	import RecorderEvent;
	
	public class Recorder extends Sprite {
		
		private var muted:Boolean = true;
		private var recording:Boolean = false;
		private var time:int = 0;
		private var duration:int = 0;
		
		private var mic:Microphone;
		private var wavEncoder:WaveEncoder = new WaveEncoder();
		private var micRecorder:MicRecorder = new MicRecorder(wavEncoder);
