diff --git a/features/org.eclipse.actf.examples.adesigner-feature/feature.xml b/features/org.eclipse.actf.examples.adesigner-feature/feature.xml
index 878ae2e..455b893 100644
--- a/features/org.eclipse.actf.examples.adesigner-feature/feature.xml
+++ b/features/org.eclipse.actf.examples.adesigner-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.actf.examples.adesigner"
       label="ACTF Example aDesigner feature"
-      version="1.4.0.qualifier"
+      version="1.5.0.qualifier"
       provider-name="Eclipse ACTF Project"
       plugin="org.eclipse.actf.examples.adesigner"
       os="win32"
diff --git a/features/org.eclipse.actf.examples.emine-feature/feature.xml b/features/org.eclipse.actf.examples.emine-feature/feature.xml
index 2147686..2171dff 100644
--- a/features/org.eclipse.actf.examples.emine-feature/feature.xml
+++ b/features/org.eclipse.actf.examples.emine-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.actf.examples.emine"
       label="ACTF Example eMINE feature"
-      version="1.4.0.qualifier"
+      version="1.5.0.qualifier"
       provider-name="Eclipse ACTF Project"
       plugin="org.eclipse.actf.examples.emine"
       os="win32"
diff --git a/features/org.eclipse.actf.examples.htmlchecker-feature/feature.xml b/features/org.eclipse.actf.examples.htmlchecker-feature/feature.xml
index 95140d6..00d59a4 100644
--- a/features/org.eclipse.actf.examples.htmlchecker-feature/feature.xml
+++ b/features/org.eclipse.actf.examples.htmlchecker-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.actf.examples.htmlchecker"
       label="ACTF Example HtmlChecker Feature"
-      version="1.4.0.qualifier"
+      version="1.5.0.qualifier"
       provider-name="Eclipse ACTF Project"
       plugin="org.eclipse.actf.examples.htmlchecker"
       os="win32"
diff --git a/features/org.eclipse.actf.examples.simplevisualizer-feature/feature.xml b/features/org.eclipse.actf.examples.simplevisualizer-feature/feature.xml
index 0e7e70d..a3268d7 100644
--- a/features/org.eclipse.actf.examples.simplevisualizer-feature/feature.xml
+++ b/features/org.eclipse.actf.examples.simplevisualizer-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.actf.examples.simplevisualizer"
       label="ACTF Example Simple Visualizer feature"
-      version="1.4.0.qualifier"
+      version="1.5.0.qualifier"
       provider-name="Eclipse ACTF Project"
       plugin="org.eclipse.actf.examples.simplevisualizer"
       os="win32"
diff --git a/features/org.eclipse.actf.examples.vicram-feature/feature.xml b/features/org.eclipse.actf.examples.vicram-feature/feature.xml
index ae90413..267cf45 100644
--- a/features/org.eclipse.actf.examples.vicram-feature/feature.xml
+++ b/features/org.eclipse.actf.examples.vicram-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.actf.examples.vicram"
       label="ACTF Example ViCRAM feature"
-      version="1.4.0.qualifier"
+      version="1.5.0.qualifier"
       provider-name="Eclipse ACTF Project"
       plugin="org.eclipse.actf.examples.vicram"
       os="win32"
diff --git a/plugins/org.eclipse.actf.examples.adesigner.doc.nl1/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.adesigner.doc.nl1/META-INF/MANIFEST.MF
index e633d70..7e083a6 100644
--- a/plugins/org.eclipse.actf.examples.adesigner.doc.nl1/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.adesigner.doc.nl1/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example aDesigner Help Nl1 Fragment
 Bundle-SymbolicName: org.eclipse.actf.examples.adesigner.doc.nl1
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Vendor: Eclipse ACTF Project
 Fragment-Host: org.eclipse.actf.examples.adesigner.doc;bundle-version="[0.0.1,2.0.0)"
diff --git a/plugins/org.eclipse.actf.examples.adesigner.doc/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.adesigner.doc/META-INF/MANIFEST.MF
index e430ffa..f6b9ad3 100644
--- a/plugins/org.eclipse.actf.examples.adesigner.doc/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.adesigner.doc/META-INF/MANIFEST.MF
@@ -2,5 +2,5 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example aDesigner Help Plug-in
 Bundle-SymbolicName: org.eclipse.actf.examples.adesigner.doc;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Vendor: Eclipse ACTF Project
