diff --git a/src/psm/Module/Server/Controller/AbstractServerController.class.php b/src/psm/Module/Server/Controller/AbstractServerController.class.php
index ed1fa330..7015f542 100644
--- a/src/psm/Module/Server/Controller/AbstractServerController.class.php
+++ b/src/psm/Module/Server/Controller/AbstractServerController.class.php
@@ -86,6 +86,32 @@ abstract class AbstractServerController extends AbstractController {
 		}
 
 		return $servers;
+	}
 
+	/**
+	 * Format server data for display
+	 * @param array $server
+	 * @return array
+	 */
+	protected function formatServer($server) {
+		$server['rtime'] = round((float) $server['rtime'], 4);
+		$server['last_online']  = psm_timespan($server['last_online']);
+		$server['last_check']  = psm_timespan($server['last_check']);
+		$server['active'] = psm_get_lang('system', $server['active']);
+		$server['email'] = psm_get_lang('system', $server['email']);
+		$server['sms'] = psm_get_lang('system', $server['sms']);
+		$server['url_view'] = psm_build_url(array(
+			'mod' => 'server',
+			'action' => 'view',
+			'id' => $server['server_id'],
+		));
+
+		if($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) {
+			$server['status'] = 'warning';
+		}
+
+		$server['type'] = psm_get_lang('servers', 'type_' . $server['type']);
+
+		return $server;
 	}
 }
