diff --git a/plugins/org.eclipse.actf.ai.tts.sapi/src/messages.properties b/plugins/org.eclipse.actf.ai.tts.sapi/src/messages.properties
index 90f7462..cf9256d 100644
--- a/plugins/org.eclipse.actf.ai.tts.sapi/src/messages.properties
+++ b/plugins/org.eclipse.actf.ai.tts.sapi/src/messages.properties
@@ -8,8 +8,8 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-tts.sapi.description=SAPI 5 TTS Settings
-tts.sapi.voicename=&Voice name:
-tts.sapi.audiooutput=&Audio Output Device:
-tts.sapi.notAvailable=SAPI 5 TTS is not Available
-tts.sapi.test=&Test
\ No newline at end of file
+tts_sapi_description=SAPI 5 TTS Settings
+tts_sapi_voicename=&Voice name:
+tts_sapi_audiooutput=&Audio Output Device:
+tts_sapi_notAvailable=SAPI 5 TTS is not Available
+tts_sapi_test=&Test
diff --git a/plugins/org.eclipse.actf.ai.tts.sapi/src/messages_ja.properties b/plugins/org.eclipse.actf.ai.tts.sapi/src/messages_ja.properties
index 6fc8595..e2558f5 100644
--- a/plugins/org.eclipse.actf.ai.tts.sapi/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.ai.tts.sapi/src/messages_ja.properties
@@ -8,8 +8,8 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-tts.sapi.description=SAPI 5 TTS\u8a2d\u5b9a
-tts.sapi.voicename=\u97f3\u58f0(&V):
-tts.sapi.audiooutput=\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u30c7\u30d0\u30a4\u30b9(&A):
-tts.sapi.notAvailable=SAPI 5 TTS \u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
-tts.sapi.test=\u30c6\u30b9\u30c8(&T)
\ No newline at end of file
+tts_sapi_description=SAPI 5 TTS\u8a2d\u5b9a
+tts_sapi_voicename=\u97f3\u58f0(&V):
+tts_sapi_audiooutput=\u30aa\u30fc\u30c7\u30a3\u30aa\u518d\u751f\u30c7\u30d0\u30a4\u30b9(&A):
+tts_sapi_notAvailable=SAPI 5 TTS \u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
+tts_sapi_test=\u30c6\u30b9\u30c8(&T)
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/Messages.java b/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/Messages.java
index 82723f5..a52ce6a 100644
--- a/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/Messages.java
+++ b/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/Messages.java
@@ -8,34 +8,25 @@
  * Contributors:
  *    Takashi ITOH - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.actf.ai.tts.sapi;
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
+import org.eclipse.osgi.util.NLS;
 