diff --git a/plugins/org.eclipse.actf.examples.adesigner.eval.html/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.adesigner.eval.html/META-INF/MANIFEST.MF
index 5dd8e53..227b6b3 100644
--- a/plugins/org.eclipse.actf.examples.adesigner.eval.html/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.adesigner.eval.html/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF HTML evaluation example Fragment
 Bundle-SymbolicName: org.eclipse.actf.examples.adesigner.eval.html;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Vendor: Eclipse ACTF Project
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.actf.core,
diff --git a/plugins/org.eclipse.actf.examples.adesigner.eval.odf/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.adesigner.eval.odf/META-INF/MANIFEST.MF
index a1cd908..e7834b0 100644
--- a/plugins/org.eclipse.actf.examples.adesigner.eval.odf/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.adesigner.eval.odf/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF ODF evaluation example Fragment
 Bundle-SymbolicName: org.eclipse.actf.examples.adesigner.eval.odf;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Vendor: Eclipse ACTF Project
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui,
diff --git a/plugins/org.eclipse.actf.examples.adesigner/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.adesigner/META-INF/MANIFEST.MF
index 2e8bf1e..bfd98d5 100644
--- a/plugins/org.eclipse.actf.examples.adesigner/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.adesigner/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example aDesigner Client
 Bundle-SymbolicName: org.eclipse.actf.examples.adesigner;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Activator: org.eclipse.actf.examples.adesigner.ADesignerPlugin
 Bundle-Vendor: Eclipse ACTF Project
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.actf.examples.adesigner/aDesigner.product b/plugins/org.eclipse.actf.examples.adesigner/aDesigner.product
index 22a0fad..7cfd5ea 100644
--- a/plugins/org.eclipse.actf.examples.adesigner/aDesigner.product
+++ b/plugins/org.eclipse.actf.examples.adesigner/aDesigner.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="aDesigner" uid="ACTF aDesigner" id="org.eclipse.actf.examples.adesigner.aDesigner" application="org.eclipse.actf.examples.adesigner.org.eclipse.actf.examples.adesigner.ADesignerApplication" version="1.4.0.qualifier" useFeatures="true" includeLaunchers="true">
+<product name="aDesigner" uid="ACTF aDesigner" id="org.eclipse.actf.examples.adesigner.aDesigner" application="org.eclipse.actf.examples.adesigner.org.eclipse.actf.examples.adesigner.ADesignerApplication" version="1.5.0.qualifier" useFeatures="true" includeLaunchers="true">
 
    <aboutInfo>
       <image path="/org.eclipse.actf.examples.adesigner/about.gif"/>
@@ -40,7 +40,7 @@
    </plugins>
 
    <features>
-      <feature id="org.eclipse.actf.examples.adesigner" version="1.4.0.qualifier"/>
+      <feature id="org.eclipse.actf.examples.adesigner" version="1.5.0.qualifier"/>
       <feature id="org.eclipse.help"/>
    </features>
 
diff --git a/plugins/org.eclipse.actf.examples.adesigner/plugin.properties b/plugins/org.eclipse.actf.examples.adesigner/plugin.properties
index f21fea1..c6388ec 100644
--- a/plugins/org.eclipse.actf.examples.adesigner/plugin.properties
+++ b/plugins/org.eclipse.actf.examples.adesigner/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2015 IBM Corporation and others.
+# Copyright (c) 2007, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -27,4 +27,4 @@
 adesigner.menu.window = &Window
 adesigner.menu.navigation = Navi&gation
 
-About.Text=Eclipse ACTF aDesigner\nVersion: 1.4.0\n\nCopyright 2007, 2015 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
+About.Text=Eclipse ACTF aDesigner\nVersion: 1.5.0\n\nCopyright 2007, 2017 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.examples.emine/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.emine/META-INF/MANIFEST.MF
index 949b948..bb69206 100644
--- a/plugins/org.eclipse.actf.examples.emine/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.emine/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example eMINE (Incubation)
 Bundle-SymbolicName: org.eclipse.actf.examples.emine;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Activator: org.eclipse.actf.examples.emine.EminePlugin
 Bundle-Vendor: Eclipse ACTF Project
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.actf.examples.emine/vips.product b/plugins/org.eclipse.actf.examples.emine/vips.product
index 8370b18..991c248 100644
--- a/plugins/org.eclipse.actf.examples.emine/vips.product
+++ b/plugins/org.eclipse.actf.examples.emine/vips.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="eMINE VIPS" uid="ACTF eMINE VIPS" id="org.eclipse.actf.examples.emine.vips" application="org.eclipse.actf.examples.emine.EmineSampleApplication" version="1.4.0.qualifier" useFeatures="true" includeLaunchers="true">
+<product name="eMINE VIPS" uid="ACTF eMINE VIPS" id="org.eclipse.actf.examples.emine.vips" application="org.eclipse.actf.examples.emine.EmineSampleApplication" version="1.5.0.qualifier" useFeatures="true" includeLaunchers="true">
 
    <aboutInfo>
       <image path="/org.eclipse.actf.examples.emine/about.gif"/>
@@ -37,7 +37,7 @@
    </plugins>
 
    <features>
-      <feature id="org.eclipse.actf.examples.emine" version="1.4.0.qualifier"/>
+      <feature id="org.eclipse.actf.examples.emine" version="1.5.0.qualifier"/>
    </features>
 
    <configurations>