\ No newline at end of file
diff --git a/src/psm/Module/Server/Controller/ServerController.class.php b/src/psm/Module/Server/Controller/ServerController.class.php
index 0b9453f1..896718fa 100644
--- a/src/psm/Module/Server/Controller/ServerController.class.php
+++ b/src/psm/Module/Server/Controller/ServerController.class.php
@@ -34,9 +34,17 @@ use psm\Service\Template;
  */
 class ServerController extends AbstractServerController {
 
+	/**
+	 * Current server id
+	 * @var int $server_id
+	 */
+	protected $server_id;
+
 	function __construct(Database $db, Template $tpl) {
 		parent::__construct($db, $tpl);
 
+		$this->server_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
+
 		$this->setActions(array(
 			'index', 'edit', 'save', 'delete', 'view',
 		), 'index');
@@ -57,11 +65,11 @@ class ServerController extends AbstractServerController {
 
 		// check if user is admin, in that case we add the buttons
 		if($this->user->getUserLevel() == PSM_USER_ADMIN) {
-			$sidebar->addLink(
+			$sidebar->addButton(
 				'add_new',
 				psm_get_lang('system', 'add_new'),
 				psm_build_url(array('mod' => 'server', 'action' => 'edit')),
-				'plus'
+				'plus icon-white', 'success'
 			);
 			// get the action buttons per server
 			$this->tpl->newTemplate('server_list_admin_actions', 'server/server.tpl.html');
@@ -70,7 +78,7 @@ class ServerController extends AbstractServerController {
 			$html_actions = '';
 		}
 
-		$sidebar->addLink(
+		$sidebar->addButton(
 			'update',
 			psm_get_lang('menu', 'server_update'),
 			psm_build_url(array('mod' => 'server_update')),
@@ -105,23 +113,26 @@ class ServerController extends AbstractServerController {
 	 */
 	protected function executeEdit() {
 		$this->setTemplateId('server_update', 'server/server.tpl.html');
-		$sidebar = new \psm\Util\Module\Sidebar($this->tpl);
-		$this->setSidebar($sidebar);
-
-		$sidebar->addLink(
-			'go_back',
-			psm_get_lang('system', 'go_back'),
-			psm_build_url(array('mod' => 'server')),
-			'th-list'
-		);
-
-		$server_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
+		$back_to = isset($_GET['back_to']) ? $_GET['back_to'] : '';
 
 		$tpl_data = array(
-			'url_go_back' => psm_build_url(array('mod' => 'server')),
+			// form url:
+			'url_save' => psm_build_url(array(
+				'mod' => 'server',
+				'action' => 'save',
+				'id' => $this->server_id,
+				'back_to' => $back_to,
+			)),
 		);
 
-		switch(intval($server_id)) {
+		// depending on where the user came from, add the go back url:
+		if($back_to == 'view' && $this->server_id > 0) {
+			$tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $this->server_id));
+		} else {
+			$tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server'));
+		}
+
+		switch($this->server_id) {
 			case 0:
 				// insert mode
 				$tpl_data['titlemode'] = psm_get_lang('system', 'insert');
@@ -131,10 +142,7 @@ class ServerController extends AbstractServerController {
 			default:
 				// edit mode
 				// get server entry
-				$edit_server = $this->db->selectRow(
-					PSM_DB_PREFIX.'servers',
-					array('server_id' => $server_id)
-				);
+				$edit_server = $this->getServers($this->server_id);
 				if (empty($edit_server)) {
 					$this->addMessage('Invalid server', 'error');
 					return $this->initializeAction('index');
@@ -169,8 +177,6 @@ class ServerController extends AbstractServerController {
 	protected function executeSave() {
 		// check for add/edit mode
 		if(isset($_POST['label']) && isset($_POST['ip']) && isset($_POST['port'])) {
-			$server_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
-
 			$clean = array(
 				'label' => strip_tags($_POST['label']),
 				'ip' => strip_tags($_POST['ip']),
@@ -184,22 +190,28 @@ class ServerController extends AbstractServerController {
 			);
 
 			// check for edit or add
-			if($server_id > 0) {
+			if($this->server_id > 0) {
 				// edit
 				$this->db->save(
 					PSM_DB_PREFIX.'servers',
 					$clean,
-					array('server_id' => $server_id)
+					array('server_id' => $this->server_id)
 				);
 				$this->addMessage(psm_get_lang('servers', 'updated'), 'success');
 			} else {
 				// add
 				$clean['status'] = 'on';
-				$this->db->save(PSM_DB_PREFIX.'servers', $clean);
+				$this->server_id = $this->db->save(PSM_DB_PREFIX.'servers', $clean);
 				$this->addMessage(psm_get_lang('servers', 'inserted'), 'success');
 			}
 		}
-		$this->initializeAction('index');
+
+		$back_to = isset($_GET['back_to']) ? $_GET['back_to'] : 'index';
+		if($back_to == 'view') {
+			$this->initializeAction('view');
+		} else {
+			$this->initializeAction('index');
+		}
 	}
 
 	/**
@@ -211,7 +223,7 @@ class ServerController extends AbstractServerController {
 			// do delete
 			$res = $this->db->delete(PSM_DB_PREFIX . 'servers', array('server_id' => $id));
 
-			if($res == 1) {
+			if($res === 1) {
 				$this->db->delete(PSM_DB_PREFIX.'log', array('server_id' => $id));
 				$this->db->delete(PSM_DB_PREFIX.'users_servers', array('server_id' => $id));
 				$this->db->delete(PSM_DB_PREFIX.'servers_uptime', array('server_id' => $id));
@@ -226,77 +238,61 @@ class ServerController extends AbstractServerController {
 	 * Prepare the view template
 	 */
 	protected function executeView() {
-		$this->setTemplateId('server_view', 'server/view.tpl.html');
-		$server_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
+		if($this->server_id == 0) {
+			return $this->initializeAction('index');
+		}
+		$server = $this->getServers($this->server_id);
 
-		// get server entry
-		$server = $this->getServers($server_id);
 		if(empty($server)) {
-			$this->addMessage('Invalid server', 'error');
 			return $this->initializeAction('index');
 		}
 
-		$sidebar = new \psm\Util\Module\Sidebar($this->tpl);
-		$this->setSidebar($sidebar);
-		$sidebar->setSubtitle($server['label']);
+		$this->setTemplateId('server_view', 'server/view.tpl.html');
 
+		$tpl_data = $this->formatServer($server);
+
+		// create history HTML
+		$history = new \psm\Util\Server\HistoryGraph($this->db, $this->tpl);
+		$tpl_data['html_history'] = $history->createHTML($this->server_id);
+
+		// add edit/delete buttons for admins
 		if($this->user->getUserLevel() == PSM_USER_ADMIN) {
-			$sidebar->addLink(
-				'edit',
-				psm_get_lang('system', 'edit'),
-				psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $server_id)),
-				'edit'
-			);
-			$sidebar->addLink(
-				'delete',
-				psm_get_lang('system', 'delete'),
-				"javascript:sm_delete('{$server_id}', 'server');",
-				'remove'
+			$tpl_id_actions = 'server_view_admin_actions';
+			$this->tpl->newTemplate($tpl_id_actions, 'server/view.tpl.html');
+			$tpl_data['html_actions'] = $this->tpl->getTemplate($tpl_id_actions);
+			$tpl_data['url_edit'] = psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view'));
+		}
+
+		// add all available servers to the menu
+		$servers = $this->getServers();
+		$options = array();
+		foreach($servers as $i => $server) {
+			$options[] = array(
+				'class_active' => ($server['server_id'] == $this->server_id) ? 'active' : '',
+				'url' => psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server['server_id'])),
+				'label' => $server['label'],
 			);
 		}
-		$back_to = isset($_GET['back_to']) ? $_GET['back_to'] : 'server';
-		$sidebar->addLink(
+		$sidebar = new \psm\Util\Module\Sidebar($this->tpl);
+		$this->setSidebar($sidebar);
+
+		$sidebar->addDropdown(
+			'server',
+			psm_get_lang('menu', 'server'),
+			$options,
+			'th', 'success'
+		);
+
+		// check which module the user came from, and add a link accordingly
+		$back_to = isset($_GET['back_to']) && $_GET['back_to'] == 'status' ? $_GET['back_to'] : 'server';
+		$sidebar->addButton(
 			'go_back',
 			psm_get_lang('system', 'go_back'),
 			psm_build_url(array('mod' => $back_to)),
 			'th-list'
 		);
 
-		$tpl_data = $this->formatServer($server);
-		$history = new \psm\Util\Server\HistoryGraph($this->db, $this->tpl);
-		$tpl_data['html_history'] = $history->createHTML($server_id);
-
-		$this->tpl->addTemplateData(
-			$this->getTemplateId(),
-			$tpl_data
-		);
-	}
-
-	/**
-	 * Format server data for display
-	 * @param array $server
-	 * @return array
-	 */
-	protected function formatServer($server) {
-		$server['rtime'] = round((float) $server['rtime'], 4);
-		$server['last_online']  = psm_timespan($server['last_online']);
-		$server['last_check']  = psm_timespan($server['last_check']);
-		$server['active'] = psm_get_lang('system', $server['active']);
-		$server['email'] = psm_get_lang('system', $server['email']);
-		$server['sms'] = psm_get_lang('system', $server['sms']);
-		$server['url_view'] = psm_build_url(array(
-			'mod' => 'server',
-			'action' => 'view',
-			'id' => $server['server_id'],
-		));
-
-		if($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) {
-			$server['status'] = 'warning';
-		}
-
-		$server['type'] = psm_get_lang('servers', 'type_' . $server['type']);
-
-		return $server;
+		$this->tpl->addTemplateData($this->getTemplateId(), $tpl_data);
 	}
 
 	// override parent::createHTMLLabels()
@@ -326,8 +322,8 @@ class ServerController extends AbstractServerController {
 				'label_action' => psm_get_lang('system', 'action'),
 				'label_save' => psm_get_lang('system', 'save'),
 				'label_go_back' => psm_get_lang('system', 'go_back'),
-				'label_edit' => psm_get_lang('system', 'edit') . ' ' . psm_get_lang('servers', 'server'),
-				'label_delete' => psm_get_lang('system', 'delete') . ' ' . psm_get_lang('servers', 'server'),
+				'label_edit' => psm_get_lang('system', 'edit'),
+				'label_delete' => psm_get_lang('system', 'delete'),
 				'label_yes' => psm_get_lang('system', 'yes'),
 				'label_no' => psm_get_lang('system', 'no'),
 				'label_add_new' => psm_get_lang('system', 'add_new'),
diff --git a/src/psm/Module/User/Controller/UserController.class.php b/src/psm/Module/User/Controller/UserController.class.php
index 2a19f796..609f0f2f 100644
--- a/src/psm/Module/User/Controller/UserController.class.php
+++ b/src/psm/Module/User/Controller/UserController.class.php
@@ -72,11 +72,11 @@ class UserController extends AbstractController {
 		$sidebar = new \psm\Util\Module\Sidebar($this->tpl);
 		$this->setSidebar($sidebar);
 
-		$sidebar->addLink(
+		$sidebar->addButton(
 			'add_new',
 			psm_get_lang('system', 'add_new'),
 			psm_build_url(array('mod' => 'user', 'action' => 'edit')),
-			'plus'
+			'plus icon-white', 'success'
 		);
 
 		// build label array for the next loop
@@ -114,16 +114,6 @@ class UserController extends AbstractController {
 	 */
 	protected function executeEdit() {
 		$this->setTemplateId('user_update', 'user/user.tpl.html');
-		$sidebar = new \psm\Util\Module\Sidebar($this->tpl);
-		$this->setSidebar($sidebar);
-
-		$sidebar->addLink(
-			'go_back',
-			psm_get_lang('system', 'go_back'),
-			psm_build_url(array('mod' => 'user')),
-			'th-list'
-		);
-
 		$user_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
 		$fields_prefill = array('name', 'user_name', 'mobile', 'email');
 
diff --git a/src/psm/Service/Template.class.php b/src/psm/Service/Template.class.php
index 3bcd72d0..eb212991 100644
--- a/src/psm/Service/Template.class.php
+++ b/src/psm/Service/Template.class.php
@@ -105,7 +105,7 @@ class Template {
 				foreach($value as $k => $v) {
 					$subdata[$key.'_'.$k] = $v;
 				}
-				$source = $this->assignTplVar($source, $subdata, true);
+				$source = $this->addTemplateData($source, $subdata, true);
 			} else {
 				$source = str_replace('{'.$key.'}', $value, $source);
 			}
diff --git a/src/psm/Util/Module/Sidebar.class.php b/src/psm/Util/Module/Sidebar.class.php
index 7174966b..051e762d 100644
--- a/src/psm/Util/Module/Sidebar.class.php
+++ b/src/psm/Util/Module/Sidebar.class.php
@@ -94,7 +94,7 @@ class Sidebar implements SidebarInterface {
 		}
 
 		$this->items['link'][$id] = array(
-			'type' => 'link',
+			'id' => $id,
 			'label' => $label,
 			'url' => str_replace('"', '\"', $url),
 			'icon' => $icon,
@@ -102,11 +102,62 @@ class Sidebar implements SidebarInterface {
 		return $this;
 	}
 
+	/**
+	 * Add a new button to the sidebar
+	 * @param string $id
+	 * @param string $label
+	 * @param string $url
+	 * @param string $icon
+	 * @param string $btn_class
+	 * @param boolean $url_is_onclick if you want onclick rather than url, change this to true
+	 * @return \psm\Util\Module\Sidebar
+	 */
+	public function addButton($id, $label, $url, $icon = null, $btn_class = null, $url_is_onclick = false) {
+		if(!isset($this->items['button'])) {
+			$this->items['button'] = array();
+		}
+		if(!$url_is_onclick) {
+			$url = "psm_goTo('" . $url . "');";
+		}
+
+		$this->items['button'][$id] = array(
+			'id' => $id,
+			'label' => $label,
+			'onclick' => str_replace('"', '\"', $url),
+			'icon' => $icon,
+			'btn_class'=> $btn_class,
+		);
+		return $this;
+	}
+
+	/**
+	 * Add dropdown button
+	 * @param string $id
+	 * @param string $label
+	 * @param array $options
+	 * @param string $icon
+	 * @param string $btn_class
+	 * @return \psm\Util\Module\Sidebar
+	 */
+	public function addDropdown($id, $label, $options, $icon = null, $btn_class = null) {
+		if(!isset($this->items['dropdown'])) {
+			$this->items['dropdown'] = array();
+		}
+		$this->items['dropdown'][$id] = array(
+			'id' => $id,
+			'label' => $label,
+			'options' => $options,
+			'icon' => $icon,
+			'btn_class' => $btn_class,
+		);
+		return $this;
+	}
+
 	public function createHTML() {
 		$tpl_id = 'main_sidebar_container';
 		$this->tpl->newTemplate($tpl_id, 'main_sidebar.tpl.html');
 
-		$types = array('link');
+		$types = array('dropdown', 'button', 'link');
 		$items = array();
 
 		// loop through all types and build their html
@@ -122,8 +173,16 @@ class Sidebar implements SidebarInterface {
 
 			// build html for each individual item
 			foreach($this->items[$type] as $id => $item) {
+				$html_item = $html_type;
+
+				if(isset($item['options'])) {
+					$item['options'] = $this->tpl->addTemplateDataRepeat($html_item, 'options', $item['options'], true);
+
+				}
+				$html_item = $this->tpl->addTemplateData($html_type, $item, true);
+
 				$items[] = array(
-					'html_item' => $this->tpl->addTemplateData($html_type, $item, true),
+					'html_item' => $html_item,
 					'class_active' => ($id === $this->active_id) ? 'active' : '',
 				);
 			}
diff --git a/src/templates/main_sidebar.tpl.html b/src/templates/main_sidebar.tpl.html
index 61593810..897f8820 100755
--- a/src/templates/main_sidebar.tpl.html
+++ b/src/templates/main_sidebar.tpl.html
@@ -1,6 +1,6 @@
 <!--%tpl_main_sidebar_container-->
 <div class="span2">
-	<div class="well sidebar-nav">
+	<div class="sidebar-nav">
 		<ul class="nav nav-list">
 			<li class="nav-header">{subtitle}</li>
 			<!--%tpl_repeat_items-->
@@ -8,8 +8,30 @@
 			<!--%%tpl_repeat_items-->
 			{items}
 		</ul>
+		<div class="clearfix"></div>
 	</div>
 </div>
 <!--%%tpl_main_sidebar_container-->
 
-<!--%tpl_main_sidebar_types_link--><a href="{url}"><i class="icon-{icon}"></i>&nbsp;{label}</a><!--%%tpl_main_sidebar_types_link-->
\ No newline at end of file
+<!--%tpl_main_sidebar_types_link--><a href="{url}"><i class="icon-{icon}"></i>&nbsp;{label}</a><!--%%tpl_main_sidebar_types_link-->
+
+<!--%tpl_main_sidebar_types_button-->
+<button class="btn btn-{btn_class}" onclick="{onclick}">
+	<i class="icon-{icon}"></i>&nbsp;{label}
+</button>
+<!--%%tpl_main_sidebar_types_button-->
+
+<!--%tpl_main_sidebar_types_dropdown-->
+<div class="btn-group">
+  <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">
+	<i class="icon-th icon-white"></i>&nbsp;{label}
+	<span class="caret"></span>
+  </button>
+  <ul class="dropdown-menu">
+	<!--%tpl_repeat_options-->
+	<li class="{class_active}"><a href="{url}">{label}</a>
+	<!--%%tpl_repeat_options-->
+	{options}
+  </ul>
+</div>
+<!--%%tpl_main_sidebar_types_dropdown-->
\ No newline at end of file
diff --git a/src/templates/server/server.tpl.html b/src/templates/server/server.tpl.html
index e81cd77f..1b738653 100755
--- a/src/templates/server/server.tpl.html
+++ b/src/templates/server/server.tpl.html
@@ -32,7 +32,8 @@
 			<td>{active}</td>
 			<td>{email}</td>
 			<td>{sms}</td>
-			<td>{html_actions}</td>
+			<td><a class="btn btn-small" href="index.php?mod=server&amp;action=view&amp;id={server_id}"><i class="icon-eye-open"></i></a>
+				{html_actions}</td>
 		</tr>
 		<!--%%tpl_repeat_servers-->
 		{servers}
@@ -50,7 +51,7 @@
 <!--%%tpl_server_list_admin_actions-->
 
 <!--%tpl_server_update-->
-<form class="form-horizontal well" action="index.php?mod=server&action=save&id={edit_server_id}" method="post">
+<form class="form-horizontal well" action="{url_save}" method="post">
 	<fieldset>
 		<legend>{titlemode}</legend>
 		<div class="control-group">
diff --git a/src/templates/server/view.tpl.html b/src/templates/server/view.tpl.html
index 4ba87a77..461ce48d 100644
--- a/src/templates/server/view.tpl.html
+++ b/src/templates/server/view.tpl.html
@@ -1,11 +1,11 @@
 <!--%tpl_server_view-->
-<table class="table">
+<table class="table table-bordered">
 	<colgroup>
 		<col class="oce-first" />
 	</colgroup>
 	<thead>
 		<tr class="head">
-			<th colspan="2">{label}</th>
+			<th colspan="2"><h4>{label}</h4></th>
 		</tr>
 	</thead>
 	<tbody>
@@ -53,7 +53,22 @@
 			<td>{label_send_sms}:</td>
 			<td>{sms}</td>
 		</tr>
+		{html_actions}
 	</tbody>
 </table>
 {html_history}
-<!--%%tpl_server_view-->
\ No newline at end of file
+<!--%%tpl_server_view-->
+
+<!--%tpl_server_view_admin_actions-->
+<tr>
+	<td>&nbsp;</td>
+	<td>
+		<a class="btn btn-success" href="{url_edit}">
+			<i class="icon-edit icon-white"></i>&nbsp;{label_edit}
+		</a>
+		<a class="btn btn-danger" href="javascript:sm_delete('{server_id}', 'server');">
+			<i class="icon-remove icon-white"></i>&nbsp;{label_delete}
+		</a>
+	</td>
+</tr>
+<!--%%tpl_server_view_admin_actions-->
\ No newline at end of file
diff --git a/static/css/style.css b/static/css/style.css
index d5b0db4f..d453d968 100755
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -14,6 +14,22 @@ body {
 .sidebar-nav {
 	padding: 9px 0;
 }
+.sidebar-nav .btn {
+	margin: 5px 0;
+	min-width: 100px;
+}
+@media (max-width: 979px) {
+	.sidebar-nav .nav-list {
+		padding: 0;
+	}
+	.sidebar-nav li.nav-header {
+		display: none;
+	}
+	.sidebar-nav li {
+		float: left;
+		margin-right: 15px;
+	}
+}
 body.install{
     padding-top:20px;
 }
diff --git a/static/js/scripts.js b/static/js/scripts.js
index 1fe8910e..18829b16 100755
--- a/static/js/scripts.js
+++ b/static/js/scripts.js
@@ -14,6 +14,10 @@ function psm_tooltips() {
 	});
 }
 
+function psm_goTo(url) {
+	window.location = url;
+}
+
 function trim(str) {
     return str.replace(/^\s+|\s+$/g,"");
 }