-/**
- * This provides the resource string.
- */
-public class Messages {
-	private static final String BUNDLE_NAME = "messages"; //$NON-NLS-1$
+public final class Messages extends NLS {
 
-	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
-			.getBundle(BUNDLE_NAME);
+	private static final String BUNDLE_NAME = "messages";//$NON-NLS-1$
 
 	private Messages() {
+		// Do not instantiate
 	}
 
-	/**
-	 * @param key
-	 *            the name of the resource string.
-	 * @return the string specified the key.
-	 */
-	public static String getString(String key) {
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
+	public static String tts_sapi_description;
+	public static String tts_sapi_voicename;
+	public static String tts_sapi_audiooutput;
+	public static String tts_sapi_notAvailable;
+	public static String tts_sapi_test;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/preferences/SapiPreferencePage.java b/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/preferences/SapiPreferencePage.java
index 148d5b8..fce14e1 100644
--- a/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/preferences/SapiPreferencePage.java
+++ b/plugins/org.eclipse.actf.ai.tts.sapi/src/org/eclipse/actf/ai/tts/sapi/preferences/SapiPreferencePage.java
@@ -35,13 +35,13 @@
 
 	public SapiPreferencePage() {
 		super();
-		setDescription(Messages.getString("tts.sapi.description")); //$NON-NLS-1$
+		setDescription(Messages.tts_sapi_description); 
 		setPreferenceStore(SAPIPlugin.getDefault().getPreferenceStore());
 	}
 
 	public void createFieldEditors() {
 		if (!TTSRegistry.isAvailable(SapiVoice.ID)) {
-			setMessage(Messages.getString("tts.sapi.notAvailable"));
+			setMessage(Messages.tts_sapi_notAvailable);
 			return;
 		}
 
@@ -49,10 +49,8 @@
 		orgAudio = getPreferenceStore().getString(SapiVoice.AUDIO_OUTPUT);
 
 		final ComboFieldEditor voiceEditor, audioEditor;
-		addField(voiceEditor = new SapiVoiceFieldEditor(Messages
-				.getString("tts.sapi.voicename"), getFieldEditorParent())); //$NON-NLS-1$
-		addField(audioEditor = new SapiAudioOutputFieldEditor(Messages
-				.getString("tts.sapi.audiooutput"), getFieldEditorParent())); //$NON-NLS-1$
+		addField(voiceEditor = new SapiVoiceFieldEditor(Messages.tts_sapi_voicename, getFieldEditorParent())); //$NON-NLS-1$
+		addField(audioEditor = new SapiAudioOutputFieldEditor(Messages.tts_sapi_audiooutput, getFieldEditorParent())); //$NON-NLS-1$
 
 		Composite comp = new Composite(getFieldEditorParent(), SWT.NONE);
 		GridLayout layout = new GridLayout();
@@ -63,7 +61,7 @@
 		comp.setLayoutData(gd);
 
 		Button testButton = new Button(comp, SWT.NONE);
-		testButton.setText(Messages.getString("tts.sapi.test"));
+		testButton.setText(Messages.tts_sapi_test);
 		testButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				SapiTestManager.getInstance().speakTest();
diff --git a/plugins/org.eclipse.actf.ai.voice/src/messages.properties b/plugins/org.eclipse.actf.ai.voice/src/messages.properties
index f78ffb2..ac9a91e 100644
--- a/plugins/org.eclipse.actf.ai.voice/src/messages.properties
+++ b/plugins/org.eclipse.actf.ai.voice/src/messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2007 IBM Corporation and others.
+# Copyright (c) 2007, 2008 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
@@ -8,7 +8,7 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-voice.description=Voice preferences
-voice.engine=TTS &engine
-voice.speed=&Speed:
-voice.test=&Test
+voice_description=Voice preferences
+voice_engine=TTS &engine
+voice_speed=&Speed:
+voice_test=&Test
diff --git a/plugins/org.eclipse.actf.ai.voice/src/messages_ja.properties b/plugins/org.eclipse.actf.ai.voice/src/messages_ja.properties
index 4b9afb7..2cc82db 100644
--- a/plugins/org.eclipse.actf.ai.voice/src/messages_ja.properties
+++ b/plugins/org.eclipse.actf.ai.voice/src/messages_ja.properties
@@ -1,4 +1,14 @@
-voice.description=\u97f3\u58f0\u8a2d\u5b9a
-voice.engine=TTS\u30a8\u30f3\u30b8\u30f3(&E)
-voice.speed=\u901f\u5ea6(&S):
-voice.test=\u30c6\u30b9\u30c8(&T)
+###############################################################################
+# Copyright (c) 2007, 2008 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
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+voice_description=\u97f3\u58f0\u8a2d\u5b9a
+voice_engine=TTS\u30a8\u30f3\u30b8\u30f3(&E)
+voice_speed=\u901f\u5ea6(&S):
+voice_test=\u30c6\u30b9\u30c8(&T)
diff --git a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/internal/Messages.java b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/internal/Messages.java
index f3bc8e9..5ed30b4 100644
--- a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/internal/Messages.java
+++ b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/internal/Messages.java
@@ -8,35 +8,24 @@
  * Contributors:
  *    Takashi ITOH - initial API and implementation
  *******************************************************************************/
-
 package org.eclipse.actf.ai.voice.internal;
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
+import org.eclipse.osgi.util.NLS;
 
-/**
- * This provides the resource string.
- */
-public class Messages {
-	private static final String BUNDLE_NAME = "messages"; //$NON-NLS-1$
+public final class Messages extends NLS {
 
-	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
-			.getBundle(BUNDLE_NAME);
+	private static final String BUNDLE_NAME = "messages";//$NON-NLS-1$
 
 	private Messages() {
+		// Do not instantiate
 	}
 
-	/**
-	 * @param key
-	 *            the name of the resource string.
-	 * @return the string specified the key.
-	 */
-	public static String getString(String key) {
-		// TODO Auto-generated method stub
-		try {
-			return RESOURCE_BUNDLE.getString(key);
-		} catch (MissingResourceException e) {
-			return '!' + key + '!';
-		}
+	public static String voice_description;
+	public static String voice_engine;
+	public static String voice_speed;
+	public static String voice_test;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/VoicePreferencePage.java b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/VoicePreferencePage.java
index 644a5cb..6dfe9ff 100644
--- a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/VoicePreferencePage.java
+++ b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/VoicePreferencePage.java
@@ -40,15 +40,14 @@
 	public VoicePreferencePage() {
 		super();
 		setPreferenceStore(VoicePlugin.getDefault().getPreferenceStore());
-		setDescription(Messages.getString("voice.description")); //$NON-NLS-1$
+		setDescription(Messages.voice_description); 
 	}
 
 	public void createFieldEditors() {
 		
 		final RadioGroupFieldEditor rgfe;
 		String[][] labelAndIds = TTSRegistry.getLabelAndIds();
-		addField(rgfe = new RadioGroupFieldEditor(IVoice.PREF_ENGINE, Messages
-				.getString("voice.engine"), 1, labelAndIds, //$NON-NLS-1$
+		addField(rgfe = new RadioGroupFieldEditor(IVoice.PREF_ENGINE, Messages.voice_engine, 1, labelAndIds, //$NON-NLS-1$
 				getFieldEditorParent()));
 		Composite c = rgfe.getRadioBoxControl(getFieldEditorParent());
 		for (int i = 0; i < labelAndIds.length; i++) {
@@ -59,7 +58,7 @@
 
 		final ScaleFieldEditor speedEditor;
 		addField(speedEditor = new ScaleFieldEditor(IVoice.PREF_SPEED,
-				Messages.getString("voice.speed"), //$NON-NLS-1$
+				Messages.voice_speed, 
 				getFieldEditorParent(), IVoice.SPEED_MIN, IVoice.SPEED_MAX, 5,
 				25));
 
@@ -72,7 +71,7 @@
 		comp.setLayoutData(gd);
 
 		Button testButton = new Button(comp, SWT.NONE);
-		testButton.setText(Messages.getString("voice.test"));
+		testButton.setText(Messages.voice_test);
 		testButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 
diff --git a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/util/ComboButtonFieldEditor.java b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/util/ComboButtonFieldEditor.java
index 0e57ca5..958bb67 100644
--- a/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/util/ComboButtonFieldEditor.java
+++ b/plugins/org.eclipse.actf.ai.voice/src/org/eclipse/actf/ai/voice/preferences/util/ComboButtonFieldEditor.java
@@ -67,7 +67,7 @@
 		if (testButton == null) {
 			testButton = new Button(parent, SWT.PUSH);
 			if (testButtonText == null)
-				testButtonText = Messages.getString("voice.test"); //$NON-NLS-1$
+				testButtonText = Messages.voice_test; 
 			testButton.setText(testButtonText);
 			testButton.setFont(parent.getFont());
 			testButton.addSelectionListener(new SelectionAdapter() {