diff --git a/plugins/org.eclipse.actf.examples.htmlchecker/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.htmlchecker/META-INF/MANIFEST.MF
index 4b9a75d..a92b37d 100644
--- a/plugins/org.eclipse.actf.examples.htmlchecker/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.htmlchecker/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Examples HtmlChecker
 Bundle-SymbolicName: org.eclipse.actf.examples.htmlchecker;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Activator: org.eclipse.actf.examples.htmlchecker.Activator
 Bundle-Vendor: Eclipse ACTF Project
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.actf.examples.htmlchecker/htmlchecker.product b/plugins/org.eclipse.actf.examples.htmlchecker/htmlchecker.product
index dc5adbc..9df8e21 100644
--- a/plugins/org.eclipse.actf.examples.htmlchecker/htmlchecker.product
+++ b/plugins/org.eclipse.actf.examples.htmlchecker/htmlchecker.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="HtmlChecker" uid="ACTF HtmlChecker" id="org.eclipse.actf.examples.htmlchecker.HtmlChecker" application="org.eclipse.actf.examples.htmlchecker.HtmlChecker" version="1.4.0.qualifier" useFeatures="true" includeLaunchers="true">
+<product name="HtmlChecker" uid="ACTF HtmlChecker" id="org.eclipse.actf.examples.htmlchecker.HtmlChecker" application="org.eclipse.actf.examples.htmlchecker.HtmlChecker" version="1.5.0.qualifier" useFeatures="true" includeLaunchers="true">
 
    <aboutInfo>
       <image path="/org.eclipse.actf.examples.htmlchecker/about.gif"/>
diff --git a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/preferences/CapturePreferenceInitializer.java b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/preferences/CapturePreferenceInitializer.java
index c2d3416..22466a0 100644
--- a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/preferences/CapturePreferenceInitializer.java
+++ b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/preferences/CapturePreferenceInitializer.java
@@ -21,7 +21,7 @@
 
 		// Initialize values
 		store.setDefault(CapturePreferenceConstants.SAMPRATE_GROUP_NAME,
-				CapturePreferenceConstants.SAMPRATE_NOM);
+				CapturePreferenceConstants.SAMPRATE_FAST);
 		store.setDefault(CapturePreferenceConstants.GAIN_VOLLVL_NAME,
 				CapturePreferenceConstants.GAIN_DEF);
 	}
diff --git a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/SoundMixer.java b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/SoundMixer.java
index 7b0f597..0f38895 100644
--- a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/SoundMixer.java
+++ b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/SoundMixer.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.actf.ai.scripteditor.util;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
@@ -27,6 +28,7 @@
 
 import org.eclipse.actf.ai.scripteditor.preferences.CapturePreferenceUtil;
 import org.eclipse.actf.ai.ui.scripteditor.views.IUNIT;
