diff --git a/app/renderer/css/preference.css b/app/renderer/css/preference.css
index 86168fba..31a34ffb 100644
--- a/app/renderer/css/preference.css
+++ b/app/renderer/css/preference.css
@@ -55,6 +55,7 @@ html, body {
     width: 100%;
     display: flex;
     padding: 30px;
+    overflow-y: scroll;
 }
 
 .server-info-container {
@@ -103,6 +104,7 @@ img.server-info-icon {
     border-bottom: #ddd 1px solid;
     outline-width: 0;
     background: transparent;
+    max-width: 500px;
 }
 
 .server-info-value:focus {
@@ -115,6 +117,7 @@ img.server-info-icon {
     color: #235d3a;
     vertical-align: middle;
     margin: 10px 0;
+    flex-wrap: wrap;
 }
 
 .action {
@@ -146,10 +149,14 @@ img.server-info-icon {
 
 .server-info.active {
     background: #ecf4ef;
-    padding: 20px;
 }
 
 .server-info {
     display: flex;
-    margin: 20px 0;
+    padding: 10px;
+    margin: 10px 0 10px 0;
+}
+
+.hidden {
+    display: none;
 }
\ No newline at end of file
diff --git a/app/renderer/js/main.js b/app/renderer/js/main.js
index a2c412d4..56fd964d 100644
--- a/app/renderer/js/main.js
+++ b/app/renderer/js/main.js
@@ -82,7 +82,7 @@ class ServerManagerView {
         const $webView = document.getElementById(`webview-${index}`);
         this.isLoading = false;
         $webView.classList.remove('loading');
-        // $webView.openDevTools();
+        $webView.openDevTools();
     }
 
 	initActions() {
diff --git a/app/renderer/js/preference.js b/app/renderer/js/preference.js
index 37aed47c..35e40d61 100644
--- a/app/renderer/js/preference.js
+++ b/app/renderer/js/preference.js
@@ -6,22 +6,25 @@ class PreferenceView {
     constructor() {
         this.$newServerButton = document.getElementById('new-server-action');
         this.$saveServerButton = document.getElementById('save-server-action');
-        this.$serverInfoContainer = document.querySelector('.server-info-container');        
+        this.$serverInfoContainer = document.querySelector('.server-info-container');
     }
 
     init() {
        this.domainUtil = new DomainUtil();
        this.initServers();
+       this.initActions();
     }
 
     initServers() {
+        this.$serverInfoContainer.innerHTML = '';
+        this.initNewServerForm();
         const servers = this.domainUtil.getDomains();
-		for (let server of servers) {
-			this.initServer(server);
+		for (let i in servers) {
+			this.initServer(servers[i], i);
 		}
     }
 
-    initServer(server) {
+    initServer(server, index) {
         const {
 			alias,
 			url,
@@ -35,21 +38,86 @@ class PreferenceView {
                     
                 `;
         this.$serverInfoContainer.appendChild(this.__insert_node(serverInfoTemplate));
+        document.getElementById(`delete-server-action-${index}`).addEventListener('click', () => {
+            this.domainUtil.removeDomain(index);
+            this.initServers();
+        });
     }
 
+    initNewServerForm() {
+        const newServerFormTemplate = `
+                
+                    
+                        

+                    
+                    
+                
 
+        `;
+        this.$serverInfoContainer.appendChild(this.__insert_node(newServerFormTemplate));
+
+        this.$newServerForm = document.querySelector('.server-info.active');
+        this.$newServerAlias = this.$newServerForm.querySelectorAll('input.server-info-value')[0];
+        this.$newServerUrl = this.$newServerForm.querySelectorAll('input.server-info-value')[1];
+        this.$newServerIcon = this.$newServerForm.querySelectorAll('input.server-info-value')[2];
+    }
+
+    initActions() {
+        this.$newServerButton.addEventListener('click', () => {
+            this.$newServerForm.classList.remove('hidden');
+            this.$saveServerButton.classList.remove('hidden');
+            this.$newServerButton.classList.add('hidden');
+        });
+        this.$saveServerButton.addEventListener('click', () => {
+            this.domainUtil.checkDomain(this.$newServerUrl.value).then((domain) => {
+                const server = {
+                    alias: this.$newServerAlias.value,
+                    url: domain,
+                    icon: this.$newServerIcon.value
+                };
+                this.domainUtil.addDomain(server);
+                this.$saveServerButton.classList.add('hidden');
+                this.$newServerButton.classList.remove('hidden');
+                this.$newServerForm.classList.add('hidden');
+
+                this.initServers();
+            }, (errorMessage) => {
+                alert(errorMessage);
+            });
+        });
+    }
     __insert_node(html) {
         let wrapper= document.createElement('div');
         wrapper.innerHTML= html;
diff --git a/app/renderer/js/utils/domain-util.js b/app/renderer/js/utils/domain-util.js
index fa3d3c54..f98d75cc 100644
--- a/app/renderer/js/utils/domain-util.js
+++ b/app/renderer/js/utils/domain-util.js
@@ -2,6 +2,7 @@
 
 const {app} = require('electron').remote;
 const JsonDB = require('node-json-db');
+const request = require('request');
 
 class DomainUtil {
     constructor() {
@@ -12,18 +13,37 @@ class DomainUtil {
         return this.db.getData('/domains');
     }
 
-    addDomain() {
-        const servers = {
-            url: 'https://chat.zulip.org',
-            alias: 'Zulip 2333',
-            icon: 'https://chat.zulip.org/static/images/logo/zulip-icon-128x128.271d0f6a0ca2.png'
-        }
+    addDomain(server) {
+        server.icon = server.icon || 'https://chat.zulip.org/static/images/logo/zulip-icon-128x128.271d0f6a0ca2.png';
         this.db.push("/domains[]", servers, true);
     }
 
     removeDomains() {
         this.db.delete("/domains");
     }
+
+    removeDomain(index) {
+        this.db.delete(`/domains[${index}]`);
+    }
+
+    checkDomain(domain) {
+        const hasPrefix = (domain.indexOf('http') == 0);
+        if (!hasPrefix) {
+            domain = (domain.indexOf('localhost:') >= 0)? `http://${domain}` : `https://${domain}`;
+        }
+
+		const checkDomain = domain + '/static/audio/zulip.ogg';
+
+        return new Promise((res, rej) => {
+            request(checkDomain, (error, response) => {
+                if (!error && response.statusCode !== 404) {
+                    res(domain);
+                } else {
+                    rej('Not a valid Zulip server');
+                }
+            });
+        })
+    }
 }
 
 module.exports = DomainUtil;
\ No newline at end of file
diff --git a/app/renderer/preference.html b/app/renderer/preference.html
index 03226fa7..1a1f61e3 100644
--- a/app/renderer/preference.html
+++ b/app/renderer/preference.html
@@ -25,7 +25,7 @@
                     add_box
                     New Server
                 
-                
+                
                     check_box
                     Verify & Save