diff --git a/routers/org/home.go b/routers/org/home.go
new file mode 100644
index 000000000..9c24fe72f
--- /dev/null
+++ b/routers/org/home.go
@@ -0,0 +1,133 @@
+// Copyright 2019 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package org
+
+import (
+	"strings"
+
+	"code.gitea.io/gitea/models"
+	"code.gitea.io/gitea/modules/base"
+	"code.gitea.io/gitea/modules/context"
+	"code.gitea.io/gitea/modules/setting"
+)
+
+const (
+	tplOrgHome base.TplName = "org/home"
+)
+
+// Home show organization home page
+func Home(ctx *context.Context) {
+	ctx.SetParams(":org", ctx.Params(":username"))
+	context.HandleOrgAssignment(ctx)
+	if ctx.Written() {
+		return
+	}
+
+	org := ctx.Org.Organization
+
+	if !models.HasOrgVisible(org, ctx.User) {
+		ctx.NotFound("HasOrgVisible", nil)
+		return
+	}
+
+	ctx.Data["Title"] = org.DisplayName()
+
+	var orderBy models.SearchOrderBy
+	ctx.Data["SortType"] = ctx.Query("sort")
+	switch ctx.Query("sort") {
+	case "newest":
+		orderBy = models.SearchOrderByNewest
+	case "oldest":
+		orderBy = models.SearchOrderByOldest
+	case "recentupdate":
+		orderBy = models.SearchOrderByRecentUpdated
+	case "leastupdate":
+		orderBy = models.SearchOrderByLeastUpdated
+	case "reversealphabetically":
+		orderBy = models.SearchOrderByAlphabeticallyReverse
+	case "alphabetically":
+		orderBy = models.SearchOrderByAlphabetically
+	case "moststars":
+		orderBy = models.SearchOrderByStarsReverse
+	case "feweststars":
+		orderBy = models.SearchOrderByStars
+	case "mostforks":
+		orderBy = models.SearchOrderByForksReverse
+	case "fewestforks":
+		orderBy = models.SearchOrderByForks
+	default:
+		ctx.Data["SortType"] = "recentupdate"
+		orderBy = models.SearchOrderByRecentUpdated
+	}
+
+	keyword := strings.Trim(ctx.Query("q"), " ")
+	ctx.Data["Keyword"] = keyword
+
+	page := ctx.QueryInt("page")
+	if page <= 0 {
+		page = 1
+	}
+
+	var (
+		repos []*models.Repository
+		count int64
+		err   error
+	)
+	repos, count, err = models.SearchRepository(&models.SearchRepoOptions{
+		Keyword:            keyword,
+		OwnerID:            org.ID,
+		OrderBy:            orderBy,
+		Private:            ctx.IsSigned,
+		UserIsAdmin:        ctx.IsUserSiteAdmin(),
+		UserID:             ctx.Data["SignedUserID"].(int64),
+		Page:               page,
+		IsProfile:          true,
+		PageSize:           setting.UI.User.RepoPagingNum,
+		IncludeDescription: setting.UI.SearchRepoDescription,
+	})
+	if err != nil {
+		ctx.ServerError("SearchRepository", err)
+		return
+	}
+
+	var opts = models.FindOrgMembersOpts{
+		OrgID:      org.ID,
+		PublicOnly: true,
+		Limit:      25,
+	}
+
+	if ctx.User != nil {
+		isMember, err := org.IsOrgMember(ctx.User.ID)
+		if err != nil {
+			ctx.Error(500, "IsOrgMember")
+			return
+		}
+		opts.PublicOnly = !isMember && !ctx.User.IsAdmin
+	}
+
+	members, _, err := models.FindOrgMembers(opts)
+	if err != nil {
+		ctx.ServerError("FindOrgMembers", err)
+		return
+	}
+
+	membersCount, err := models.CountOrgMembers(opts)
+	if err != nil {
+		ctx.ServerError("CountOrgMembers", err)
+		return
+	}
+
+	ctx.Data["Repos"] = repos
+	ctx.Data["Total"] = count
+	ctx.Data["MembersTotal"] = membersCount
+	ctx.Data["Members"] = members
+	ctx.Data["Teams"] = org.Teams
+
+	pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
+	pager.SetDefaultParams(ctx)
+	ctx.Data["Page"] = pager
+
+	ctx.HTML(200, tplOrgHome)
+}
diff --git a/routers/org/members.go b/routers/org/members.go
index b9805c2c0..6bccb3d97 100644
--- a/routers/org/members.go
+++ b/routers/org/members.go
@@ -41,7 +41,7 @@ func Members(ctx *context.Context) {
 			ctx.Error(500, "IsOrgMember")
 			return
 		}
-		opts.PublicOnly = !isMember
+		opts.PublicOnly = !isMember && !ctx.User.IsAdmin
 	}
 
 	total, err := models.CountOrgMembers(opts)