+import org.eclipse.swt.widgets.Display;
 
 public class SoundMixer implements IUNIT {
 
@@ -54,7 +56,7 @@
 	// Save file(.wav) mode
 	private AudioInputStream voiceInputStream = null;
 	private AudioFileFormat.Type voiceTargetType;
-	private File saveFH;
+	private File saveFH = null;
 
 	// current WAV header information
 	private String currentWavFormatID;
@@ -79,8 +81,7 @@
 	 */
 	private SoundMixer() {
 		// Initialize value by Preference setting
-		setSampleRateCaptureAudio(CapturePreferenceUtil
-				.getPreferenceSampleRate());
+		setSampleRateCaptureAudio(CapturePreferenceUtil.getPreferenceSampleRate());
 	}
 
 	/**
@@ -224,6 +225,28 @@
 			final AudioFormat format = getFormat();
 			voiceInfo = new DataLine.Info(TargetDataLine.class, format);
 			voiceLine = (TargetDataLine) AudioSystem.getLine(voiceInfo);
+			
+			// Initialize captured voice data(wave format)
+			int bufferSize = format.getFrameSize();
+			voiceCaptureBuffer = new byte[bufferSize]; // Capture buffer for
+														// Thread process
+			voiceStoreBuffer = new byte[bufferSize]; // Store buffer for latest
+														// captured data
+			voiceClearData = new byte[bufferSize]; // Clear data for stored
+													// buffer
+			for (int i = 0; i < voiceClearData.length; i++) { // SetUP zero data
+				voiceClearData[i] = 0;
+			}
+			// Setup output stream
+			if (voiceOutputStream == null) {
+				voiceOutputStream = new ByteArrayOutputStream();
+			} else {
+				// reset data
+				if (voiceOutputStream.size() > 0) {
+					voiceOutputStream.reset();
+				}
+			}
+
 
 			// Create & Open file for save voice data
 			saveFH = new File("c:\\temp\\dummy.wav");
@@ -251,12 +274,11 @@
 			// Only Playing
 			if (runningCapture) {
 				// PickUP capture data(PCM)
-				int count = voiceLine.read(voiceCaptureBuffer, 0,
-						voiceCaptureBuffer.length);
+				int count = voiceLine.read(voiceCaptureBuffer, 0, voiceCaptureBuffer.length);
 				if (count > 0) {
 					// Buffering capture data
-					System.arraycopy(voiceCaptureBuffer, 0, voiceStoreBuffer,
-							0, count);
+					System.arraycopy(voiceCaptureBuffer, 0, voiceStoreBuffer, 0, count);
+					voiceOutputStream.write(voiceCaptureBuffer, 0, count);
 				}
 			}
 		} catch (Exception e) {
@@ -269,10 +291,17 @@
 			// Only Playing
 			if (runningCapture) {
 				// Write data to .wav file
-				AudioSystem.write(voiceInputStream, voiceTargetType, saveFH);
+				// AudioSystem.write(voiceInputStream, voiceTargetType, saveFH);
+				int count = voiceLine.read(voiceCaptureBuffer, 0, voiceCaptureBuffer.length);
+				if (count > 0) {
+					// Buffering capture data
+					//System.arraycopy(voiceCaptureBuffer, 0, voiceStoreBuffer, 0, count);
+					voiceOutputStream.write(voiceCaptureBuffer, 0, count);
+				}
+
 			}
 		} catch (Exception e) {
-			System.err.println("I/O problems: " + e);
+			e.printStackTrace();
 		}
 	}
 
@@ -282,9 +311,21 @@
 	public void stopCaptureSound() {
 		try {
 			if (runningCapture) {
+
 				// Stop control
 				runningCapture = false;
 				mainThreadCapture = null;
+				
+//				Display.getCurrent().asyncExec(new Runnable(){
+//					public void run() {
+//						try {
+							AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(voiceOutputStream.toByteArray()), getFormat(),
+									voiceOutputStream.size()), voiceTargetType, saveFH);
+//						} catch (IOException e) {
+//							e.printStackTrace();
+//						}
+//					}
+//				});
 
 				// Stop&Close InputStream for Save file mode
 				if (voiceInputStream != null) {
@@ -295,9 +336,10 @@
 					voiceLine.stop();
 					voiceLine.close();
 				}
+
 			}
 		} catch (Exception e) {
-			System.out.println("stopSoundMixer() : " + e);
+			e.printStackTrace();
 		}
 	}
 
@@ -350,14 +392,12 @@
 			// check current process mode
 			if (ownProcMode == SM_PMODE_CAPTURE) {
 				// Exchange data type from byte[] to integer
-				rawData = ((int) voiceStoreBuffer[1] << 8)
-						+ (int) voiceStoreBuffer[0];
+				rawData = ((int) voiceStoreBuffer[1] << 8) + (int) voiceStoreBuffer[0];
 				if (rawData < 0)
 					rawData = -1 * rawData;
 
 				// Clear current stored buffer
-				System.arraycopy(voiceClearData, 0, voiceStoreBuffer, 0,
-						voiceClearData.length);
+				System.arraycopy(voiceClearData, 0, voiceStoreBuffer, 0, voiceClearData.length);
 			}
 		}
 
@@ -376,8 +416,7 @@
 		boolean bigEndian = false;
 
 		// return format type(WAV)
-		return (new AudioFormat(encoding, sampleRate, sampleSizeInBits,
-				channels, frameSize, frameRate, bigEndian));
+		return (new AudioFormat(encoding, sampleRate, sampleSizeInBits, channels, frameSize, frameRate, bigEndian));
 	}
 
 	/*******************************************************************
@@ -394,17 +433,14 @@
 		public void run() {
 			try {
 				int size = 0;
-				float frameRate = audioInputStreamWavPlayer.getFormat()
-						.getFrameRate();
-				int frameSize = audioInputStreamWavPlayer.getFormat()
-						.getFrameSize();
+				float frameRate = audioInputStreamWavPlayer.getFormat().getFrameRate();
+				int frameSize = audioInputStreamWavPlayer.getFormat().getFrameSize();
 				byte[] inStream = new byte[(int) (frameRate * frameSize)];
 
 				// Play sound stream
 				while (runningPlayer) {
 					// Read WAV data from input stream
-					size = audioInputStreamWavPlayer.read(inStream, 0,
-							inStream.length);
+					size = audioInputStreamWavPlayer.read(inStream, 0, inStream.length);
 					if (size >= 0) {
 						// put WAV data to source line
 						lineWavPlayer.write(inStream, 0, size);
@@ -434,8 +470,7 @@
 	 * @param newSampleRate
 	 * @return New AudioFormat
 	 */
-	private AudioFormat adjustSampleRateWav(AudioFormat orgForm,
-			float newSampleRate) {
+	private AudioFormat adjustSampleRateWav(AudioFormat orgForm, float newSampleRate) {
 		// MakeUP new sampling rate
 		float sampleRate = newSampleRate;
 
@@ -448,8 +483,7 @@
 		boolean bigEndian = orgForm.isBigEndian();
 
 		// return format type(WAV)
-		return (new AudioFormat(encoding, sampleRate, sampleSizeInBits,
-				channels, frameSize, frameRate, bigEndian));
+		return (new AudioFormat(encoding, sampleRate, sampleSizeInBits, channels, frameSize, frameRate, bigEndian));
 	}
 
 	/**
@@ -469,8 +503,7 @@
 				// Open WAV file
 				File soundFile = new File(uriWavFileName);
 				// Create Input stream
-				audioInputStreamWavPlayer = AudioSystem
-						.getAudioInputStream(soundFile);
+				audioInputStreamWavPlayer = AudioSystem.getAudioInputStream(soundFile);
 				// Get audio format from current input stream
 				AudioFormat audioFormat = audioInputStreamWavPlayer.getFormat();
 
@@ -480,8 +513,7 @@
 				audioFormat = adjustSampleRateWav(audioFormat, samplerate);
 
 				// Get data line from current input stream
-				DataLine.Info info = new DataLine.Info(SourceDataLine.class,
-						audioFormat);
+				DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
 				// Get source line from current data line
 				lineWavPlayer = (SourceDataLine) AudioSystem.getLine(info);
 				// Open source line
@@ -553,17 +585,12 @@
 		String strEndian = "Endian : ";
 
 		// Cat string for WAV header information
-		strWavInfo = strFileName + wfname + strSeparator + strFormatID
-				+ currentWavFormatID + strSeparator + strSampRate
-				+ Integer.toString((int) currentWavSampRate) + " Hz"
-				+ strSeparator + strSampBit
-				+ Integer.toString(currentWavSampBit) + " bit" + strSeparator
-				+ strChNum + ((currentWavCh == 2) ? "Stereo" : "Mono")
-				+ strSeparator + strFrameRate
-				+ Integer.toString((int) currentWavFrameRate) + " bytes/frame"
-				+ strSeparator + strEndian
-				+ (currentWavBigEndian ? "Big Endian" : "Littele Endian")
-				+ strSeparator;
+		strWavInfo = strFileName + wfname + strSeparator + strFormatID + currentWavFormatID + strSeparator + strSampRate
+				+ Integer.toString((int) currentWavSampRate) + " Hz" + strSeparator + strSampBit
+				+ Integer.toString(currentWavSampBit) + " bit" + strSeparator + strChNum
+				+ ((currentWavCh == 2) ? "Stereo" : "Mono") + strSeparator + strFrameRate
+				+ Integer.toString((int) currentWavFrameRate) + " bytes/frame" + strSeparator + strEndian
+				+ (currentWavBigEndian ? "Big Endian" : "Littele Endian") + strSeparator;
 
 		// return result
 		return (strWavInfo);
@@ -605,7 +632,8 @@
 			// Calculate total data length of current WAV file
 			currentWavDataLength = (int) (aff.getFrameLength() * currentWavFrameSize);
 			// Calculate duration time of current WAV file
-			currentWavDurationTime = (int) (((float) currentWavDataLength / (float) currentWavBytePerSec) * (float) MSEC);
+			currentWavDurationTime = (int) (((float) currentWavDataLength / (float) currentWavBytePerSec)
+					* (float) MSEC);
 		}
 	}
 
diff --git a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/TTMLUtil.java b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/TTMLUtil.java
index eaea3b8..86a021c 100644
--- a/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/TTMLUtil.java
+++ b/plugins/org.eclipse.actf.examples.scripteditor/src/org/eclipse/actf/ai/scripteditor/util/TTMLUtil.java
@@ -17,15 +17,16 @@
 import java.io.PrintWriter;
 import java.util.List;
 
+import org.eclipse.actf.ai.internal.ui.scripteditor.event.TimerEvent;
 import org.eclipse.actf.ai.scripteditor.data.IScriptData;
 import org.eclipse.actf.ai.scripteditor.data.ScriptDataManager;
 import org.eclipse.actf.util.FileUtils;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
 
 public class TTMLUtil {
 
-	private static ScriptDataManager scriptDataMgr = ScriptDataManager
-			.getInstance();
+	private static ScriptDataManager scriptDataMgr = ScriptDataManager.getInstance();
 
 	/**
 	 * Export AudioDescription data in TTML format
@@ -38,68 +39,55 @@
 	 * Export AudioDescription data in TTML format and pre-recorded
 	 * AudioDescription(AD) WAV files
 	 */
-	public static void exportTTMLandWAV(String ttmlPathname,
-			String adWavDirpath, String adWavFilename, String adUrlBase,
-			boolean warnOverwrite) {
-		exportTTML(ttmlPathname, true, adWavDirpath, adWavFilename, adUrlBase,
-				warnOverwrite);
+	public static void exportTTMLandWAV(String ttmlPathname, String adWavDirpath, String adWavFilename,
+			String adUrlBase, boolean warnOverwrite) {
+		exportTTML(ttmlPathname, true, adWavDirpath, adWavFilename, adUrlBase, warnOverwrite);
 	}
 
 	/**
 	 * Export AudioDescription data in TTML format and pre-recorded
 	 * AudioDescription(AD) WAV files
 	 */
-	private static void exportTTML(String ttmlPathname, boolean isPrerecorded,
-			String adWavDirpath, String adWavFilename, String adUrlBase,
-			boolean warnOverwrite) {
+	private static void exportTTML(String ttmlPathname, boolean isPrerecorded, String adWavDirpath,
+			String adWavFilename, String adUrlBase, boolean warnOverwrite) {
 		PrintWriter writer = null;
 
-		VoicePlayerFactory voice = VoicePlayerFactory.getInstance();
+		final VoicePlayerFactory voice = VoicePlayerFactory.getInstance();
 
 		try {
 			File file = new File(ttmlPathname);
 
 			if (warnOverwrite && file.exists()) {
-				XMLFileMessageBox warningExistFile = new XMLFileMessageBox(
-						XMLFileMessageBox.MB_STYLE_OVERWR, ttmlPathname);
+				XMLFileMessageBox warningExistFile = new XMLFileMessageBox(XMLFileMessageBox.MB_STYLE_OVERWR,
+						ttmlPathname);
 				int ret = warningExistFile.open();
 				if (ret != SWT.YES)
 					return;
 			}
 
-			writer = new PrintWriter(new OutputStreamWriter(
-					new FileOutputStream(ttmlPathname), "UTF-8"));
+			writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(ttmlPathname), "UTF-8"));
 
 			String LINE_SEP = FileUtils.LINE_SEP;
 
 			writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
 			writer.println("<?xml-stylesheet href=\"ttml.css\" type=\"text/css\"?>");
 			writer.println("<?access-control allow=\"*\"?>");
-			writer.println("<tt ttp:profile='http://www.w3.org/ns/ttml/profile/dfxp-full'"
-					+ LINE_SEP
-					+ "    xmlns='http://www.w3.org/ns/ttml'"
-					+ LINE_SEP
-					+ "    xmlns:ttm='http://www.w3.org/ns/ttml#metadata'"
-					+ LINE_SEP
-					+ "    xmlns:tts='http://www.w3.org/ns/ttml#styling'"
-					+ LINE_SEP
-					+ "    xmlns:ttp='http://www.w3.org/ns/ttml#parameter'"
-					+ LINE_SEP
+			writer.println("<tt ttp:profile='http://www.w3.org/ns/ttml/profile/dfxp-full'" + LINE_SEP
+					+ "    xmlns='http://www.w3.org/ns/ttml'" + LINE_SEP
+					+ "    xmlns:ttm='http://www.w3.org/ns/ttml#metadata'" + LINE_SEP
+					+ "    xmlns:tts='http://www.w3.org/ns/ttml#styling'" + LINE_SEP
+					+ "    xmlns:ttp='http://www.w3.org/ns/ttml#parameter'" + LINE_SEP
 					+ "    xmlns:tvd='http://www.eclipse.org/actf/ai/tvd'>");
 			writer.println(" <head>");
 			writer.println("  <metadata>");
 			writer.println("   <ttm:title>TextTrack (Audio Description)</ttm:title>");// TODO
 			writer.println("  </metadata>");
 
-			writer.println("  <styling>" + LINE_SEP
-					+ "   <style xml:id=\"style1\"/>" + LINE_SEP
-					+ "  </styling>" + LINE_SEP + "  <layout>" + LINE_SEP
-					+ "   <region xml:id=\"region1\" style=\"style1\"/>"
-					+ LINE_SEP + "  </layout>" + LINE_SEP
-					+
+			writer.println("  <styling>" + LINE_SEP + "   <style xml:id=\"style1\"/>" + LINE_SEP + "  </styling>"
+					+ LINE_SEP + "  <layout>" + LINE_SEP + "   <region xml:id=\"region1\" style=\"style1\"/>" + LINE_SEP
+					+ "  </layout>" + LINE_SEP +
 					//
-					" </head>" + LINE_SEP + " <body>" + LINE_SEP
-					+ "  <div role=\"narration\" region=\"region1\">");
+					" </head>" + LINE_SEP + " <body>" + LINE_SEP + "  <div role=\"narration\" region=\"region1\">");
 
 			if (isPrerecorded) {
 				File readmeFile = new File(adWavDirpath + "1st_Readme.txt");
@@ -112,8 +100,7 @@
 						pw.println(" m4a: for IE9 or later, Safari");
 						pw.println();
 						pw.println("After converting files, please deploy these files to your Web server,");
-						pw.println("and adjust URLs of \"tvd:external\" attribute in "
-								+ file.getName());
+						pw.println("and adjust URLs of \"tvd:external\" attribute in " + file.getName());
 						pw.flush();
 						pw.close();
 					} else {
@@ -124,8 +111,7 @@
 						pw.println(" m4a: for IE9 or later, Safari");
 						pw.println();
 						pw.println("After preparing files, please deploy these files to your Web server,");
-						pw.println("and adjust URLs of \"tvd:external\" attribute in "
-								+ file.getName());
+						pw.println("and adjust URLs of \"tvd:external\" attribute in " + file.getName());
 						pw.flush();
 						pw.close();
 					}
@@ -142,37 +128,30 @@
 				}
 				int startTime = scriptData.getStartTime();
 				int frame = (startTime % 1000) / (1000 / 30);
-				String frameS = (frame > 9) ? Integer.toString(frame) : "0"
-						+ frame;
+				String frameS = (frame > 9) ? Integer.toString(frame) : "0" + frame;
 
-				String strStartTime = TimeFormatUtil
-						.makeFormatHHMMSS_short(startTime / 1000) + ":" + frameS;
+				String strStartTime = TimeFormatUtil.makeFormatHHMMSS_short(startTime / 1000) + ":" + frameS;
 				int endTime = scriptData.getEndTime();
 
 				int duration = endTime - startTime;
 				frame = (endTime % 1000) / (1000 / 30);
 				frameS = (frame > 9) ? Integer.toString(frame) : "0" + frame;
 
-				String StrEndTime = TimeFormatUtil
-						.makeFormatHHMMSS_short(endTime / 1000) + ":" + frameS;
+				String StrEndTime = TimeFormatUtil.makeFormatHHMMSS_short(endTime / 1000) + ":" + frameS;
 
 				frame = (duration % 1000) / (1000 / 30);
 				frameS = (frame > 9) ? Integer.toString(frame) : "0" + frame;
 
-				String strDuration = TimeFormatUtil
-						.makeFormatHHMMSS_short(duration / 1000) + ":" + frameS;
+				String strDuration = TimeFormatUtil.makeFormatHHMMSS_short(duration / 1000) + ":" + frameS;
 
 				String strDesc = scriptData.getDescription();
 
 				// TODO diff duration with next item
-				writer.print("    <p xml:id=\"description" + i + "\" begin=\""
-						+ strStartTime);
+				writer.print("    <p xml:id=\"description" + i + "\" begin=\"" + strStartTime);
 				if (scriptData.isExtended()) {
-					writer.print("\" tvd:extended=\"true\" dur=\""
-							+ strDuration + "\"");
+					writer.print("\" tvd:extended=\"true\" dur=\"" + strDuration + "\"");
 				} else {
-					writer.print("\" tvd:extended=\"false\" end=\""
-							+ StrEndTime + "\"");
+					writer.print("\" tvd:extended=\"false\" end=\"" + StrEndTime + "\"");
 				}
 
 				if (isPrerecorded) {
@@ -190,29 +169,48 @@
 						ad_file = adWavFilename + number;
 					}
 					if (adUrlBase == null || adUrlBase.isEmpty()) {
-						writer.print(" tvd:external=\"file://" + adWavDirpath
-								+ ad_file + ".*\"");
+						writer.print(" tvd:external=\"file://" + adWavDirpath + ad_file + ".*\"");
 					} else {
-						writer.print(" tvd:external=\"" + adUrlBase + ad_file
-								+ ".*\"");
+						writer.print(" tvd:external=\"" + adUrlBase + ad_file + ".*\"");
 					}
 					if (voice.canSpeakToFile()) {
-						String strGender = scriptData.getVgGender() ? "male"
-								: "female";
+						String strGender = scriptData.getVgGender() ? "male" : "female";
 						voice.setGender(strGender);
 
 						// TODO need convert
 						voice.setSpeed(scriptData.getVgPlaySpeed());
-						voice.speakToFile(strDesc, new File(adWavDirpath
-								+ ad_file + ".wav"));
+						voice.speakToFile(strDesc, new File(adWavDirpath + ad_file + ".wav"));
+					} else { // Temporally implementation
+						final IScriptData target = scriptData;
+						System.out.println("bbb: " + voice.getPlayVoiceStatus());
+						if (!voice.getPlayVoiceStatus()) {
+							final SoundMixer mixer = SoundMixer.getInstance();
+							mixer.startCaptureSound(SoundMixer.SM_PMODE_FSAVE);
+							voice.speak(target);
+							voice.setPlayVoiceStatus(1);
+
+							Runnable finishCheck = new Runnable(){
+								public void run(){
+									System.out.println("aaa:" + voice.getPlayVoiceStatus());
+									if(voice.getPlayVoiceStatus()){
+										Display display = Display.getCurrent();
+										if(!display.isDisposed()){
+											display.timerExec(100, this);
+										}
+									}else{
+										mixer.stopCaptureSound();
+									}									
+								}
+							};
+							Display.getCurrent().timerExec(100, finishCheck);							
+						}
 					}
 				}
 				writer.println(">" + canonicalize(strDesc) + "</p>");
 				i++;
 			}
 
-			writer.println("  </div>" + LINE_SEP + " </body>" + LINE_SEP
-					+ "</tt>");
+			writer.println("  </div>" + LINE_SEP + " </body>" + LINE_SEP + "</tt>");
 
 		} catch (IOException e) {
 			e.printStackTrace();
@@ -228,9 +226,8 @@
 	}
 
 	private static String canonicalize(String targetS) {
-		return (targetS.replaceAll("\\p{Cntrl}", "").replaceAll("&", "&amp;")
-				.replaceAll("<", "&lt;").replaceAll(">", "&gt;")
-				.replaceAll("\"", "&quot;").replaceAll("\'", "&apos;"));
+		return (targetS.replaceAll("\\p{Cntrl}", "").replaceAll("&", "&amp;").replaceAll("<", "&lt;")
+				.replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("\'", "&apos;"));
 	}
 
 }
