diff --git a/models/repo_list.go b/models/repo_list.go
index 15e6144d06..ca7ae9793f 100644
--- a/models/repo_list.go
+++ b/models/repo_list.go
@@ -97,14 +97,14 @@ type SearchRepoOptions struct {
 	// Owner in we search search
 	//
 	// in: query
-	OwnerID     int64  `json:"uid"`
-	Searcher    *User  `json:"-"` //ID of the person who's seeking
-	OrderBy     string `json:"-"`
-	Private     bool   `json:"-"` // Include private repositories in results
-	Collaborate bool   `json:"-"` // Include collaborative repositories
-	Starred     bool   `json:"-"`
-	Page        int    `json:"-"`
-	IsProfile   bool   `json:"-"`
+	OwnerID     int64         `json:"uid"`
+	Searcher    *User         `json:"-"` //ID of the person who's seeking
+	OrderBy     SearchOrderBy `json:"-"`
+	Private     bool          `json:"-"` // Include private repositories in results
+	Collaborate bool          `json:"-"` // Include collaborative repositories
+	Starred     bool          `json:"-"`
+	Page        int           `json:"-"`
+	IsProfile   bool          `json:"-"`
 	// Limit of result
 	//
 	// maximum: setting.ExplorePagingNum
@@ -112,6 +112,25 @@ type SearchRepoOptions struct {
 	PageSize int `json:"limit"` // Can be smaller than or equal to setting.ExplorePagingNum
 }
 
+//SearchOrderBy is used to sort the result
+type SearchOrderBy string
+
+func (s SearchOrderBy) String() string {
+	return string(s)
+}
+
+// Strings for sorting result
+const (
+	SearchOrderByAlphabetically        SearchOrderBy = "name ASC"
+	SearchOrderByAlphabeticallyReverse               = "name DESC"
+	SearchOrderByLeastUpdated                        = "updated_unix ASC"
+	SearchOrderByRecentUpdated                       = "updated_unix DESC"
+	SearchOrderByOldest                              = "created_unix ASC"
+	SearchOrderByNewest                              = "created_unix DESC"
+	SearchOrderBySize                                = "size ASC"
+	SearchOrderBySizeReverse                         = "size DESC"
+)
+
 // SearchRepositoryByName takes keyword and part of repository name to search,
 // it returns results in given range and number of total results.
 func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, count int64, err error) {
@@ -164,7 +183,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 	}
 
 	if len(opts.OrderBy) == 0 {
-		opts.OrderBy = "name ASC"
+		opts.OrderBy = SearchOrderByAlphabetically
 	}
 
 	sess := x.NewSession()