diff --git a/routers/user/home.go b/routers/user/home.go
index 2eff88910..a1060f371 100644
--- a/routers/user/home.go
+++ b/routers/user/home.go
@@ -29,7 +29,6 @@ const (
 	tplDashboard base.TplName = "user/dashboard/dashboard"
 	tplIssues    base.TplName = "user/dashboard/issues"
 	tplProfile   base.TplName = "user/profile"
-	tplOrgHome   base.TplName = "org/home"
 )
 
 // getDashboardContextUser finds out dashboard is viewing as which context user.
@@ -463,120 +462,6 @@ func ShowGPGKeys(ctx *context.Context, uid int64) {
 	ctx.PlainText(200, buf.Bytes())
 }
 
-func showOrgProfile(ctx *context.Context) {
-	ctx.SetParams(":org", ctx.Params(":username"))
-	context.HandleOrgAssignment(ctx)
-	if ctx.Written() {
-		return
-	}
-
-	org := ctx.Org.Organization
-
-	if !models.HasOrgVisible(org, ctx.User) {
-		ctx.NotFound("HasOrgVisible", nil)
-		return
-	}
-
-	ctx.Data["Title"] = org.DisplayName()
-
-	var orderBy models.SearchOrderBy
-	ctx.Data["SortType"] = ctx.Query("sort")
-	switch ctx.Query("sort") {
-	case "newest":
-		orderBy = models.SearchOrderByNewest
-	case "oldest":
-		orderBy = models.SearchOrderByOldest
-	case "recentupdate":
-		orderBy = models.SearchOrderByRecentUpdated
-	case "leastupdate":
-		orderBy = models.SearchOrderByLeastUpdated
-	case "reversealphabetically":
-		orderBy = models.SearchOrderByAlphabeticallyReverse
-	case "alphabetically":
-		orderBy = models.SearchOrderByAlphabetically
-	case "moststars":
-		orderBy = models.SearchOrderByStarsReverse
-	case "feweststars":
-		orderBy = models.SearchOrderByStars
-	case "mostforks":
-		orderBy = models.SearchOrderByForksReverse
-	case "fewestforks":
-		orderBy = models.SearchOrderByForks
-	default:
-		ctx.Data["SortType"] = "recentupdate"
-		orderBy = models.SearchOrderByRecentUpdated
-	}
-
-	keyword := strings.Trim(ctx.Query("q"), " ")
-	ctx.Data["Keyword"] = keyword
-
-	page := ctx.QueryInt("page")
-	if page <= 0 {
-		page = 1
-	}
-
-	var (
-		repos []*models.Repository
-		count int64
-		err   error
-	)
-	repos, count, err = models.SearchRepository(&models.SearchRepoOptions{
-		Keyword:            keyword,
-		OwnerID:            org.ID,
-		OrderBy:            orderBy,
-		Private:            ctx.IsSigned,
-		UserIsAdmin:        ctx.IsUserSiteAdmin(),
-		UserID:             ctx.Data["SignedUserID"].(int64),
-		Page:               page,
-		IsProfile:          true,
-		PageSize:           setting.UI.User.RepoPagingNum,
-		IncludeDescription: setting.UI.SearchRepoDescription,
-	})
-	if err != nil {
-		ctx.ServerError("SearchRepository", err)
-		return
-	}
-
-	var opts = models.FindOrgMembersOpts{
-		OrgID:      org.ID,
-		PublicOnly: true,
-		Limit:      25,
-	}
-
-	if ctx.User != nil {
-		isMember, err := org.IsOrgMember(ctx.User.ID)
-		if err != nil {
-			ctx.Error(500, "IsOrgMember")
-			return
-		}
-		opts.PublicOnly = !isMember
-	}
-
-	members, _, err := models.FindOrgMembers(opts)
-	if err != nil {
-		ctx.ServerError("FindOrgMembers", err)
-		return
-	}
-
-	membersCount, err := models.CountOrgMembers(opts)
-	if err != nil {
-		ctx.ServerError("CountOrgMembers", err)
-		return
-	}
-
-	ctx.Data["Repos"] = repos
-	ctx.Data["Total"] = count
-	ctx.Data["MembersTotal"] = membersCount
-	ctx.Data["Members"] = members
-	ctx.Data["Teams"] = org.Teams
-
-	pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
-	pager.SetDefaultParams(ctx)
-	ctx.Data["Page"] = pager
-
-	ctx.HTML(200, tplOrgHome)
-}
-
 // Email2User show user page via email
 func Email2User(ctx *context.Context) {
 	u, err := models.GetUserByEmail(ctx.Query("email"))
diff --git a/routers/user/profile.go b/routers/user/profile.go
index 8a62ddeac..90e832b53 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -15,6 +15,7 @@ import (
 	"code.gitea.io/gitea/modules/context"
 	"code.gitea.io/gitea/modules/setting"
 	"code.gitea.io/gitea/modules/util"
+	"code.gitea.io/gitea/routers/org"
 	"code.gitea.io/gitea/routers/repo"
 )
 
@@ -83,7 +84,7 @@ func Profile(ctx *context.Context) {
 	}
 
 	if ctxUser.IsOrganization() {
-		showOrgProfile(ctx)
+		org.Home(ctx)
 		return
 	}