diff --git a/client/routes/adminRouter.coffee b/client/routes/adminRouter.coffee
index c13d536dfe5969a3cd06135f5807a5eb93de977b..c528ebba2175f5397a3a8f260d5c19dde13d4571 100644
--- a/client/routes/adminRouter.coffee
+++ b/client/routes/adminRouter.coffee
@@ -1,10 +1,6 @@
 FlowRouter.route '/admin/users',
 	name: 'admin-users'
-	triggersExit: [ ->
-		Session.set 'showUserInfo'
-	]
 	action: ->
-		Session.set 'showUserInfo'
 		RocketChat.TabBar.showGroup 'adminusers'
 		BlazeLayout.render 'main', {center: 'adminUsers'}
 
diff --git a/client/startup/defaultRoomTypes.coffee b/client/startup/defaultRoomTypes.coffee
index ee2f83261e49ac3d6bcdb1b6298f895b739b8ebb..b6abf2bede258acdc6ecc9f6efb1337c1aca4e44 100644
--- a/client/startup/defaultRoomTypes.coffee
+++ b/client/startup/defaultRoomTypes.coffee
@@ -9,7 +9,6 @@ RocketChat.roomTypes.add 'c', 10,
 		name: 'channel'
 		path: '/channel/:name'
 		action: (params, queryParams) ->
-			Session.set 'showUserInfo'
 			openRoom 'c', params.name
 			RocketChat.TabBar.showGroup 'channel'
 		link: (sub) ->
@@ -24,7 +23,6 @@ RocketChat.roomTypes.add 'd', 20,
 		name: 'direct'
 		path: '/direct/:username'
 		action: (params, queryParams) ->
-			Session.set 'showUserInfo', params.username
 			openRoom 'd', params.username
 			RocketChat.TabBar.showGroup 'directmessage'
 		link: (sub) ->
@@ -39,7 +37,6 @@ RocketChat.roomTypes.add 'p', 30,
 		name: 'group'
 		path: '/group/:name'
 		action: (params, queryParams) ->
-			Session.set 'showUserInfo'
 			openRoom 'p', params.name
 			RocketChat.TabBar.showGroup 'privategroup'
 		link: (sub) ->
diff --git a/packages/rocketchat-lib/server/methods/setAdminStatus.coffee b/packages/rocketchat-lib/server/methods/setAdminStatus.coffee
index 542c5853fd094f682c17af4225fdc2527cf22cb4..fcee30136c488025b23b7dcf9e83eec9f3bf6818 100644
--- a/packages/rocketchat-lib/server/methods/setAdminStatus.coffee
+++ b/packages/rocketchat-lib/server/methods/setAdminStatus.coffee
@@ -6,9 +6,9 @@ Meteor.methods
 		unless RocketChat.authz.hasPermission( Meteor.userId(), 'assign-admin-role') is true
 			throw new Meteor.Error 'not-authorized', '[methods] setAdminStatus -> Not authorized'
 
+		user = Meteor.users.findOne({ _id: userId }, { fields: { username: 1 } })
+
 		if admin
-			RocketChat.authz.addUserRoles( userId, 'admin')
+			return Meteor.call('authorization:addUserToRole', 'admin', user.username);
 		else