@@ -193,7 +212,7 @@ func SearchRepositoryByName(opts *SearchRepoOptions) (repos RepositoryList, coun
 	if err = sess.
 		Where(cond).
 		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
-		OrderBy(opts.OrderBy).
+		OrderBy(opts.OrderBy.String()).
 		Find(&repos); err != nil {
 		return nil, 0, fmt.Errorf("Repo: %v", err)
 	}
@@ -217,7 +236,7 @@ func Repositories(opts *SearchRepoOptions) (_ RepositoryList, count int64, err e
 
 	if err = x.
 		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
-		OrderBy(opts.OrderBy).
+		OrderBy(opts.OrderBy.String()).
 		Find(&repos); err != nil {
 		return nil, 0, fmt.Errorf("Repo: %v", err)
 	}
@@ -236,7 +255,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
 	var cond = builder.NewCond()
 
 	if len(opts.OrderBy) == 0 {
-		opts.OrderBy = "updated_unix DESC"
+		opts.OrderBy = SearchOrderByRecentUpdated
 	}
 
 	if !opts.Private {
@@ -270,7 +289,7 @@ func GetRecentUpdatedRepositories(opts *SearchRepoOptions) (repos RepositoryList
 	if err = x.Where(cond).
 		Limit(opts.PageSize, (opts.Page-1)*opts.PageSize).
 		Limit(opts.PageSize).
-		OrderBy(opts.OrderBy).
+		OrderBy(opts.OrderBy.String()).
 		Find(&repos); err != nil {
 		return nil, 0, fmt.Errorf("Repo: %v", err)
 	}
diff --git a/routers/home.go b/routers/home.go
index 16d0720551..381bdd20ae 100644
--- a/routers/home.go
+++ b/routers/home.go
@@ -86,27 +86,27 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 		repos   []*models.Repository
 		count   int64
 		err     error
-		orderBy string
+		orderBy models.SearchOrderBy
 	)
 	ctx.Data["SortType"] = ctx.Query("sort")
 
 	switch ctx.Query("sort") {
 	case "oldest":
-		orderBy = "created_unix ASC"
+		orderBy = models.SearchOrderByOldest
 	case "recentupdate":
-		orderBy = "updated_unix DESC"
+		orderBy = models.SearchOrderByRecentUpdated
 	case "leastupdate":
-		orderBy = "updated_unix ASC"
+		orderBy = models.SearchOrderByLeastUpdated
 	case "reversealphabetically":
-		orderBy = "name DESC"
+		orderBy = models.SearchOrderByAlphabeticallyReverse
 	case "alphabetically":
-		orderBy = "name ASC"
+		orderBy = models.SearchOrderByAlphabetically
 	case "reversesize":
-		orderBy = "size DESC"
+		orderBy = models.SearchOrderBySizeReverse
 	case "size":
-		orderBy = "size ASC"
+		orderBy = models.SearchOrderBySize
 	default:
-		orderBy = "created_unix DESC"
+		orderBy = models.SearchOrderByNewest
 	}
 
 	keyword := strings.Trim(ctx.Query("q"), " ")
diff --git a/routers/user/profile.go b/routers/user/profile.go
index 23f5057727..50d0c2397f 100644
--- a/routers/user/profile.go
+++ b/routers/user/profile.go
@@ -107,26 +107,26 @@ func Profile(ctx *context.Context) {
 	var (
 		repos   []*models.Repository
 		count   int64
-		orderBy string
+		orderBy models.SearchOrderBy
 	)
 
 	ctx.Data["SortType"] = ctx.Query("sort")
 	switch ctx.Query("sort") {
 	case "newest":
-		orderBy = "created_unix DESC"
+		orderBy = models.SearchOrderByNewest
 	case "oldest":
-		orderBy = "created_unix ASC"
+		orderBy = models.SearchOrderByOldest
 	case "recentupdate":
-		orderBy = "updated_unix DESC"
+		orderBy = models.SearchOrderByRecentUpdated
 	case "leastupdate":
-		orderBy = "updated_unix ASC"
+		orderBy = models.SearchOrderByLeastUpdated
 	case "reversealphabetically":
-		orderBy = "name DESC"
+		orderBy = models.SearchOrderByAlphabeticallyReverse
 	case "alphabetically":
-		orderBy = "name ASC"
+		orderBy = models.SearchOrderByAlphabetically
 	default:
 		ctx.Data["SortType"] = "recentupdate"
-		orderBy = "updated_unix DESC"
+		orderBy = models.SearchOrderByNewest
 	}
 
 	// set default sort value if sort is empty.
@@ -149,7 +149,7 @@ func Profile(ctx *context.Context) {
 	case "stars":
 		ctx.Data["PageIsProfileStarList"] = true
 		if len(keyword) == 0 {
-			repos, err = ctxUser.GetStarredRepos(showPrivate, page, setting.UI.User.RepoPagingNum, orderBy)
+			repos, err = ctxUser.GetStarredRepos(showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
 			if err != nil {
 				ctx.Handle(500, "GetStarredRepos", err)
 				return
@@ -182,7 +182,7 @@ func Profile(ctx *context.Context) {
 	default:
 		if len(keyword) == 0 {
 			var total int
-			repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy)
+			repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
 			if err != nil {
 				ctx.Handle(500, "GetRepositories", err)
 				return