diff --git a/plugins/org.eclipse.actf.examples.simplevisualizer/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.simplevisualizer/META-INF/MANIFEST.MF
index 2230187..d9e2ac9 100644
--- a/plugins/org.eclipse.actf.examples.simplevisualizer/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.simplevisualizer/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example Simple Visualizer
 Bundle-SymbolicName: org.eclipse.actf.examples.simplevisualizer;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Activator: org.eclipse.actf.examples.simplevisualizer.SimpleVisualizerPlugin
 Bundle-Vendor: Eclipse ACTF Project
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.actf.examples.simplevisualizer/plugin.properties b/plugins/org.eclipse.actf.examples.simplevisualizer/plugin.properties
index 201adb2..0cbd0a1 100644
--- a/plugins/org.eclipse.actf.examples.simplevisualizer/plugin.properties
+++ b/plugins/org.eclipse.actf.examples.simplevisualizer/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2015 IBM Corporation and others.
+# Copyright (c) 2007, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -21,4 +21,4 @@
 
 simplevizualizer.HTMLPerspective.name=Web Perspective
 
-About.Text=Eclipse ACTF Simple Vizualizer\nVersion: 1.4.0\n\nCopyright 2007, 2015 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
+About.Text=Eclipse ACTF Simple Vizualizer\nVersion: 1.5.0\n\nCopyright 2007, 2017 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.examples.simplevisualizer/simplevisualizer.product b/plugins/org.eclipse.actf.examples.simplevisualizer/simplevisualizer.product
index 40faaff..4b873fe 100644
--- a/plugins/org.eclipse.actf.examples.simplevisualizer/simplevisualizer.product
+++ b/plugins/org.eclipse.actf.examples.simplevisualizer/simplevisualizer.product
@@ -37,7 +37,7 @@
    </plugins>
 
    <features>
