diff --git a/tmgmt_microsoft.module b/tmgmt_microsoft.module
index 4bf6646..d625ab8 100644
--- a/tmgmt_microsoft.module
+++ b/tmgmt_microsoft.module
@@ -24,3 +24,23 @@ function tmgmt_microsoft_tmgmt_translator_plugin_info() {
   );
 }
 
+/**
+ * Validation callback for the plugin settings form.
+ */
+function tmgmt_microsoft_plugin_settings_form_validate($element, &$form_state, $form) {
+  $settings = $form_state['values']['settings'];
+  if (empty($settings['clientid']) || empty($settings['clientsecret'])) {
+    form_error($element, t('You have to enter "Client ID" and "Client secret".'));
+    return;
+  }
+
+  /** @var TMGMTTranslator $translator */
+  $translator = $form_state['tmgmt_translator'];
+  // Update translator settings with form data.
+  $translator->settings = $settings;
+  /** @var TMGMTMicrosoftTranslatorPluginController $controller */
+  $controller = $translator->getController();
+  if (!$controller->getSupportedRemoteLanguages($translator)) {
+    form_error($element, t('The "Client ID" or "Client secret" is not valid.'));
+  }
+}
diff --git a/tmgmt_microsoft.test b/tmgmt_microsoft.test
index 4c97bb5..43e21ed 100644
--- a/tmgmt_microsoft.test
+++ b/tmgmt_microsoft.test
@@ -25,19 +25,14 @@ class TMGMTMicrosoftTestCase extends TMGMTBaseTestCase {
    * Overrides SimplenewsTestCase::setUp()
    */
   function setUp() {
-    parent::setUp(array('tmgmt_microsoft', 'tmgmt_microsoft_test'));
+    parent::setUp(array('tmgmt_ui', 'tmgmt_microsoft', 'tmgmt_microsoft_test'));
   }
 
   /**
    * Tests basic API methods of the plugin.
    */
   function testMicrosoft() {
-    $translator = $this->createTranslator();
-    $translator->plugin = 'microsoft';
-    $translator->settings = array(
-      'url' => url('tmgmt_microsoft_mock/v2/Http.svc', array('absolute' => TRUE)),
-    );
-    $translator->save();
+    $translator = $this->getMicrosoftTranslator();
 
     $job = $this->createJob();
     $job->translator = $translator->name;
@@ -96,4 +91,42 @@ class TMGMTMicrosoftTestCase extends TMGMTBaseTestCase {
     $this->assertEqual('de_Hello world', $data['wrapper']['#translation']['#text']);
   }
 
+  /**
+   * Tests Microsoft translator settings form.
+   */
+  function testMicrosoftSettingsForm() {
+    $this->loginAsAdmin();
+    $this->getMicrosoftTranslator();
+    $this->drupalGet('admin/config/regional/tmgmt_translator');
+
+    // Try to submit Translator settings form without setting API keys.
+    $edit = array();
+    $this->drupalPost('admin/config/regional/tmgmt_translator/manage/microsoft', $edit, t('Save translator'));
+    $this->assertText(t('You have to enter "Client ID" and "Client secret".'));
+
+    // Fill "Client ID" and "Client secret" fields with incorrect values.
+    $edit = array(
+      'settings[clientid]' => 'incorrect',
+      'settings[clientsecret]' => 'incorrect',
+    );
+    $this->drupalPost('admin/config/regional/tmgmt_translator/manage/microsoft', $edit, t('Save translator'));
+    $this->assertText(t('The "Client ID" or "Client secret" is not valid.'));
+  }
+
+  /**
+   * Creates and returns Microsoft translator.
+   *
+   * @return TMGMTMicrosoftTranslatorPluginController
+   *   The Microsoft translator plugin.
+   */
+  function getMicrosoftTranslator() {
+    $translator = $this->createTranslator();
+    $translator->plugin = 'microsoft';
+    $translator->settings = array(
+      'url' => url('tmgmt_microsoft_mock/v2/Http.svc', array('absolute' => TRUE)),
+    );
+    $translator->save();
+
+    return $translator;
+  }
 }
diff --git a/tmgmt_microsoft.ui.inc b/tmgmt_microsoft.ui.inc
index 5a9f7b2..bc273a1 100644
--- a/tmgmt_microsoft.ui.inc
+++ b/tmgmt_microsoft.ui.inc
@@ -17,15 +17,16 @@ class TMGMTMicrosoftTranslatorUIController extends TMGMTDefaultTranslatorUIContr
     $generate_url = 'https://datamarket.azure.com/dataset/1899a118-d202-492c-aa16-ba21c33c06cb';
     $form['clientid'] = array(
       '#type' => 'textfield',
-      '#title' => t('Microsoft Customer ID'),
+      '#title' => t('Client ID'),
       '#default_value' => $translator->getSetting('clientid'),
-      '#description' => t('Please enter your Microsoft Customer ID, or follow this <a href="!link">link</a> to generate one.', array('!link' => $generate_url)),
+      '#description' => t('Please enter the Client ID, or follow this <a href="!link">link</a> to set it up.', array('!link' => $generate_url)),
     );
     $form['clientsecret'] = array(
       '#type' => 'textfield',
-      '#title' => t('Primary Account Key'),
+      '#title' => t('Client secret'),
       '#default_value' => $translator->getSetting('clientsecret'),
-      '#description' => t('Please enter your Microsoft Primary Account Key, or follow this <a href="!link">link</a> to generate one.', array('!link' => $generate_url)),
+      '#element_validate' => array('tmgmt_microsoft_plugin_settings_form_validate'),
+      '#description' => t('Please enter the Client secret, or follow this <a href="!link">link</a> to generate one.', array('!link' => $generate_url)),
     );
     $form['api'] = array(
       '#type' => 'textfield',
