diff --git a/README.txt b/README.txt
index 08e25dc..a6542a0 100644
--- a/README.txt
+++ b/README.txt
@@ -20,7 +20,7 @@ Bug reports, feature suggestions and latest developments:
 * Install this module as described at http://drupal.org/node/895232.
 
 * For a Cloud-Hosted Player, visit admin/config/media/jw_player/settings and
-  configure your Cloud-Hosted Account Token.
+  configure your Cloud-Hosted player's URL.
 
 * For a Self-Hosted Player:
 
diff --git a/jw_player.admin.inc b/jw_player.admin.inc
index 52a261e..e65aeb8 100644
--- a/jw_player.admin.inc
+++ b/jw_player.admin.inc
@@ -10,23 +10,57 @@
  */
 function jw_player_settings_form($form) {
   drupal_set_title(t('JW Player general settings'));
-  $url = 'https://account.jwplayer.com/#/account';
-  $form['jw_player_account_token'] = array(
+
+  $versions = variable_get(
+    'jw_player_available_versions',
+    array(5 => 5, 6 => 6, 7 => 7)
+  );
+  $url = 'https://dashboard.jwplayer.com/#/players/downloads';
+
+  $form['jw_player_version'] = array(
+    '#type' => 'select',
+    '#title' => t('Player version'),
+    '#options' => $versions,
+    '#default_value' => variable_get('jw_player_version', 6),
+    '#description' => t('Select the version of JWPlayer you are using.'),
+  );
+
+  $form['jw_player_key'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Self-Hosted Player License Key (version 6.x)'),
+    '#description' => t('Enter your key here. You can retrieve your license key from <a href="@url" target="_blank">your downloads page at jwplayer.com</a>.', array(
+      '@url' => $url,
+    )),
+    '#default_value' => variable_get('jw_player_key', NULL),
+    '#states' => array(
+      'visible' => array(
+        array('select[name="jw_player_version"]' => array('value' => '5')),
+        array('select[name="jw_player_version"]' => array('value' => '6')),
+      ),
+    ),
+  );
+
+  $form['jw_player_key_7'] = array(
     '#type' => 'textfield',
-    '#title' => t('Cloud-Hosted Account Token'),
-    '#description' => t('Set the account token for a Cloud-Hosted Player, or leave empty if using a Self-Hosted Player. You can retrieve your token from <a href="@url">your account settings page at jwplayer.com</a>.', array(
+    '#title' => t('Self-Hosted Player License Key (version 7.x)'),
+    '#description' => t('Enter your key here. You can retrieve your license key from <a href="@url" target="_blank">your downloads page at jwplayer.com</a>.', array(
       '@url' => $url,
     )),
-    '#default_value' => variable_get('jw_player_account_token', NULL),
+    '#default_value' => variable_get('jw_player_key_7', NULL),
+    '#states' => array(
+      'visible' => array(
+        'select[name="jw_player_version"]' => array('value' => '7'),
+      ),
+    ),
   );
 
-  $form['jw_player_key'] = array(
+  $form['jw_player_cloud_player_default'] = array(
     '#type' => 'textfield',
-    '#title' => t('Self-Hosted Player License Key'),
-    '#description' => t('If you have a premium account enter your key here. You can retrieve your license key from <a href="@url">your account settings page at jwplayer.com</a>.', array(
+    '#title' => t('Url of the Default Cloud-Hosted Player'),
+    '#description' => t('You can get the url for your cloud hosted player at <a href="@url" target="_blank">your downloads page at jwplayer.com</a>. After choosing your player, simply copy and enter the whole url from the field "Cloud Player Library Url" here. If you are using the cloud hosted player, the self hosted files will not be loaded.', array(
       '@url' => $url,
     )),
-    '#default_value' => variable_get('jw_player_key', NULL),
+    '#default_value' => variable_get('jw_player_cloud_player_default', NULL),
   );
 
   return system_settings_form($form);
diff --git a/jw_player.install b/jw_player.install
index cbdcae1..636410e 100644
--- a/jw_player.install
+++ b/jw_player.install
@@ -54,14 +54,6 @@ function jw_player_schema() {
 }
 
 /**
- * Set jw player version to 5, display message.
- */
-function jw_player_update_7000() {
-  variable_set('jw_player_version', 5);
-  drupal_set_message(t('JW Player version has been set to 5.'));
-}
-
-/**
  * Implements hook_requirements().
  */
 function jw_player_requirements($phase) {
@@ -77,7 +69,7 @@ function jw_player_requirements($phase) {
 
   // Player could be cloud-hosted so no reason to check in other phases.
   if ($phase === 'runtime') {
-    if ($account_token = variable_get('jw_player_account_token', false)) {
+    if ($account_token = variable_get('jw_player_cloud_player_default', FALSE)) {
       // Cloud-hosted is a priority over self-hosted.
       $requirements['jw_player']['value'] = t('Cloud-Hosted');
     }
@@ -85,7 +77,7 @@ function jw_player_requirements($phase) {
       $info = libraries_detect('jwplayer');
       if ($info['installed']) {
         $value = t('Self-Hosted') . " (v{$info['version']})";
-        if (!($key = variable_get('jw_player_key', NULL))) {
+        if (!($key = jw_player_get_key())) {
           $requirements['jw_player']['severity'] = REQUIREMENT_ERROR;
           $requirements['jw_player']['description'] = t('Please configure your Self-Hosted Player License Key from the <a href="@url">JW Player settings page</a>.', array(
             '@url' => url('admin/config/media/jw_player/settings'),
@@ -103,3 +95,23 @@ function jw_player_requirements($phase) {
 
   return $requirements;
 }
+
+/**
+ * Set jw player version to 5, display message.
+ */
+function jw_player_update_7000() {
+  variable_set('jw_player_version', 5);
+  drupal_set_message(t('JW Player version has been set to 5.'));
+}
+
+/**
+ * Drop out dated integration for cloud hosted players and notify user.
+ */
+function jw_player_update_7001() {
+  if (variable_get('jw_player_account_token', FALSE)) {
+    drupal_set_message(t('JW Player has changed its way to run cloud hosted players. Please update your configuration at /admin/config/media/jw_player/settings if you are using a cloud hosted player.'));
+    variable_del('jw_player_account_token');
+  }
+  variable_set('jw_player_version', 6);
+  drupal_set_message(t('JW Player version has been set to 6.'));
+}
diff --git a/jw_player.module b/jw_player.module
index 5e0ec3e..3b42a22 100644
--- a/jw_player.module
+++ b/jw_player.module
@@ -18,7 +18,7 @@ function jw_player_menu() {
     'access arguments' => array('administer JW Player presets'),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('jw_player_settings_form'),
-    'file' => 'jw_player.admin.inc'
+    'file' => 'jw_player.admin.inc',
   );
 
   return $items;
@@ -365,6 +365,12 @@ function jw_player_default_settings() {
 
 /**
  * Process variables for jw_player.tpl.php.
+ *
+ * @todo this whole function seems obsolete. The config passed to jw player
+ *   should be prepared right where the theme function is called and passed
+ *   down to js using js settings in #attached within the render array. Along
+ *   width that, inline snippets in the template should be replaced by a
+ *   a behavior that initializes the players with the options from js settings.
  */
 function template_preprocess_jw_player(&$variables) {
   //In some instances an object is passed so convert to an array.
@@ -372,7 +378,6 @@ function template_preprocess_jw_player(&$variables) {
     $variables['file'] = (array) $variables['file'];
   }
 
-
   // Load defaults as the starting point.
   $default_settings = jw_player_default_settings();
 
@@ -407,7 +412,6 @@ function template_preprocess_jw_player(&$variables) {
   // variables passed directly to the theme function take priority over both.
   $variables = array_merge($default_settings, $preset_settings, $options, $variables);
 
-
   // The html_id should have been previously set. But we need to make
   // sure we do have one.
   if (!isset($variables['html_id'])) {
@@ -458,39 +462,47 @@ function template_preprocess_jw_player(&$variables) {
     $variables['config']['file'] = file_create_url($variables['file']['uri']);
   }
 
-  // Resolve skin url
-  $skin = !empty($variables['skin']) ? jw_player_skins($variables['skin']) : NULL;
-  $variables['skin'] = !empty($skin_file) ? file_create_url($skin->uri) : $variables['skin'];
-  // Copy player variables into their own array to be set as JavaScript
-  // configuration.
-  // @todo Bad smell here. Refactoring needed.
-  $config_variables = array(
-    'width',
-    'height',
-    'playlist.position',
-    'playlist.size',
-    'skin',
-    'stretching',
-    'aspectratio',
-  );
-  foreach ($config_variables as $key) {
-    if (!empty($variables[$key])) {
-      $variables['config'][$key] = $variables[$key];
-    }
+  if (jw_player_use_legacy()) {
+    // Resolve skin url.
+    $skin = !empty($variables['skin']) ? jw_player_skins($variables['skin']) : NULL;
+    $variables['skin'] = is_string($skin) ? file_create_url($skin->uri) : $variables['skin'];
   }
 
-  if (isset($variables['autostart']) && $variables['autostart']) {
-    $variables['config']['autostart'] = 'true';
-  }
+  // Don't apply preset config in case of cloud hosted players.
+  if (!variable_get('jw_player_cloud_player_default', FALSE)) {
 
-  if (isset($variables['controls']) && !$variables['controls']) {
-    $variables['config']['controls'] = 'false';
-  }
+    // Copy player variables into their own array to be set as JavaScript
+    // configuration.
+    // @todo Bad smell here. Refactoring needed.
+
+    $config_variables = array(
+      'width',
+      'height',
+      'playlist.position',
+      'playlist.size',
+      'skin',
+      'stretching',
+      'aspectratio',
+    );
+    foreach ($config_variables as $key) {
+      if (!empty($variables[$key])) {
+        $variables['config'][$key] = $variables[$key];
+      }
+    }
 
-  // If the preset has the primary mode set, modify the modes array so that it
-  // comes first.
-  if (isset($variables['primary']) && $variables['primary'] == 'flash') {
-    $variables['config']['primary'] = 'flash';
+    if (isset($variables['autostart']) && $variables['autostart']) {
+      $variables['config']['autostart'] = 'true';
+    }
+
+    if (isset($variables['controls']) && !$variables['controls']) {
+      $variables['config']['controls'] = 'false';
+    }
+
+    // If the preset has the primary mode set, modify the modes array so that it
+    // comes first.
+    if (isset($variables['primary']) && $variables['primary'] == 'flash') {
+      $variables['config']['primary'] = 'flash';
+    }
   }
 }
 
@@ -512,11 +524,6 @@ function jw_player_libraries_info() {
       'name' => 'JW Player',
       'vendor url' => 'http://www.jwplayer.com/',
       'download url' => 'http://www.jwplayer.com/download',
-      'version arguments' => array(
-        'file' => 'jwplayer.js',
-        'pattern' => '/jwplayer.version="(.*?)"/',
-        'lines' => 1,
-      ),
       'files' => array(
         'js' => array(
           'jwplayer.js' => array('preprocess' => FALSE)
@@ -532,6 +539,20 @@ function jw_player_libraries_info() {
       ),
     ),
   );
+
+  // Parse version from JS file for older versions.
+  if (jw_player_use_legacy()) {
+    $libraries['jwplayer']['version arguments'] = array(
+      'file' => 'jwplayer.js',
+      'pattern' => '/jwplayer.version="(.*?)"/',
+      'lines' => 1,
+    );
+  }
+  else {
+    // Version of JWPlayer 7 and above can't be parsed the same way anymore.
+    $libraries['jwplayer']['version'] = 7;
+  }
+
   return $libraries;
 }
 
@@ -541,7 +562,7 @@ function jw_player_libraries_info() {
  * @see jw_player_libraries_info().
  */
 function jw_player_libraries_load($library, $version, $variant) {
-  if ($key = variable_get('jw_player_key', NULL)) {
+  if ($key = jw_player_get_key()) {
     drupal_add_js('jwplayer.key=' . drupal_json_encode($key), array(
       'type' => 'inline',
       'scope' => 'header',
@@ -562,7 +583,14 @@ function jw_player_library() {
     'version' => $info['installed'] ? $info['version'] : 'cloud-hosted',
     'js' => array(),
   );
-  if ($info['installed']) {
+
+  if ($cloud_hosted_default = variable_get('jw_player_cloud_player_default', FALSE)) {
+    // Cloud hosted player, use external JavaScript.
+    $libraries['jwplayer']['js'][$cloud_hosted_default] = array(
+      'type' => 'external',
+    );
+  }
+  elseif ($info['installed']) {
     // Self hosted player, use files from library definition.
     if (!empty($info['files']['js'])) {
       foreach ($info['files']['js'] as $data => $option) {
@@ -576,13 +604,8 @@ function jw_player_library() {
       }
     }
   }
-  elseif ($account_token = variable_get('jw_player_account_token', false)) {
-    // Cloud hosted player, use external JavaScript.
-    $libraries['jwplayer']['js']["//jwpsrv.com/library/{$account_token}.js"] = array(
-      'type' => 'external',
-    );
-  }
-  if ($key = variable_get('jw_player_key', NULL)) {
+
+  if ($key = jw_player_get_key()) {
     $libraries['jwplayer']['js']['jwplayer.key=' . drupal_json_encode($key)] = array(
       'type' => 'inline',
       'scope' => 'header',
@@ -707,4 +730,24 @@ function jw_player_supports($file) {
   else {
     return FALSE;
   }
-}
\ No newline at end of file
+}
+
+/**
+ * Checks whether a legacy version is configured.
+ *
+ * @return bool
+ *   TRUE if any version older than 7 is used, FALSE otherwise.
+ */
+function jw_player_use_legacy() {
+  return variable_get('jw_player_version') < 7;
+}
+
+/**
+ * Gets the correct key for the corresponding JW Player version.
+ *
+ * @return string
+ *   The license key as entered in the UI.
+ */
+function jw_player_get_key() {
+  return jw_player_use_legacy() ? variable_get('jw_player_key', NULL) : variable_get('jw_player_key_7', NULL);
+}
diff --git a/plugins/export_ui/jw_player_ctools_export_ui.inc b/plugins/export_ui/jw_player_ctools_export_ui.inc
index a6157d1..2fdfb27 100644
--- a/plugins/export_ui/jw_player_ctools_export_ui.inc
+++ b/plugins/export_ui/jw_player_ctools_export_ui.inc
@@ -78,16 +78,42 @@ function jw_player_ctools_export_ui_form(&$form, &$form_state) {
     '#weight' => 5,
   );
 
-  $form['settings']['primary'] = array(
-    '#type' => 'radios',
-    '#title' => t('Embed mode'),
-    '#description' => t('Select your primary embed mode. Choosing HTML5 primary means that modern browsers that also support flash will use the HTML5 player first where possible. While this is desirable, the Flash based player supports more features and is generally more reliable.'),
-    '#options' => array(
-      'html5' => t('HTML5 primary, Flash failover'),
-      'flash' => t('Flash primary, HTML5 failover'),
-    ),
-    '#default_value' => isset($settings['mode']) ? $settings['mode'] : 'html5',
-  );
+  // Some settings are suitable for legacy versions only.
+  if (jw_player_use_legacy()) {
+    $form['settings']['primary'] = array(
+      '#type' => 'radios',
+      '#title' => t('Embed mode'),
+      '#description' => t('Select your primary embed mode. Choosing HTML5 primary means that modern browsers that also support flash will use the HTML5 player first where possible. While this is desirable, the Flash based player supports more features and is generally more reliable.'),
+      '#options' => array(
+        'html5' => t('HTML5 primary, Flash failover'),
+        'flash' => t('Flash primary, HTML5 failover'),
+      ),
+      '#default_value' => isset($settings['mode']) ? $settings['mode'] : 'html5',
+    );
+
+    // Skins.
+    $skin_options = array(
+      'bekle' => 'Bekle*',
+      'modieus' => 'Modieus*',
+      'glow' => 'Glow*',
+      'five' => 'Five*',
+      'beelden' => 'Stormtrooper*',
+      'vapor' => 'Vapor*',
+      'roundster' => 'Roundster*'
+    );
+    foreach (jw_player_skins() as $skin) {
+      $skin_options[$skin->name] = drupal_ucfirst($skin->name);
+    }
+
+    $form['settings']['skin'] = array(
+      '#title' => t('Skin'),
+      '#description' => t('Select a skin, some skins (*) require a premium licence'),
+      '#type' => 'select',
+      '#default_value' => !empty($settings['skin']) ? $settings['skin']: FALSE,
+      '#empty_option' => t('None (default skin)'),
+      '#options' => $skin_options,
+    );
+  }
 
   $form['settings']['responsive'] = array(
     '#type' => 'checkbox',
@@ -177,30 +203,6 @@ function jw_player_ctools_export_ui_form(&$form, &$form_state) {
   //   '#size' => 10,
   //   '#weight' => 9,
   // );
-
-  // Skins.
-  
-  $skin_options = array(
-      'bekle' => 'Bekle*',
-      'modieus' => 'Modieus*',
-      'glow' => 'Glow*',
-      'five' => 'Five*',
-      'beelden' => 'Stormtrooper*',
-      'vapor' => 'Vapor*',
-      'roundster' => 'Roundster*'
-      );
-  foreach (jw_player_skins() as $skin) {
-    $skin_options[$skin->name] = drupal_ucfirst($skin->name);
-  }
-
-  $form['settings']['skin'] = array(
-    '#title' => t('Skin'),
-    '#description' => t('Select a skin, some skins (*) require a premium licence'),
-    '#type' => 'select',
-    '#default_value' => !empty($settings['skin']) ? $settings['skin']: FALSE,
-    '#empty_option' => t('None (default skin)'),
-    '#options' => $skin_options,
-  );
   
   $form['settings']['stretching'] = array(
     '#title' => t('Stretching'),