-			RocketChat.authz.removeUserFromRoles( userId, 'admin')
-
-		return true
+			return Meteor.call('authorization:removeUserFromRole', 'admin', user.username);
diff --git a/packages/rocketchat-livechat/client/ui.js b/packages/rocketchat-livechat/client/ui.js
index 1ea73a3d0a5ba3023e1cf10725c5f15afc808648..2297b371d4134698109da9d0c8f5bfcf3a51d470 100644
--- a/packages/rocketchat-livechat/client/ui.js
+++ b/packages/rocketchat-livechat/client/ui.js
@@ -7,7 +7,6 @@ RocketChat.roomTypes.add('l', 5, {
 		name: 'live',
 		path: '/live/:name',
 		action: (params/*, queryParams*/) => {
-			Session.set('showUserInfo');
 			openRoom('l', params.name);
 			RocketChat.TabBar.showGroup('livechat', 'search');
 		},
diff --git a/packages/rocketchat-slashcommands-kick/client.coffee b/packages/rocketchat-slashcommands-kick/client.coffee
index acc40d33db03fc7e81cac9cf9e55487c96e3159b..ad9f6040f8486b0864cb5e4227edc68311193a53 100644
--- a/packages/rocketchat-slashcommands-kick/client.coffee
+++ b/packages/rocketchat-slashcommands-kick/client.coffee
@@ -3,9 +3,6 @@ RocketChat.slashCommands.add 'kick', (command, params, item) ->
 	if username is ''
 		return
 	username = username.replace('@', '')
-
-	if Session.get('showUserInfo') is username
-		Session.set('showUserInfo', null)
 ,
 	description: TAPi18n.__ 'Remove_someone_from_room'
 	params: '@username'
diff --git a/packages/rocketchat-theme/assets/stylesheets/base.less b/packages/rocketchat-theme/assets/stylesheets/base.less
index b99e66f02d6276db6f5f0d5cdb59e4724fa2a034..d71512e348eacc877e3299fbff745c5331ba094b 100644
--- a/packages/rocketchat-theme/assets/stylesheets/base.less
+++ b/packages/rocketchat-theme/assets/stylesheets/base.less
@@ -2977,13 +2977,13 @@ body:not(.is-cordova) {
 }
 
 .list-view {
+	z-index: 10;
 	padding: 5px 30px 20px;
 	.list {
 		display: flex;
 		flex-flow: column nowrap;
 		position: relative;
 		width: 100%;
-		height: 100%;
 	}
 	> .status {
 		margin: 5px 0 15px;
@@ -3051,33 +3051,55 @@ body:not(.is-cordova) {
 }
 
 .user-view {
-	padding: 20px;
+	z-index: 15;
+	overflow-y: auto;
+	overflow-x: hidden;
 	.about {
 		width: 100%;
 		margin-bottom: 20px;
 	}
 	.thumb {
-		float: left;
-		width: 100px;
-		height: 100px;
+		width: 100%;
+		height: 200px;
+
+		.transition(height .4s ease);
+
+		cursor: zoom-in;
+		cursor: -moz-zoom-in;
+		cursor: -webkit-zoom-in;
+
+		&.bigger {
+			height: 350px;
+			cursor: zoom-out;
+			cursor: -moz-zoom-out;
+			cursor: -webkit-zoom-out;
+		}
+
+		.avatar {
+			border-radius: 0;
+
+			.avatar-image {
+				border-radius: 0;
+			}
+		}
 	}
 	nav {
 		margin-left: -4px;
+		padding: 0 20px;
 		.back {
 			float: right;
 		}
 	}
 	.info {
-		margin-left: 120px;
 		white-space: normal;
-		.calc(width, ~'100% - 120px');
+		padding: 0 20px;
 		h3 {
 			-webkit-user-select: text;
 			-moz-user-select: text;
 			-ms-user-select: text;
 			user-select: text;
 			font-size: 24px;
-			margin-bottom: 8px;
+			margin: 8px 0;
 			line-height: 27px;
 			text-overflow: ellipsis;
 			width: 100%;
@@ -3223,6 +3245,7 @@ body:not(.is-cordova) {
 		}
 	}
 	.edit-form {
+		padding: 20px 20px 0 20px;
 		white-space: normal;
 		h3 {
 			font-size: 24px;
@@ -4007,19 +4030,6 @@ body:not(.is-cordova) {
 }
 
 @media all and(max-width: 500px) {
-	.user-view {
-		.thumb {
-			width: 60px;
-			height: 60px;
-		}
-		.info {
-			margin-left: 75px;
-			.calc(width, ~'100% - 120px');
-			h3 {
-				font-size: 20px;
-			}
-		}
-	}
 	.messages-container {
 		.message-form {
 			> .formatting-tips {
diff --git a/packages/rocketchat-theme/assets/stylesheets/rtl.less b/packages/rocketchat-theme/assets/stylesheets/rtl.less
index a4d396b60024594deb88744dc7176cdba411e166..4f2b24d02fdec669158771f0415d27035d96feb7 100644
--- a/packages/rocketchat-theme/assets/stylesheets/rtl.less
+++ b/packages/rocketchat-theme/assets/stylesheets/rtl.less
@@ -281,6 +281,7 @@
 	.flex-tab {
 		border-left: unset;
 		border-right: 1px solid;
+		border-right-color: @tertiary-background-color;
 		.left(0);
 		.transform(translateX(-100%));
 		.control {
@@ -380,18 +381,12 @@
 	}
 
 	.user-view {
-		.thumb {
-			float: right;
-		}
 		nav {
 			.margin-right(-4px);
 			.back {
 				float: left;
 			}
 		}
-		.info {
-			.margin-right(120px);
-		}
 		.stats {
 			li {
 				border-right: unset;
diff --git a/packages/rocketchat-theme/assets/stylesheets/utils/_colors.import.less b/packages/rocketchat-theme/assets/stylesheets/utils/_colors.import.less
index 96f1c1111730ebf97a2f733acbce02c30b5505ff..41e25bc46a5f95ad048da701b02be0076b0dc8ac 100755
--- a/packages/rocketchat-theme/assets/stylesheets/utils/_colors.import.less
+++ b/packages/rocketchat-theme/assets/stylesheets/utils/_colors.import.less
@@ -418,6 +418,7 @@ a.github-fork {
 	//background-color: @primary-background-color;
 	background-color: transparent;
 	color: @tertiary-font-color;
+
 	.custom-scroll(transparent, @custom-scrollbar-color);
 	header {
 		background-color: @primary-background-color;
@@ -884,10 +885,18 @@ a.github-fork {
 	}
 	.content {
 		.custom-scroll(transparent, #DADADA);
+
+		> div {
+			background-color: @secondary-background-color;
+		}
 	}
 }
 
 .list-view {
+	-webkit-overflow-scrolling: touch;
+	overflow-y: auto;
+	overflow-x: hidden;
+	.custom-scroll(transparent, #DADADA);
 	> .status {
 		p {
 			color: @secondary-font-color;
@@ -900,6 +909,8 @@ a.github-fork {
 }
 
 .user-view {
+	-webkit-overflow-scrolling: touch;
+	.custom-scroll(transparent, #DADADA);
 	.info {
 		h3 {
 			i.status-offline {
diff --git a/packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee b/packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee
index 935f3f4eadf720ef14960aa0f8f8c1053ca261e5..6ee9630d89bb3baf95b3aa8b0af7a9770724df78 100644
--- a/packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee
+++ b/packages/rocketchat-ui-admin/admin/users/adminUserEdit.coffee
@@ -17,16 +17,14 @@ Template.adminUserEdit.events
 		t.save()
 
 Template.adminUserEdit.onCreated ->
-	@user = this.data
+	@user = this.data.user
 
-	@cancel = =>
+	@cancel = (username) =>
 		if @user
-			RocketChat.TabBar.setTemplate 'adminUserInfo'
-			RocketChat.TabBar.setData @user
-			RocketChat.TabBar.showGroup 'adminusers-selected'
+			@data.back(username)
 		else
 			RocketChat.TabBar.closeFlex()
-			RocketChat.TabBar.showGroup 'adminusers'
+			@data.back(username)
 
 	@getUserData = =>
 		userData = { _id: @user?._id }
@@ -62,11 +60,8 @@ Template.adminUserEdit.onCreated ->
 						toastr.success t('User_updated_successfully')
 					else
 						toastr.success t('User_added_successfully')
-						@user = Meteor.users.findOne result
 
-					Meteor.subscribe 'fullUserData', userData.username, 1, =>
-						Session.set 'showUserInfo', @user._id
-						this.cancel()
+					@cancel(userData.username)
 
 				if error
 					toastr.error error.reason
diff --git a/packages/rocketchat-ui-admin/admin/users/adminUserInfo.coffee b/packages/rocketchat-ui-admin/admin/users/adminUserInfo.coffee
deleted file mode 100644
index f9cd3fb11c430a2cce3c724edbf26050ab759ebd..0000000000000000000000000000000000000000
--- a/packages/rocketchat-ui-admin/admin/users/adminUserInfo.coffee
+++ /dev/null
@@ -1,101 +0,0 @@
-Template.adminUserInfo.helpers
-	name: ->
-		return if @name then @name else TAPi18n.__ 'Unnamed'
-	email: ->
-		return @emails?[0]?.address
-	phoneNumber: ->
-		return '' unless @phoneNumber
-		if @phoneNumber.length > 10
-			return "(#{@phoneNumber.substr(0,2)}) #{@phoneNumber.substr(2,5)}-#{@phoneNumber.substr(7)}"
-		else
-			return "(#{@phoneNumber.substr(0,2)}) #{@phoneNumber.substr(2,4)}-#{@phoneNumber.substr(6)}"
-	lastLogin: ->
-		if @lastLogin
-			return moment(@lastLogin).format('LLL')
-	utcOffset: ->
-		if @utcOffset?
-			if @utcOffset > 0
-				@utcOffset = "+#{@utcOffset}"
-
-			return "UTC #{@utcOffset}"
-	hasAdminRole: ->
-		return RocketChat.authz.hasRole(@_id, 'admin')
-	active: ->
-		if @_id
-			user = Meteor.users.findOne(@_id)
-			return user && user.active
-
-Template.adminUserInfo.events
-	'click .deactivate': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		Meteor.call 'setUserActiveStatus', Template.currentData()._id, false, (error, result) ->
-			if result
-				toastr.success t('User_has_been_deactivated')
-			if error
-				toastr.error error.reason
-
-	'click .activate': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		Meteor.call 'setUserActiveStatus', Template.currentData()._id, true, (error, result) ->
-			if result
-				toastr.success t('User_has_been_activated')
-			if error
-				toastr.error error.reason
-
-	'click .make-admin': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		Meteor.call 'setAdminStatus', Template.currentData()._id, true, (error, result) ->
-			if result
-				toastr.success t('User_is_now_an_admin')
-			if error
-				toastr.error error.reason
-
-	'click .remove-admin': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		Meteor.call 'setAdminStatus', Template.currentData()._id, false, (error, result) ->
-			if result
-				toastr.success t('User_is_no_longer_an_admin')
-			if error
-				toastr.error error.reason
-
-	'click .delete': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		_id = Template.currentData()._id
-		swal {
-			title: t('Are_you_sure')
-			text: t('Delete_User_Warning')
-			type: 'warning'
-			showCancelButton: true
-			confirmButtonColor: '#DD6B55'
-			confirmButtonText: t('Yes_delete_it')
-			cancelButtonText: t('Cancel')
-			closeOnConfirm: false
-			html: false
-		}, ->
-			swal
-				title: t('Deleted')
-				text: t('User_has_been_deleted')
-				type: 'success'
-				timer: 2000
-				showConfirmButton: false
-
-			Meteor.call 'deleteUser', _id, (error, result) ->
-				if error
-					toastr.error error.reason
-
-				RocketChat.TabBar.setData()
-				RocketChat.TabBar.closeFlex()
-				RocketChat.TabBar.showGroup 'adminusers'
-
-				Session.set 'showUserInfo'
-
-	'click .edit-user': (e) ->
-		e.stopPropagation()
-		e.preventDefault()
-		RocketChat.TabBar.setTemplate 'adminUserEdit'
-		RocketChat.TabBar.setData Meteor.users.findOne(Template.currentData()._id)
diff --git a/packages/rocketchat-ui-admin/admin/users/adminUserInfo.html b/packages/rocketchat-ui-admin/admin/users/adminUserInfo.html
index bbf17a35256a33f93940752f647eda05d47f5d04..1f0a30a2f16e7f9fb53016beff6882c224a73848 100644
--- a/packages/rocketchat-ui-admin/admin/users/adminUserInfo.html
+++ b/packages/rocketchat-ui-admin/admin/users/adminUserInfo.html
@@ -1,25 +1,7 @@
 <template name="adminUserInfo">
-	{{> userInfo user=.}}
-	<nav>
-		{{#if hasPermission 'edit-other-user-info'}}
-		<button class='button lightblue edit-user button-block'><span><i class='icon-edit'></i> {{_ "Edit"}}</span></button>
-		{{/if}}
-		{{#if hasPermission 'assign-admin-role'}}
-			{{#if hasAdminRole}}
-			<button class='button lightblue remove-admin button-block'><span><i class='icon-shield'></i> {{_ "Remove_Admin"}}</span></button>
-			{{else}}
-			<button class='button lightblue make-admin button-block'><span><i class='icon-shield'></i> {{_ "Make_Admin"}}</span></button>
-			{{/if}}
-		{{/if}}
-		{{#if hasPermission 'edit-other-user-active-status'}}
-			{{#if active}}
-			<button class='button deactivate button-block'><span><i class='icon-block'></i> {{_ "Deactivate"}}</span></button>
-			{{else}}
-			<button class='button activate button-block'><span><i class='icon-ok-circled'></i> {{_ "Activate"}}</span></button>
-			{{/if}}
-		{{/if}}
-		{{#if hasPermission 'delete-user'}}
-		<button class='button delete red button-block'><span><i class='icon-trash'></i> {{_ "Delete"}}</span></button>
-		{{/if}}
-	</nav>
-</template>
\ No newline at end of file
+	<div class="content">
+		<div class="user-view">
+			{{> userInfo .}}
+		</div>
+	</div>
+</template>
diff --git a/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee b/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee
index 8fa49796c26a86cb56d40fea6b815b5355504189..95e8fc21e25470998dd89324e0f4fd20087f5e19 100644
--- a/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee
+++ b/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee
@@ -95,7 +95,6 @@ Template.adminUsers.events
 
 	'click .user-info': (e) ->
 		e.preventDefault()
-		Session.set 'showUserInfo', @_id
 		RocketChat.TabBar.setTemplate 'adminUserInfo'
 		RocketChat.TabBar.setData Meteor.users.findOne @_id
 		RocketChat.TabBar.openFlex()
diff --git a/packages/rocketchat-ui-admin/admin/users/adminUsers.html b/packages/rocketchat-ui-admin/admin/users/adminUsers.html
index 83eb4348fb6158d667c6ace6f284b34be7b2afc5..8fe12f38fb48ec3e8f80c7fa07359bfefd7c670c 100644
--- a/packages/rocketchat-ui-admin/admin/users/adminUsers.html
+++ b/packages/rocketchat-ui-admin/admin/users/adminUsers.html
@@ -53,8 +53,6 @@
 		</div>
 	</section>
 	<section class="flex-tab">
-		<div class="user-view">
-			{{> Template.dynamic template=flexTemplate data=flexData}}
-		</div>
+		{{> Template.dynamic template=flexTemplate data=flexData}}
 	</section>
 </template>
diff --git a/packages/rocketchat-ui-admin/package.js b/packages/rocketchat-ui-admin/package.js
index cee0e308e03e49839787734ec6eff4c4518ce4f0..3cdfd6660f0a582ca51def6f3b56e090c6f8e44b 100644
--- a/packages/rocketchat-ui-admin/package.js
+++ b/packages/rocketchat-ui-admin/package.js
@@ -48,7 +48,6 @@ Package.onUse(function(api) {
 	api.addFiles('admin/users/adminInviteUser.coffee', 'client');
 	api.addFiles('admin/users/adminUserChannels.coffee', 'client');
 	api.addFiles('admin/users/adminUserEdit.coffee', 'client');
-	api.addFiles('admin/users/adminUserInfo.coffee', 'client');
 	api.addFiles('admin/users/adminUsers.coffee', 'client');
 
 	api.addFiles('publications/adminRooms.js', 'server');
diff --git a/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee
index 6bfd82aa6e1ba4d48f62cab57ec2f464e97806c4..5867a05f4aa53b6f687a336fcf5cd627c6ef9dc4 100644
--- a/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee
+++ b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.coffee
@@ -80,20 +80,22 @@ Template.membersList.helpers
 			]
 		}
 
-	flexUserInfo: ->
-		username = Session.get('showUserInfo')
-		return Meteor.users.findOne({ username: String(username) }) or { username: String(username) }
-
 	showUserInfo: ->
 		webrtc = WebRTC.getInstanceByRoomId(this.rid)
 		videoActive = webrtc?.localUrl?.get()? or webrtc?.remoteItems?.get()?.length > 0
-		return Session.get('showUserInfo') and not videoActive
+		return Template.instance().showDetail.get() and not videoActive
 
-Template.membersList.events
-	"click .flex-tab .user-image > a" : (e) ->
-		RocketChat.TabBar.openFlex()
-		Session.set('showUserInfo', $(e.currentTarget).data('username'))
+	userInfoDetail: ->
+		room = ChatRoom.findOne(this.rid, { fields: { t: 1 } })
+
+		return {
+			username: Template.instance().userDetail.get()
+			clear: Template.instance().clearUserDetail
+			showAll: room?.t in ['c', 'p']
+			video: room?.t in ['d']
+		}
 
+Template.membersList.events
 	'click .see-all': (e, instance) ->
 		seeAll = instance.showAllUsers.get()
 		instance.showAllUsers.set(!seeAll)
@@ -122,7 +124,24 @@ Template.membersList.events
 	'click .show-more-users': (e, instance) ->
 		instance.usersLimit.set(instance.usersLimit.get() + 100)
 
-
 Template.membersList.onCreated ->
 	@showAllUsers = new ReactiveVar false
 	@usersLimit = new ReactiveVar 100
+	@userDetail = new ReactiveVar
+	@showDetail = new ReactiveVar false
+
+	@clearUserDetail = =>
+		@showDetail.set(false)
+		setTimeout =>
+			@clearRoomUserDetail()
+		, 500
+
+	@showUserDetail = (username) =>
+		@showDetail.set(username?)
+		@userDetail.set(username)
+
+	@clearRoomUserDetail = @data.clearUserDetail
+
+	@autorun =>
+		data = Template.currentData()
+		@showUserDetail data.userDetail
diff --git a/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html
index c1e2c76478d03ba4c9a1c4ee1af1757f45f5fea7..b20c5b9b7f9d87c90e3dcb3db1461113f7411717 100644
--- a/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html
+++ b/packages/rocketchat-ui-flextab/flex-tab/tabs/membersList.html
@@ -2,7 +2,7 @@
 	<div class="content">
 		{{> videoCall}}
 		{{#if isGroupChat}}
-			<div class="list-view{{#if $.Session.get 'showUserInfo'}} animated-hidden{{/if}}">
+			<div class="list-view animated">
 				{{#with roomUsers}}
 					<div class="status">
 						<h2>{{_ "Members_List"}}</h2>
@@ -39,7 +39,7 @@
 			</div>
 		{{/if}}
 		<div class="user-view animated{{#unless showUserInfo}} animated-hidden{{/unless}}">
-			{{> userInfo user=flexUserInfo showAll=isGroupChat video=isDirectChat}}
+			{{> userInfo (userInfoDetail)}}
 		</div>
 	</div>
 </template>
diff --git a/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee
index 524987ba4edcdfaf79fed16332e4e36ba31d99e2..ff373ff09758c2b3ca3844b4da47e5942220527d 100644
--- a/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee
+++ b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.coffee
@@ -1,37 +1,56 @@
 Template.userInfo.helpers
-	utc: ->
-		if @utcOffset?
-			if @utcOffset > 0
-				return '+' + @utcOffset
-			return @utcOffset
+	name: ->
+		user = Template.instance().user.get()
+		return if user.name then user.name else TAPi18n.__ 'Unnamed'
+
+	username: ->
+		user = Template.instance().user.get()
+		return user.username
+
+	email: ->
+		user = Template.instance().user.get()
+		return user.emails?[0]?.address
 
 	phoneNumber: ->
-		return '' unless @phoneNumber
-		if @phoneNumber.length > 10
-			return "(#{@phoneNumber.substr(0,2)}) #{@phoneNumber.substr(2,5)}-#{@phoneNumber.substr(7)}"
+		user = Template.instance().user.get()
+		return '' unless user.phoneNumber
+		if user.phoneNumber.length > 10
+			return "(#{user.phoneNumber.substr(0,2)}) #{user.phoneNumber.substr(2,5)}-#{user.phoneNumber.substr(7)}"
 		else
-			return "(#{@phoneNumber.substr(0,2)}) #{@phoneNumber.substr(2,4)}-#{@phoneNumber.substr(6)}"
+			return "(#{user.phoneNumber.substr(0,2)}) #{user.phoneNumber.substr(2,4)}-#{user.phoneNumber.substr(6)}"
+
+	utc: ->
+		user = Template.instance().user.get()
+		if user.utcOffset?
+			if user.utcOffset > 0
+				return '+' + user.utcOffset
+			return user.utcOffset
 
 	lastLogin: ->
-		if @lastLogin
-			return moment(@lastLogin).format('LLL')
+		user = Template.instance().user.get()
+		if user.lastLogin
+			return moment(user.lastLogin).format('LLL')
 
 	createdAt: ->
-		if @createdAt
-			return moment(@createdAt).format('LLL')
+		user = Template.instance().user.get()
+		if user.createdAt
+			return moment(user.createdAt).format('LLL')
 
 	canDirectMessage: (username) ->
 		return Meteor.user()?.username isnt username
 
 	linkedinUsername: ->
-		return s.strRight @services.linkedin.publicProfileUrl, '/in/'
+		user = Template.instance().user.get()
+		return s.strRight user?.services?.linkedin?.publicProfileUrl, '/in/'
 
 	servicesMeteor: ->
-		return @services?['meteor-developer']
+		user = Template.instance().user.get()
+		return user.services?['meteor-developer']
 
 	userTime: ->
-		if @utcOffset?
-			return Template.instance().now.get().utcOffset(@utcOffset).format('LT')
+		user = Template.instance().user.get()
+		if user.utcOffset?
+			return Template.instance().now.get().utcOffset(user.utcOffset).format('LT')
 
 	canRemoveUser: ->
 		return RocketChat.authz.hasAllPermission('remove-user', Session.get('openedRoom'))
@@ -41,31 +60,62 @@ Template.userInfo.helpers
 
 	userMuted: ->
 		room = ChatRoom.findOne(Session.get('openedRoom'))
-		if _.isArray(room?.muted) and room.muted.indexOf(Session.get('showUserInfo')) isnt -1
-			return true
-		return false
+		user = Template.instance().user.get()
+
+		return _.isArray(room?.muted) and room.muted.indexOf(user?.username) isnt -1
 
 	canSetModerator: ->
 		return RocketChat.authz.hasAllPermission('set-moderator', Session.get('openedRoom'))
 
 	isModerator: ->
-		return !!RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user?._id, roles: 'moderator' })
+		return !!RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": Template.instance().user.get()?._id, roles: 'moderator' })
 
 	canSetOwner: ->
 		return RocketChat.authz.hasAllPermission('set-owner', Session.get('openedRoom'))
 
 	isOwner: ->
-		return !!RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user?._id, roles: 'owner' })
+		return !!RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": Template.instance().user.get()?._id, roles: 'owner' })
+
+	user: ->
+		return Template.instance().user.get()
+
+	isLoading: ->
+		return Template.instance().loadingUserInfo.get()
+
+	hasAdminRole: ->
+		return RocketChat.authz.hasRole(Template.instance().user.get()?._id, 'admin')
+
+	active: ->
+		user = Template.instance().user.get()
+		return user?.active
+
+	editingUser: ->
+		return Template.instance().editingUser.get()
+
+	userToEdit: ->
+		instance = Template.instance()
+		return {
+			user: instance.user.get()
+			back: (username) ->
+				instance.editingUser.set()
+
+				if username?
+					user = instance.user.get()
+					if user?.username isnt username
+						instance.loadedUsername.set username
+		}
 
 Template.userInfo.events
+	'click .thumb': (e) ->
+		$(e.currentTarget).toggleClass('bigger')
+
 	'click .pvt-msg': (e) ->
-		Meteor.call 'createDirectMessage', Session.get('showUserInfo'), (error, result) ->
-			console.log result
+		Meteor.call 'createDirectMessage', @username, (error, result) =>
 			if error
 				return toastr.error error.reason
 
 			if result?.rid?
-				FlowRouter.go('direct', { username: Session.get('showUserInfo') })
+				FlowRouter.go('direct', { username: @username })
 
 	"click .flex-tab  .video-remote" : (e) ->
 		if RocketChat.TabBar.isFlexOpen()
@@ -93,10 +143,10 @@ Template.userInfo.events
 						if i.msRequestFullscreen
 							i.msRequestFullscreen()
 
-	'click .back': (e) ->
-		Session.set('showUserInfo', null)
+	'click .back': (e, instance) ->
+		instance.clear()
 
-	'click .remove-user': (e) ->
+	'click .remove-user': (e, instance) ->
 		e.preventDefault()
 		rid = Session.get('openedRoom')
 		room = ChatRoom.findOne rid
@@ -112,7 +162,7 @@ Template.userInfo.events
 				closeOnConfirm: false
 				html: false
 			}, =>
-				Meteor.call 'removeUserFromRoom', { rid: rid, username: @user.username }, (err, result) ->
+				Meteor.call 'removeUserFromRoom', { rid: rid, username: instance.user.get()?.username }, (err, result) =>
 					if err
 						return toastr.error(err.reason or err.message)
 					swal
@@ -121,11 +171,12 @@ Template.userInfo.events
 						type: 'success'
 						timer: 2000
 						showConfirmButton: false
-					Session.set('showUserInfo', null)
+
+					instance.clear()
 		else
 			toastr.error(TAPi18n.__ 'Not_allowed')
 
-	'click .mute-user': (e) ->
+	'click .mute-user': (e, instance) ->
 		e.preventDefault()
 		rid = Session.get('openedRoom')
 		room = ChatRoom.findOne rid
@@ -141,7 +192,7 @@ Template.userInfo.events
 				closeOnConfirm: false
 				html: false
 			}, =>
-				Meteor.call 'muteUserInRoom', { rid: rid, username: @user.username }, (err, result) ->
+				Meteor.call 'muteUserInRoom', { rid: rid, username: instance.user.get()?.username }, (err, result) ->
 					if err
 						return toastr.error(err.reason or err.message)
 					swal
@@ -156,7 +207,7 @@ Template.userInfo.events
 		rid = Session.get('openedRoom')
 		room = ChatRoom.findOne rid
 		if RocketChat.authz.hasAllPermission('mute-user', rid)
-			Meteor.call 'unmuteUserInRoom', { rid: rid, username: @user.username }, (err, result) ->
+			Meteor.call 'unmuteUserInRoom', { rid: rid, username: t.user.get()?.username }, (err, result) ->
 				if err
 					return toastr.error(err.reason or err.message)
 				toastr.success TAPi18n.__ 'User_unmuted_in_room'
@@ -166,54 +217,169 @@ Template.userInfo.events
 	'click .set-moderator': (e, t) ->
 		e.preventDefault()
 
-		userModerator = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user._id, roles: 'moderator' }, { fields: { _id: 1 } })
+		userModerator = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": t.user.get()?._id, roles: 'moderator' }, { fields: { _id: 1 } })
 		unless userModerator?
-			Meteor.call 'addRoomModerator', Session.get('openedRoom'), @user._id, (err, results) =>
+			Meteor.call 'addRoomModerator', Session.get('openedRoom'), t.user.get()?._id, (err, results) =>
 				if err
 					return toastr.error(err.reason or err.message)
 
 				room = ChatRoom.findOne(Session.get('openedRoom'))
-				toastr.success TAPi18n.__ 'User__username__is_now_a_moderator_of__room_name_', { username: @user.username, room_name: room.name }
+				toastr.success TAPi18n.__ 'User__username__is_now_a_moderator_of__room_name_', { username: @username, room_name: room.name }
 
 	'click .unset-moderator': (e, t) ->
 		e.preventDefault()
 
-		userModerator = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user._id, roles: 'moderator' }, { fields: { _id: 1 } })
+		userModerator = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": t.user.get()?._id, roles: 'moderator' }, { fields: { _id: 1 } })
 		if userModerator?
-			Meteor.call 'removeRoomModerator', Session.get('openedRoom'), @user._id, (err, results) =>
+			Meteor.call 'removeRoomModerator', Session.get('openedRoom'), t.user.get()?._id, (err, results) =>
 				if err
 					return toastr.error(err.reason or err.message)
 
 				room = ChatRoom.findOne(Session.get('openedRoom'))
-				toastr.success TAPi18n.__ 'User__username__removed_from__room_name__moderators', { username: @user.username, room_name: room.name }
+				toastr.success TAPi18n.__ 'User__username__removed_from__room_name__moderators', { username: @username, room_name: room.name }
 
 	'click .set-owner': (e, t) ->
 		e.preventDefault()
 
-		userOwner = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user._id, roles: 'owner' }, { fields: { _id: 1 } })
+		userOwner = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": t.user.get()?._id, roles: 'owner' }, { fields: { _id: 1 } })
 		unless userOwner?
-			Meteor.call 'addRoomOwner', Session.get('openedRoom'), @user._id, (err, results) =>
+			Meteor.call 'addRoomOwner', Session.get('openedRoom'), t.user.get()?._id, (err, results) =>
 				if err
 					return toastr.error(err.reason or err.message)
 
 				room = ChatRoom.findOne(Session.get('openedRoom'))
-				toastr.success TAPi18n.__ 'User__username__is_now_a_owner_of__room_name_', { username: @user.username, room_name: room.name }
+				toastr.success TAPi18n.__ 'User__username__is_now_a_owner_of__room_name_', { username: @username, room_name: room.name }
 
 	'click .unset-owner': (e, t) ->
 		e.preventDefault()
 
-		userOwner = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": @user._id, roles: 'owner' }, { fields: { _id: 1 } })
+		userOwner = RoomRoles.findOne({ rid: Session.get('openedRoom'), "u._id": t.user.get()?._id, roles: 'owner' }, { fields: { _id: 1 } })
 		if userOwner?
-			Meteor.call 'removeRoomOwner', Session.get('openedRoom'), @user._id, (err, results) =>
+			Meteor.call 'removeRoomOwner', Session.get('openedRoom'), t.user.get()?._id, (err, results) =>
 				if err
 					return toastr.error(TAPi18n.__(err.error))
 
 				room = ChatRoom.findOne(Session.get('openedRoom'))
-				toastr.success TAPi18n.__ 'User__username__removed_from__room_name__owners', { username: @user.username, room_name: room.name }
+				toastr.success TAPi18n.__ 'User__username__removed_from__room_name__owners', { username: @username, room_name: room.name }
+
+	'click .deactivate': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+		Meteor.call 'setUserActiveStatus', instance.user.get()?._id, false, (error, result) ->
+			if result
+				toastr.success t('User_has_been_deactivated')
+			if error
+				toastr.error error.reason
+
+	'click .activate': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+		Meteor.call 'setUserActiveStatus', instance.user.get()?._id, true, (error, result) ->
+			if result
+				toastr.success t('User_has_been_activated')
+			if error
+				toastr.error error.reason
+
+	'click .make-admin': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+		Meteor.call 'setAdminStatus', instance.user.get()?._id, true, (error, result) ->
+			if result
+				toastr.success t('User_is_now_an_admin')
+			if error
+				toastr.error error.reason
+
+	'click .remove-admin': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+		Meteor.call 'setAdminStatus', instance.user.get()?._id, false, (error, result) ->
+			if result
+				toastr.success t('User_is_no_longer_an_admin')
+			if error
+				toastr.error error.reason
+
+	'click .delete': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+		_id = instance.user.get()?._id
+		swal {
+			title: t('Are_you_sure')
+			text: t('Delete_User_Warning')
+			type: 'warning'
+			showCancelButton: true
+			confirmButtonColor: '#DD6B55'
+			confirmButtonText: t('Yes_delete_it')
+			cancelButtonText: t('Cancel')
+			closeOnConfirm: false
+			html: false
+		}, ->
+			swal.disableButtons()
+
+			Meteor.call 'deleteUser', _id, (error, result) ->
+				if error
+					toastr.error error.reason
+					swal.enableButtons()
+				else
+					swal
+						title: t('Deleted')
+						text: t('User_has_been_deleted')
+						type: 'success'
+						timer: 2000
+						showConfirmButton: false
+
+					RocketChat.TabBar.closeFlex()
+
+	'click .edit-user': (e, instance) ->
+		e.stopPropagation()
+		e.preventDefault()
+
+		instance.editingUser.set instance.user.get()._id
 
 Template.userInfo.onCreated ->
 	@now = new ReactiveVar moment()
-	self = @
-	Meteor.setInterval ->
-		self.now.set moment()
+
+	@user = new ReactiveVar
+
+	@editingUser = new ReactiveVar
+
+	@loadingUserInfo = new ReactiveVar true
+
+	@loadedUsername = new ReactiveVar
+
+	Meteor.setInterval =>
+		@now.set moment()
 	, 30000
+
+	@autorun =>
+		username = @loadedUsername.get()
+
+		if not username?
+			@loadingUserInfo.set false
+			return
+
+		@loadingUserInfo.set true
+
+		@subscribe 'fullUserData', username, 1, =>
+			@loadingUserInfo.set false
+
+	@autorun =>
+		data = Template.currentData()
+		if data.clear?
+			@clear = data.clear
+
+	@autorun =>
+		data = Template.currentData()
+		user = @user.get()
+		@loadedUsername.set user?.username or data?.username
+
+	@autorun =>
+		data = Template.currentData()
+		if data.username?
+			filter = { username: data.username }
+		else if data._id?
+			filter = { _id: data._id }
+
+		user = Meteor.users.findOne(filter)
+
+		@user.set user
+
diff --git a/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html
index bad3b31f4786ebbccbd7a98714f4ca2b2d080b01..bba80021f9250df006f1d9535947b69bb9a7fd8c 100644
--- a/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html
+++ b/packages/rocketchat-ui-flextab/flex-tab/tabs/userInfo.html
@@ -1,64 +1,94 @@
 <template name="userInfo">
-	{{#if $.Session.get 'showUserInfo'}}
-		{{#with user}}
-		<div class="about clearfix">
-			<div class="thumb">
-				{{> avatar username=username}}
+	{{#if isLoading}}
+		{{> loading}}
+	{{else}}
+		{{#if editingUser}}
+			{{> adminUserEdit (userToEdit)}}
+		{{else}}
+			{{#with user}}
+			<div class="about clearfix">
+				<div class="thumb">
+					{{> avatar username=username}}
+				</div>
+				<div class="info">
+					<h3 title="{{username}}"><i class="status-{{status}}"></i> {{username}}</h3>
+					<p>{{name}}</p>
+					{{#if utc}}<p><i class="icon-clock"></i>{{userTime}} (UTC {{utc}})</p>{{/if}}
+					{{#if hasPermission 'view-full-other-user-info'}}
+						{{#each emails}} <p><i class="icon-mail"></i> {{address}}{{#if verified}}&nbsp;<i class="icon-ok"></i>{{/if}}</p> {{/each}}
+						{{#each phone}} <p><i class="icon-phone"></i> {{phoneNumber}}</p> {{/each}}
+						{{#if lastLogin}} <p><i class="icon-calendar"></i> {{_ "Created_at"}}: {{createdAt}}</p> {{/if}}
+						{{#if lastLogin}} <p><i class="icon-calendar"></i> {{_ "Last_login"}}: {{lastLogin}}</p> {{/if}}
+						{{#if services.facebook.id}} <p><i class="icon-facebook"></i><a href="{{services.facebook.link}}" target="_blank">{{services.facebook.name}}</a></p> {{/if}}
+						{{#if services.github.id}} <p><i class="icon-github-circled"></i><a href="https://www.github.com/{{services.github.username}}" target="_blank">{{services.github.username}}</a></p> {{/if}}
+						{{#if services.gitlab.id}} <p><i class="icon-gitlab"></i>{{services.gitlab.username}}</p> {{/if}}
+						{{#if services.google.id}} <p><i class="icon-gplus"></i><a href="https://plus.google.com/{{services.google.id}}" target="_blank">{{services.google.name}}</a></p> {{/if}}
+						{{#if services.linkedin.id}} <p><i class="icon-linkedin"></i><a href="{{services.linkedin.publicProfileUrl}}" target="_blank">{{linkedinUsername}}</a></p> {{/if}}
+						{{#if servicesMeteor.id}} <p><i class="icon-meteor"></i>{{servicesMeteor.username}}</p> {{/if}}
+						{{#if services.twitter.id}} <p><i class="icon-twitter"></i><a href="https://twitter.com/{{services.twitter.screenName}}" target="_blank">{{services.twitter.screenName}}</a></p> {{/if}}
+						{{#if services.wordpress.id}} <p><i class="icon-wordpress"></i>{{services.wordpress.user_login}}</p> {{/if}}
+					{{/if}}
+				</div>
 			</div>
-			<div class="info">
-				<h3 title="{{username}}"><i class="status-{{status}}"></i> {{username}}</h3>
-				<p>{{name}}</p>
-				{{#if utc}}<p><i class="icon-clock"></i>{{userTime}} (UTC {{utc}})</p>{{/if}}
-				{{#if hasPermission 'view-full-other-user-info'}}
-					{{#each emails}} <p><i class="icon-mail"></i> {{address}}{{#if verified}}&nbsp;<i class="icon-ok"></i>{{/if}}</p> {{/each}}
-					{{#each phone}} <p><i class="icon-phone"></i> {{phoneNumber}}</p> {{/each}}
-					{{#if lastLogin}} <p><i class="icon-calendar"></i> {{_ "Created_at"}}: {{createdAt}}</p> {{/if}}
-					{{#if lastLogin}} <p><i class="icon-calendar"></i> {{_ "Last_login"}}: {{lastLogin}}</p> {{/if}}
-					{{#if services.facebook.id}} <p><i class="icon-facebook"></i><a href="{{services.facebook.link}}" target="_blank">{{services.facebook.name}}</a></p> {{/if}}
-					{{#if services.github.id}} <p><i class="icon-github-circled"></i><a href="https://www.github.com/{{services.github.username}}" target="_blank">{{services.github.username}}</a></p> {{/if}}
-					{{#if services.gitlab.id}} <p><i class="icon-gitlab"></i>{{services.gitlab.username}}</p> {{/if}}
-					{{#if services.google.id}} <p><i class="icon-gplus"></i><a href="https://plus.google.com/{{services.google.id}}" target="_blank">{{services.google.name}}</a></p> {{/if}}
-					{{#if services.linkedin.id}} <p><i class="icon-linkedin"></i><a href="{{services.linkedin.publicProfileUrl}}" target="_blank">{{linkedinUsername}}</a></p> {{/if}}
-					{{#if servicesMeteor.id}} <p><i class="icon-meteor"></i>{{servicesMeteor.username}}</p> {{/if}}
-					{{#if services.twitter.id}} <p><i class="icon-twitter"></i><a href="https://twitter.com/{{services.twitter.screenName}}" target="_blank">{{services.twitter.screenName}}</a></p> {{/if}}
-					{{#if services.wordpress.id}} <p><i class="icon-wordpress"></i>{{services.wordpress.user_login}}</p> {{/if}}
+			{{/with}}
+			<nav>
+				{{> videoButtons}}
+
+				{{#if showAll}}
+					{{#if canDirectMessage user.username}}
+						<button class='button button-block pvt-msg'><span><i class='icon-chat'></i> {{_ "Conversation"}}</span></button>
+					{{/if}}
+					{{#if canSetOwner}}
+						{{#if isOwner}}
+							<button class="button button-block unset-owner lightblue"><span>{{_ "Remove_as_owner"}}</span></button>
+						{{else}}
+							<button class="button button-block set-owner lightblue"><span>{{_ "Set_as_owner"}}</span></button>
+						{{/if}}
+					{{/if}}
+					{{#if canSetModerator}}
+						{{#if isModerator}}
+							<button class="button button-block unset-moderator lightblue"><span>{{_ "Remove_as_moderator"}}</span></button>
+						{{else}}
+							<button class="button button-block set-moderator lightblue"><span>{{_ "Set_as_moderator"}}</span></button>
+						{{/if}}
+					{{/if}}
+					{{#if canRemoveUser}}
+						<button class="button button-block remove-user red"><span>{{_ "Remove_from_room"}}</span></button>
+					{{/if}}
+					{{#if canMuteUser}}
+						{{#if userMuted}}
+							<button class="button button-block unmute-user primary"><span>{{_ "Unmute_user"}}</span></button>
+						{{else}}
+							<button class="button button-block mute-user red"><span>{{_ "Mute_user"}}</span></button>
+						{{/if}}
+					{{/if}}
 				{{/if}}
-			</div>
-		</div>
-		{{/with}}
-		<nav>
-			{{> videoButtons}}
 
-			{{#if showAll}}
-				{{#if canDirectMessage user.username}}
-					<button class='button button-block pvt-msg'><span><i class='icon-chat'></i> {{_ "Conversation"}}</span></button>
+				{{#if hasPermission 'edit-other-user-info'}}
+				<button class='button lightblue edit-user button-block'><span><i class='icon-edit'></i> {{_ "Edit"}}</span></button>
 				{{/if}}
-				{{#if canSetOwner}}
-					{{#if isOwner}}
-						<button class="button button-block unset-owner lightblue"><span>{{_ "Remove_as_owner"}}</span></button>
+				{{#if hasPermission 'assign-admin-role'}}
+					{{#if hasAdminRole}}
+					<button class='button lightblue remove-admin button-block'><span><i class='icon-shield'></i> {{_ "Remove_Admin"}}</span></button>
 					{{else}}
-						<button class="button button-block set-owner lightblue"><span>{{_ "Set_as_owner"}}</span></button>
+					<button class='button lightblue make-admin button-block'><span><i class='icon-shield'></i> {{_ "Make_Admin"}}</span></button>
 					{{/if}}
 				{{/if}}
-				{{#if canSetModerator}}
-					{{#if isModerator}}
-						<button class="button button-block unset-moderator lightblue"><span>{{_ "Remove_as_moderator"}}</span></button>
+				{{#if hasPermission 'edit-other-user-active-status'}}
+					{{#if active}}
+					<button class='button deactivate button-block'><span><i class='icon-block'></i> {{_ "Deactivate"}}</span></button>
 					{{else}}
-						<button class="button button-block set-moderator lightblue"><span>{{_ "Set_as_moderator"}}</span></button>
+					<button class='button activate button-block'><span><i class='icon-ok-circled'></i> {{_ "Activate"}}</span></button>
 					{{/if}}
 				{{/if}}
-				{{#if canRemoveUser}}
-					<button class="button button-block remove-user red"><span>{{_ "Remove_from_room"}}</span></button>
+				{{#if hasPermission 'delete-user'}}
+				<button class='button delete red button-block'><span><i class='icon-trash'></i> {{_ "Delete"}}</span></button>
 				{{/if}}
-				{{#if canMuteUser}}
-					{{#if userMuted}}
-						<button class="button button-block unmute-user primary"><span>{{_ "Unmute_user"}}</span></button>
-					{{else}}
-						<button class="button button-block mute-user red"><span>{{_ "Mute_user"}}</span></button>
-					{{/if}}
+
+				{{#if showAll}}
+					<button class='button secondary back'><span>{{_ "View_All"}} <i class='icon-angle-right'></i></span></button>
 				{{/if}}
-				<button class='button secondary back'><span>{{_ "View_All"}} <i class='icon-angle-right'></i></span></button>
-			{{/if}}
-		</nav>
+			</nav>
+		{{/if}}
 	{{/if}}
 </template>
diff --git a/packages/rocketchat-ui/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee
index a9702a673028d92ddc0a8810a5a342d254abd6f9..a7797768fae69faf80f930293db11aea0ef569df 100644
--- a/packages/rocketchat-ui/views/app/room.coffee
+++ b/packages/rocketchat-ui/views/app/room.coffee
@@ -7,8 +7,6 @@ isSubscribed = (_id) ->
 favoritesEnabled = ->
 	return !RocketChat.settings.get 'Disable_Favorite_Rooms'
 
-
-# @TODO bug com o botão para "rolar até o fim" (novas mensagens) quando há uma mensagem com texto que gere rolagem horizontal
 Template.room.helpers
 	# showFormattingTips: ->
 	# 	return RocketChat.settings.get('Message_ShowFormattingTips') and (RocketChat.Markdown or RocketChat.Highlight)
@@ -186,7 +184,11 @@ Template.room.helpers
 		return RocketChat.TabBar.getTemplate()
 
 	flexData: ->
-		return _.extend { rid: this._id }, RocketChat.TabBar.getData()
+		return _.extend {
+			rid: this._id
+			userDetail: Template.instance().userDetail.get(),
+			clearUserDetail: Template.instance().clearUserDetail
+		}, RocketChat.TabBar.getData()
 
 	adminClass: ->
 		return 'admin' if RocketChat.authz.hasRole(Meteor.userId(), 'admin')
@@ -354,17 +356,14 @@ Template.room.events
 			$('#room-title-field').focus().select()
 		, 10
 
-	"click .flex-tab .user-image > a" : (e) ->
+	"click .flex-tab .user-image > a" : (e, instance) ->
 		RocketChat.TabBar.openFlex()
-		Session.set('showUserInfo', @username)
+		instance.setUserDetail @username
 
-	'click .user-card-message': (e) ->
+	'click .user-card-message': (e, instance) ->
 		roomData = Session.get('roomData' + this._arguments[1].rid)
 		if roomData.t in ['c', 'p']
-			# Session.set('flexOpened', true)
-			Session.set('showUserInfo', $(e.currentTarget).data('username'))
-		# else
-			# Session.set('flexOpened', true)
+			instance.setUserDetail this._arguments[1].u.username
 		RocketChat.TabBar.setTemplate 'membersList'
 
 	'scroll .wrapper': _.throttle (e, instance) ->
@@ -410,14 +409,15 @@ Template.room.events
 	'click .message-dropdown-close': ->
 		$('.message-dropdown:visible').hide()
 
-	"click .mention-link": (e) ->
+	"click .mention-link": (e, instance) ->
 		channel = $(e.currentTarget).data('channel')
 		if channel?
 			FlowRouter.go 'channel', {name: channel}
 			return
 
 		RocketChat.TabBar.setTemplate 'membersList'
-		Session.set('showUserInfo', $(e.currentTarget).data('username'))
+		instance.setUserDetail $(e.currentTarget).data('username')
+
 		RocketChat.TabBar.openFlex()
 
 	'click .image-to-download': (event) ->
@@ -464,24 +464,6 @@ Template.room.events
 
 		fileUpload filesToUpload
 
-	'click .deactivate': ->
-		username = Session.get('showUserInfo')
-		user = Meteor.users.findOne { username: String(username) }
-		Meteor.call 'setUserActiveStatus', user?._id, false, (error, result) ->
-			if result
-				toastr.success t('User_has_been_deactivated')
-			if error
-				toastr.error error.reason
-
-	'click .activate': ->
-		username = Session.get('showUserInfo')
-		user = Meteor.users.findOne { username: String(username) }
-		Meteor.call 'setUserActiveStatus', user?._id, true, (error, result) ->
-			if result
-				toastr.success t('User_has_been_activated')
-			if error
-				toastr.error error.reason
-
 	'load img': (e, template) ->
 		template.sendToBottomIfNecessary?()
 
@@ -527,6 +509,8 @@ Template.room.onCreated ->
 	this.selectedRange = []
 	this.selectablePointer = null
 
+	this.userDetail = new ReactiveVar FlowRouter.getParam('username')
+
 	this.resetSelection = (enabled) =>
 		this.selectable.set(enabled)
 		$('.messages-box .message.selected').removeClass 'selected'
@@ -561,8 +545,11 @@ Template.room.onCreated ->
 
 		return previewMessages
 
-	@autorun =>
-		@subscribe 'fullUserData', Session.get('showUserInfo'), 1
+	this.setUserDetail = (username) =>
+		this.userDetail.set username
+
+	this.clearUserDetail = =>
+		this.userDetail.set null
 
 	Meteor.call 'getRoomRoles', @data._id, (error, results) ->
 		if error
diff --git a/server/publications/fullUserData.coffee b/server/publications/fullUserData.coffee
index 3897e8c107b1d66ac24c45cef37f7915749b144f..64c265b817e94384e80e23aed43d39a765933bfe 100644
--- a/server/publications/fullUserData.coffee
+++ b/server/publications/fullUserData.coffee
@@ -18,8 +18,9 @@ Meteor.publish 'fullUserData', (filter, limit) ->
 			lastLogin: 1
 			active: 1
 			services: 1
-			requirePasswordChange : 1
-			requirePasswordChangeReason : 1
+			requirePasswordChange: 1
+			requirePasswordChangeReason: 1
+			roles: 1
 	else
 		limit = 1
 
diff --git a/server/publications/userData.coffee b/server/publications/userData.coffee
index 3f84dc2b2b84001da2dac5e6f4cda93462c50136..99e2e5a5f7974f95eb8976370fd9e7f14092d3f5 100644
--- a/server/publications/userData.coffee
+++ b/server/publications/userData.coffee
@@ -14,8 +14,8 @@ Meteor.publish 'userData', ->
 			language: 1
 			settings: 1
 			defaultRoom: 1
-			'services.github.id': 1
-			'services.gitlab.id': 1
+			'services.github': 1
+			'services.gitlab': 1
 			requirePasswordChange: 1
 			requirePasswordChangeReason: 1
 			'services.password.bcrypt': 1