-      <feature id="org.eclipse.actf.examples.simplevisualizer" version="1.4.0.qualifier"/>
+      <feature id="org.eclipse.actf.examples.simplevisualizer" version="1.5.0.qualifier"/>
    </features>
 
    <configurations>
diff --git a/plugins/org.eclipse.actf.examples.vicram/META-INF/MANIFEST.MF b/plugins/org.eclipse.actf.examples.vicram/META-INF/MANIFEST.MF
index fd2ea16..8ab7ffc 100644
--- a/plugins/org.eclipse.actf.examples.vicram/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.actf.examples.vicram/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: ACTF Example ViCRAM
 Bundle-SymbolicName: org.eclipse.actf.examples.vicram;singleton:=true
-Bundle-Version: 1.4.0.qualifier
+Bundle-Version: 1.5.0.qualifier
 Bundle-Activator: org.eclipse.actf.examples.vicram.VicramPlugin
 Bundle-Vendor: Eclipse ACTF Project
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.actf.examples.vicram/plugin.properties b/plugins/org.eclipse.actf.examples.vicram/plugin.properties
index dc78528..8cc19f9 100644
--- a/plugins/org.eclipse.actf.examples.vicram/plugin.properties
+++ b/plugins/org.eclipse.actf.examples.vicram/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007, 2015 IBM Corporation and others.
+# Copyright (c) 2007, 2017 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -19,4 +19,4 @@
 vicram.menu.window = &Window
 vicram.menu.navigation = Navi&gation
 
