diff --git a/commerce_multicurrency.module b/commerce_multicurrency.module
index 3759a0e..66a73bf 100644
--- a/commerce_multicurrency.module
+++ b/commerce_multicurrency.module
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @file
  * Enhancements for the commerce currency support.
@@ -309,7 +310,7 @@ function commerce_multicurrency_help($path, $arg) {
       );
       return
         '<p>' .  $text_1 . '<ul><li>' . $list_item_1 . '</li><li>' . $list_item_2 . '</li></ul>' .
-        $text_2 . '</p>';
+          $text_2 . '</p>';
   }
 }
 
@@ -402,7 +403,8 @@ function commerce_multicurrency_set_user_currency_code_callback($currency_code)
  *   exists.
  */
 function commerce_multicurrency_set_user_currency_code($currency_code, $overwrite_cookie = TRUE) {
-  if ($overwrite_cookie || empty($_COOKIE['Drupal_visitor_commerce_currency'])) {
+  $force_to_use_get = variable_get('commerce_multicurrency_force_get', 0);
+  if ($overwrite_cookie || empty($_COOKIE['Drupal_visitor_commerce_currency']) || ($force_to_use_get && !isset($_GET['currency']))) {
     $enabled_currencies = commerce_currencies(TRUE);
     if (isset($enabled_currencies[$currency_code])) {
       $old_currency_code = commerce_multicurrency_get_user_currency_code();
@@ -410,9 +412,23 @@ function commerce_multicurrency_set_user_currency_code($currency_code, $overwrit
       // Inject currency into the static cache.
       $current_currency_code = &drupal_static('commerce_multicurrency_get_user_currency_code', FALSE);
       $current_currency_code = $currency_code;
-
-      // Set cookie.
-      user_cookie_save(array('commerce_currency' => $currency_code));
+      $default_currency = commerce_default_currency();
+      if ($force_to_use_get) {
+        $current_url = $_GET['q'];
+        if ($currency_code != $default_currency) {
+          $redirect = $current_url . '?currency=' . $currency_code;
+        }
+        else {
+          // Means default currency was selected - lets remove _GET parameter.
+          $redirect = trim(preg_replace('/([?&])currency=[^&]+(&|$)/', '$1', $current_url), '?');
+        }
+        header('Location: /' . $redirect, TRUE, 301);
+        exit();
+      }
+      else {
+        // Set cookie.
+        user_cookie_save(array('commerce_currency' => $currency_code));
+      }
 
       rules_invoke_event('commerce_multicurrency_user_currency_set', $currency_code, $old_currency_code);
     }
@@ -430,9 +446,16 @@ function commerce_multicurrency_get_user_currency_code() {
     return $currency_code;
   }
 
-  // If there's a cookie with a selected currency ensure it's a available one.
-  if (isset($_COOKIE['Drupal_visitor_commerce_currency'])) {
-    $enabled_currencies = commerce_currencies(TRUE);
+  $enabled_currencies = commerce_currencies(TRUE);
+  if (variable_get('commerce_multicurrency_force_get', 0)) {
+    if (isset($_GET['currency']) && !empty($enabled_currencies[$_GET['currency']])) {
+      return $_GET['currency'];
+    }
+    else {
+      // Return default currency at the bottom of this function.
+    }
+  }// If there's a cookie with a selected currency ensure it's a available one.
+  elseif (isset($_COOKIE['Drupal_visitor_commerce_currency'])) {
     if (!empty($enabled_currencies[$_COOKIE['Drupal_visitor_commerce_currency']])) {
       return $currency_code = $_COOKIE['Drupal_visitor_commerce_currency'];
     }
@@ -540,3 +563,16 @@ function commerce_multicurrency_commerce_price_field_formatter_prepare_view($ent
     }
   }
 }
+
+/**
+ * Implements hook_url_outbound_alter().
+ * @param string $path
+ * @param array $options
+ * @param path $original_path
+ */
+function commerce_multicurrency_url_outbound_alter(&$path, &$options, $original_path) {
+  // If the param of interest is present and the url being generated is internal.
+  if (!empty($_GET['currency']) && !$options['external'] && variable_get('commerce_multicurrency_force_get', 0)) {
+    $options['query']['currency'] = $_GET['currency'];
+  }
+}
