diff --git a/models/repo_list.go b/models/repo_list.go
index 905408ae6..15e6144d0 100644
--- a/models/repo_list.go
+++ b/models/repo_list.go
@@ -120,10 +120,12 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 		opts.Page = 1
 	}
 
+	var starJoin bool
 	if opts.Starred && opts.OwnerID > 0 {
 		cond = builder.Eq{
 			"star.uid": opts.OwnerID,
 		}
+		starJoin = true
 	}
 
 	opts.Keyword = strings.ToLower(opts.Keyword)
@@ -133,34 +135,34 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 
 	// Append conditions
 	if !opts.Starred && opts.OwnerID > 0 {
-		cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
-	}
-	if !opts.Private {
-		cond = cond.And(builder.Eq{"is_private": false})
-	}
+		var searcherReposCond builder.Cond = builder.Eq{"owner_id": opts.OwnerID}
+		if opts.Searcher != nil {
+			var ownerIds []int64
 
-	if opts.Searcher != nil {
-		var ownerIds []int64
+			ownerIds = append(ownerIds, opts.Searcher.ID)
+			err = opts.Searcher.GetOrganizations(true)
 
-		ownerIds = append(ownerIds, opts.Searcher.ID)
-		err = opts.Searcher.GetOrganizations(true)
+			if err != nil {
+				return nil, 0, fmt.Errorf("Organization: %v", err)
+			}
 
-		if err != nil {
-			return nil, 0, fmt.Errorf("Organization: %v", err)
-		}
+			for _, org := range opts.Searcher.Orgs {
+				ownerIds = append(ownerIds, org.ID)
+			}
 
-		for _, org := range opts.Searcher.Orgs {
-			ownerIds = append(ownerIds, org.ID)
-		}
-
-		searcherReposCond := builder.In("owner_id", ownerIds)
-		if opts.Collaborate {
-			searcherReposCond = searcherReposCond.Or(builder.Expr(`id IN (SELECT repo_id FROM "access" WHERE access.user_id = ? AND owner_id != ?)`,
-				opts.Searcher.ID, opts.Searcher.ID))
+			searcherReposCond = searcherReposCond.Or(builder.In("owner_id", ownerIds))
+			if opts.Collaborate {
+				searcherReposCond = searcherReposCond.Or(builder.Expr("id IN (SELECT repo_id FROM `access` WHERE access.user_id = ? AND owner_id != ?)",
+					opts.Searcher.ID, opts.Searcher.ID))
+			}
 		}
 		cond = cond.And(searcherReposCond)
 	}
 
+	if !opts.Private {
+		cond = cond.And(builder.Eq{"is_private": false})
+	}
+
 	if len(opts.OrderBy) == 0 {
 		opts.OrderBy = "name ASC"
 	}
@@ -168,7 +170,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 	sess := x.NewSession()
 	defer sess.Close()
 
-	if opts.Starred && opts.OwnerID > 0 {
+	if starJoin {
 		count, err = sess.
 			Join("INNER", "star", "star.repo_id = repository.id").
 			Where(cond).
diff --git a/routers/home.go b/routers/home.go
index 0f7b21462..16d072055 100644
--- a/routers/home.go
+++ b/routers/home.go
@@ -112,11 +112,12 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 	keyword := strings.Trim(ctx.Query("q"), " ")
 	if len(keyword) == 0 {
 		repos, count, err = opts.Ranger(&models.SearchRepoOptions{
-			Page:     page,
-			PageSize: opts.PageSize,
-			Searcher: ctx.User,
-			OrderBy:  orderBy,
-			Private:  opts.Private,
+			Page:        page,
+			PageSize:    opts.PageSize,
+			Searcher:    ctx.User,
+			OrderBy:     orderBy,
+			Private:     opts.Private,
+			Collaborate: true,
 		})
 		if err != nil {
 			ctx.Handle(500, "opts.Ranger", err)
@@ -125,12 +126,13 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 	} else {
 		if isKeywordValid(keyword) {
 			repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
-				Keyword:  keyword,
-				OrderBy:  orderBy,
-				Private:  opts.Private,
-				Page:     page,
-				PageSize: opts.PageSize,
-				Searcher: ctx.User,
+				Keyword:     keyword,
+				OrderBy:     orderBy,
+				Private:     opts.Private,
+				Page:        page,
+				PageSize:    opts.PageSize,
+				Searcher:    ctx.User,
+				Collaborate: true,
 			})
 			if err != nil {
 				ctx.Handle(500, "SearchRepositoryByName", err)
diff --git a/routers/user/profile.go b/routers/user/profile.go
index f56ddc4ea..7380501f4 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -205,13 +205,14 @@ func Profile(ctx *context.Context) {
 			ctx.Data["Total"] = total
 		} else {
 			repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
-				Keyword:   keyword,
-				OwnerID:   ctxUser.ID,
-				OrderBy:   orderBy,
-				Private:   showPrivate,
-				Page:      page,
-				IsProfile: true,
-				PageSize:  setting.UI.User.RepoPagingNum,
+				Keyword:     keyword,
+				OwnerID:     ctxUser.ID,
+				OrderBy:     orderBy,
+				Private:     showPrivate,
+				Page:        page,
+				IsProfile:   true,
+				PageSize:    setting.UI.User.RepoPagingNum,
+				Collaborate: true,
 			})
 			if err != nil {
 				ctx.Handle(500, "SearchRepositoryByName", err)