diff --git a/background.js b/background.js
index a82ee27..73dbe50 100644
--- a/background.js
+++ b/background.js
@@ -52,12 +52,12 @@
 }
 
 function createmenus() {
-	chrome.storage.sync.get("languages", function(items) {
+	chrome.storage.sync.get("translateinto", function(items) {
 		chrome.contextMenus.removeAll();
 
 		var count = 0, singleone = true;
 
-		for (var language in items.languages) {
+		for (var language in items.translateinto) {
 			if (count == 0) {
 				count++;
 			} else {
@@ -67,7 +67,8 @@
 		}
 
 		if (singleone) {
-			for (var language in items.languages) {
+			for (var language_id in items.translateinto) {
+				var language = items.translateinto[language_id];
 				var languagem = isoLangs[language];
 				var title = languagem.name + " ("+languagem.nativeName+")";
 				var parent = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_title2", languagem.name), "contexts": ["selection"], "onclick": click});
@@ -78,7 +79,8 @@
 			}
 		} else {
 			var parent = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_title"), "contexts": ["selection"]});
-			for (var language in items.languages) {
+			for (var language_id in items.translateinto) {
+				var language = items.translateinto[language_id];
 				var languagem = isoLangs[language];
 				var title = languagem.name + " ("+languagem.nativeName+")";
 				var id = chrome.contextMenus.create({"title": title, "parentId": parent, "contexts":["selection"], "onclick": click});
@@ -97,9 +99,9 @@
 	chrome.storage.sync.get(null, function(items) {
 		if (details.reason == "install") {
 			if (isEmpty(items)) {
-				var settings = {'languages': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
+				var settings = {'translateinto': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
 				if (isoLangs[default_language] != "undefined") {
-					settings.languages[default_language] = default_language;
+					settings.translateinto[default_language] = default_language;
 				}
 				chrome.storage.sync.set(settings, function() {
 					chrome.notifications.create("install", {
@@ -129,6 +131,16 @@
 					}, function(id) {});
 				});
 			}
+			if (version[0] == "0" && version[1] < "7") {
+				items.translateinto = {};
+				var i = 0;
+				for (var language in items.languages) {
+					items.translateinto[i] = items.languages[language];
+					i++;
+				}
+				delete(items.languages);
+				chrome.storage.sync.set(items);
+			}
 		}
 	});
 });
@@ -139,7 +151,7 @@
 });
 
 chrome.storage.sync.get(null, function(items) {
-	if (items.languages) {
+	if (items.translateinto) {
 		createmenus();
 	} else {
 		chrome.contextMenus.removeAll();
diff --git a/manifest.json b/manifest.json
index d742a5e..e30f611 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,18 +2,18 @@
   "manifest_version": 2,
   "name": "__MSG_appBetaName__",
   "description": "__MSG_appDescription__",
-  "version": "0.6.2",
+  "version": "0.7",
   "permissions": [
     "contextMenus",
     "storage",
     "notifications"
   ],
   "icons": {
-    "16": "translate-16.png",
-    "32": "translate-32.png",
-    "64": "translate-64.png",
-    "128": "translate-128.png",
-    "256": "translate-256.png"
+    "16": "icons/translate-16.png",
+    "32": "icons/translate-32.png",
+    "64": "icons/translate-64.png",
+    "128": "icons/translate-128.png",
+    "256": "icons/translate-256.png"
   },
   "background": {
     "scripts": ["background.js"]
diff --git a/options.css b/options.css
deleted file mode 100644
index f1bc8ed..0000000
--- a/options.css
+++ /dev/null
@@ -1,22 +0,0 @@
-body {
-	padding:10px;
-	font-family:"Roboto", "Arial", sans-serif!important;
-	background-image: url('translate-1.png');
-	background-repeat: repeat;
-	background-position: left top;
-	font-size: 100%!important;
-}
-h1 {
-	text-align:center;
-	font-size:30px;
-}
-h2 {
-	font-size:20px;
-}
-#languages {
-	-webkit-column-count:4;
-}
-button#save {
-	display:block;
-	margin:18px auto;
-}
diff --git a/options.html b/options.html
index 414cfff..fbdceb7 100644
--- a/options.html
+++ b/options.html
@@ -1,16 +1,22 @@
+<!DOCTYPE html>
 <html>
 	<head>
-		<title>Options</title>
 		<meta charset="UTF-8">
-		<script src="options.js"></script>
-		<link rel="stylesheet" type="text/css" href="options.css">
-		<link href='http://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css'>
+		<title>Options</title>
+		<link rel="stylesheet" type="text/css" href="css/options.css">
+		<script src="js/options.js"></script>
+		<script src="js/sortable.js"></script>
+		<link href='http://fonts.googleapis.com/css?family=Roboto:400,700,700italic,400italic' rel='stylesheet' type='text/css'>
 	</head>
 	<body>
 		<h1 id="welcome"></h1>
 		<p id="introduction"></p>
-		<h2 id="languageselectheader"></h2>
-		<div id="languages"></div>
+		<div id="languages_container">
+			<ul id="languages"></ul>
+		</div>
+		<div id="languages_footer">
+			<button id="languages_add">Add</button>
+		</div>
 		<h2 id="otheroptionsheader"></h2>
 		<div id="otheroptions">
 			<input type="radio" name="uniquetab" id="varioustabs" value=""> <label id="varioustabs_label" for="varioustabs"></label><br>
@@ -18,5 +24,16 @@
 			<input type="radio" name="uniquetab" id="panel" value="panel"> <label id="panel_label" for="panel"></label>
 		</div>
 		<button id="save"></button>
+		<dialog id="languages_add_dialog">
+		  <h3>Add language</h3>
+		  <div class="content_area">
+		    <label id="language_label" for="select_language">Language:</label>
+		    <select id="select_language"></select>
+		  </div>
+		  <div class="action_buttons">
+		    <button id="languages_add_cancel">Cancel</button>
+		    <button id="languages_add_ok">OK</button>
+		  </div>
+		</dialog>
 	</body>
 </html>
diff --git a/options.js b/options.js
deleted file mode 100644
index d240da1..0000000
--- a/options.js
+++ /dev/null
@@ -1,107 +0,0 @@
-var isoLangs = {"af":{"name":"Afrikaans","nativeName":"Afrikaans"},"sq":{"name":"Albanian","nativeName":"Shqip"},"ar":{"name":"Arabic","nativeName":"\u0639\u0631\u0628\u064a"},"hy":{"name":"Armenian","nativeName":"\u0540\u0561\u0575\u0565\u0580\u0567\u0576"},"az":{"name":"Azerbaijani","nativeName":"\u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646 \u062f\u06cc\u0644\u06cc"},"eu":{"name":"Basque","nativeName":"Euskara"},"be":{"name":"Belarusian","nativeName":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f"},"bg":{"name":"Bulgarian","nativeName":"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438"},"ca":{"name":"Catalan","nativeName":"Catal\u00e0"},"zh-CN":{"name":"Chinese (Simplified)","nativeName":"\u4e2d\u6587\u7b80\u4f53"},"zh-TW":{"name":"Chinese (Traditional)","nativeName":"\u4e2d\u6587\u7e41\u9ad4"},"hr":{"name":"Croatian","nativeName":"Hrvatski"},"cs":{"name":"Czech","nativeName":"\u010ce\u0161tina"},"da":{"name":"Danish","nativeName":"Dansk"},"nl":{"name":"Dutch","nativeName":"Nederlands"},"en":{"name":"English","nativeName":"English"},"et":{"name":"Estonian","nativeName":"Eesti keel"},"tl":{"name":"Filipino","nativeName":"Filipino"},"fi":{"name":"Finnish","nativeName":"Suomi"},"fr":{"name":"French","nativeName":"Fran\u00e7ais"},"gl":{"name":"Galician","nativeName":"Galego"},"ka":{"name":"Georgian","nativeName":"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8"},"de":{"name":"German","nativeName":"Deutsch"},"el":{"name":"Greek","nativeName":"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac"},"ht":{"name":"Haitian Creole","nativeName":"Krey\u00f2l ayisyen"},"iw":{"name":"Hebrew","nativeName":"\u05e2\u05d1\u05e8\u05d9\u05ea"},"hi":{"name":"Hindi","nativeName":"\u0939\u093f\u0928\u094d\u0926\u0940"},"hu":{"name":"Hungarian","nativeName":"Magyar"},"is":{"name":"Icelandic","nativeName":"\u00cdslenska"},"id":{"name":"Indonesian","nativeName":"Bahasa Indonesia"},"ga":{"name":"Irish","nativeName":"Gaeilge"},"it":{"name":"Italian","nativeName":"Italiano"},"ja":{"name":"Japanese","nativeName":"\u65e5\u672c\u8a9e"},"ko":{"name":"Korean","nativeName":"\ud55c\uad6d\uc5b4"},"lv":{"name":"Latvian","nativeName":"Latvie\u0161u"},"lt":{"name":"Lithuanian","nativeName":"Lietuvi\u0173 kalba"},"mk":{"name":"Macedonian","nativeName":"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438"},"ms":{"name":"Malay","nativeName":"Malay"},"mt":{"name":"Maltese","nativeName":"Malti"},"no":{"name":"Norwegian","nativeName":"Norsk"},"fa":{"name":"Persian","nativeName":"\u0641\u0627\u0631\u0633\u06cc"},"pl":{"name":"Polish","nativeName":"Polski"},"pt":{"name":"Portuguese","nativeName":"Portugu\u00eas"},"ro":{"name":"Romanian","nativeName":"Rom\u00e2n\u0103"},"ru":{"name":"Russian","nativeName":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439"},"sr":{"name":"Serbian","nativeName":"\u0421\u0440\u043f\u0441\u043a\u0438"},"sk":{"name":"Slovak","nativeName":"Sloven\u010dina"},"sl":{"name":"Slovenian","nativeName":"Slovensko"},"es":{"name":"Spanish","nativeName":"Espa\u00f1ol"},"sw":{"name":"Swahili","nativeName":"Kiswahili"},"sv":{"name":"Swedish","nativeName":"Svenska"},"th":{"name":"Thai","nativeName":"\u0e44\u0e17\u0e22"},"tr":{"name":"Turkish","nativeName":"T\u00fcrk\u00e7e"},"uk":{"name":"Ukrainian","nativeName":"\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430"},"ur":{"name":"Urdu","nativeName":"\u0627\u0631\u062f\u0648"},"vi":{"name":"Vietnamese","nativeName":"Ti\u1ebfng Vi\u1ec7t"},"cy":{"name":"Welsh","nativeName":"Cymraeg"},"yi":{"name":"Yiddish","nativeName":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9"}};
-
-function $(selector) {
-    return document.querySelector(selector);
-}
-
-function $all(selector) {
-    return document.querySelectorAll(selector);
-}
-
-function isEmpty(obj) {
-    return Object.keys(obj).length === 0;
-}
-
-function init() {
-    $("#welcome").innerHTML = chrome.i18n.getMessage("options_welcome");
-    $("#introduction").innerHTML = chrome.i18n.getMessage("options_introduction");
-    $("#languageselectheader").innerHTML = chrome.i18n.getMessage("options_languageselectheader");
-    $("#otheroptionsheader").innerHTML = chrome.i18n.getMessage("options_otheroptionsheader");
-    $("#varioustabs_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_1");
-    $("#uniquetab_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_2");
-    $("#panel_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_3");
-    chrome.storage.sync.get(null, function(items) {
-        if (isEmpty(items)) {
-            items = {'languages': {}, 'uniquetab': ''};
-            chrome.storage.sync.set({'languages': {}, 'uniquetab': ''});
-        }
-        if (items.uniquetab === "yep")
-            $("#uniquetab").checked = true;
-        if (items.uniquetab === "")
-            $("#varioustabs").checked = true;
-        if (items.uniquetab === "panel")
-            $("#panel").checked = true;
-        $("#panelsflag").addEventListener('click', function() { event.preventDefault(); chrome.tabs.create({url: 'chrome://flags/#enable-panels'}); });
-        $("#save").innerHTML = chrome.i18n.getMessage("options_savebutton");
-        $("#save").addEventListener('click', function() {
-            save_options();
-        });
-        var languages = items.languages;
-        for (var language in isoLangs) {
-            var el = document.createElement('div');
-            el.setAttribute('class','language');
-            el.setAttribute('id', 'cont-'+language);
-            $("#languages").appendChild(el);
-            var el2 = document.createElement('input');
-            el2.setAttribute('type','checkbox');
-            el2.setAttribute('id', language);
-            el2.setAttribute('name', language);
-            el2.setAttribute('data-language', language);
-            el.appendChild(el2);
-            var el3 = document.createElement('label');
-            el3.setAttribute('for', language);
-            el3.innerHTML = isoLangs[language]["name"]+" ("+isoLangs[language]["nativeName"]+")";
-            el.appendChild(el3);
-        }
-        if (!languages) {
-            return;
-        }
-        else {
-            var options = items.languages;
-            for (var language in options) {
-                document.getElementById(language).checked = true;
-            }
-        }
-        var languages_el = document.getElementById("languages");
-    });
-}
-
-function save_options() {
-    var languages = document.getElementById("languages");
-    var options = {"uniquetab": "", "languages": {}};
-
-    options.uniquetab = radio_selected("uniquetab");
-
-    for (var language in isoLangs) {
-        if ($("input[data-language='"+language+"']").checked) {
-            options.languages[language] = language;
-        }
-    }
-
-    chrome.storage.sync.set(options, function() {
-        var background = chrome.extension.getBackgroundPage();
-
-        background.translator_tab = false;
-        background.translator_window = false;
-        window.close();
-    });
-
-    // We don't need the following code because the background.js is already listening to changes in chrome.sync ;-) Yeeey!
-    //chrome.extension.getBackgroundPage().createmenus(JSON.stringify(options));
-}
-
-function toObject(arr) {
-    var rv = {};
-    for (var i = 0; i < arr.length; ++i)
-        if (arr[i] !== undefined) rv[i] = arr[i];
-    return rv;
-}
-
-function radio_selected(a) {
-    var elements = document.getElementsByName(a);
-
-    for (var i=0; i<elements.length; i++)
-        if (elements[i].checked) return elements[i].value;
-}
-
-window.addEventListener('load', init);
diff --git a/translate-1.png b/translate-1.png
deleted file mode 100644
index 8bab181..0000000
--- a/translate-1.png
+++ /dev/null
Binary files differ
diff --git a/translate-128.png b/translate-128.png
deleted file mode 100644
index 1a33921..0000000
--- a/translate-128.png
+++ /dev/null
Binary files differ
diff --git a/translate-16.png b/translate-16.png
deleted file mode 100644
index 6629ac6..0000000
--- a/translate-16.png
+++ /dev/null
Binary files differ
diff --git a/translate-2.png b/translate-2.png
deleted file mode 100644
index 9625b12..0000000
--- a/translate-2.png
+++ /dev/null
Binary files differ
diff --git a/translate-256.png b/translate-256.png
deleted file mode 100644
index 0b2ead1..0000000
--- a/translate-256.png
+++ /dev/null
Binary files differ
diff --git a/translate-32.png b/translate-32.png
deleted file mode 100644
index ee6fcfe..0000000
--- a/translate-32.png
+++ /dev/null
Binary files differ
diff --git a/translate-4.png b/translate-4.png
deleted file mode 100644
index 815085d..0000000
--- a/translate-4.png
+++ /dev/null
Binary files differ
diff --git a/translate-512.png b/translate-512.png
deleted file mode 100644
index 8fc23a3..0000000
--- a/translate-512.png
+++ /dev/null
Binary files differ
diff --git a/translate-64.png b/translate-64.png
deleted file mode 100644
index 6de6bb7..0000000
--- a/translate-64.png
+++ /dev/null
Binary files differ
diff --git a/translate-8.png b/translate-8.png
deleted file mode 100644
index 1e5832c..0000000
--- a/translate-8.png
+++ /dev/null
Binary files differ