-About.Text=Eclipse ACTF ViCRAM\nVersion: 1.4.0\n\nCopyright 2007, 2015 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
+About.Text=Eclipse ACTF ViCRAM\nVersion: 1.5.0\n\nCopyright 2007, 2017 Eclipse contributors and others.  All rights reserved.\nVisit http://www.eclipse.org/actf/\n\nThis product includes software developed by the\nApache Software Foundation http://www.apache.org/
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.examples.vicram/vicram.product b/plugins/org.eclipse.actf.examples.vicram/vicram.product
index 064bfeb..286e07a 100644
--- a/plugins/org.eclipse.actf.examples.vicram/vicram.product
+++ b/plugins/org.eclipse.actf.examples.vicram/vicram.product
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?pde version="3.5"?>
 
-<product name="Visual Complexity Rankings and Accessibility Metrics (ViCRAM)" uid="ACTF Visual Complexity Rankings and Accessibility Metrics" id="org.eclipse.actf.examples.vicram.ViCRAM" application="org.eclipse.actf.examples.vicram.VicramApplication" version="1.4.0.qualifier" useFeatures="true" includeLaunchers="true">
+<product name="Visual Complexity Rankings and Accessibility Metrics (ViCRAM)" uid="ACTF Visual Complexity Rankings and Accessibility Metrics" id="org.eclipse.actf.examples.vicram.ViCRAM" application="org.eclipse.actf.examples.vicram.VicramApplication" version="1.5.0.qualifier" useFeatures="true" includeLaunchers="true">
 
    <aboutInfo>
       <image path="/org.eclipse.actf.examples.vicram/about.gif"/>
@@ -37,7 +37,7 @@
    </plugins>
 
    <features>
-      <feature id="org.eclipse.actf.examples.vicram" version="1.4.0.qualifier"/>
+      <feature id="org.eclipse.actf.examples.vicram" version="1.5.0.qualifier"/>
    </features>
 
    <configurations>
