diff --git a/api/api.go b/api/api.go
index 88bb569945f8b99c714e4c1fc4e430a1cae20b50..39fafa779cc91518ea14d8347756e3dbcd113674 100644
--- a/api/api.go
+++ b/api/api.go
@@ -61,6 +61,7 @@ func Init(dbPath string, signKey string, mail *Mail, r *mux.Router) error {
 	r.HandleFunc("/order/{id:[0-9]+}", a.authNum(a.GetOrder)).Methods("GET")
 	r.HandleFunc("/order/{id:[0-9]+}", a.authNumRole(a.DeleteOrder)).Methods("DELETE")
 	r.HandleFunc("/order/active", a.auth(a.ListActiveOrders)).Methods("GET")
+	r.HandleFunc("/order/picks", a.authNum(a.ListOrderPicks)).Methods("GET")
 	r.HandleFunc("/order/{id:[0-9]+}/purchase", a.authNum(a.AddOrderPurchase)).Methods("POST")
 	return nil
 }
diff --git a/api/db/order.go b/api/db/order.go
index 72936c00c646f7169624c1adafe17fdcf8ba971d..015b1408f254762257091ea6f8fe652dd5dd1492 100644
--- a/api/db/order.go
+++ b/api/db/order.go
@@ -43,6 +43,15 @@ func (d *DB) ListOrders(active bool) (orders []Order, err error) {
 	return
 }
 
+func (d *DB) ListOrderPicks(num int) (orders []Order, err error) {
+	err = d.db.Select("*, member = ? as member_selected", num).
+		Table("(?) as orders", d.db.Model(&Order{}).Order("deadline desc")).
+		Group("name").Order("member_selected desc, deadline desc").Limit(15).
+		Preload(clause.Associations).
+		Find(&orders).Error
+	return
+}
+
 func (d *DB) GetOrder(memberNum int, id int) (order Order, transaction Transaction, err error) {
 	err = d.db.Preload(clause.Associations).
 		Preload("Transactions.OrderPurchase").
diff --git a/api/order.go b/api/order.go
index 1945e24693315b5d5c6a45529da42b933f221c73..dddd9c15481b857fb8a1517bcf451de9e2458a22 100644
--- a/api/order.go
+++ b/api/order.go
@@ -56,6 +56,23 @@ func (a *api) listOrders(active bool, w http.ResponseWriter, req *http.Request)
 	}
 }
 
+func (a *api) ListOrderPicks(num int, w http.ResponseWriter, req *http.Request) {
+	orders, err := a.db.ListOrderPicks(num)
+	if err != nil {
+		log.Printf("Can't list order picks: %v", err)
+		w.WriteHeader(http.StatusInternalServerError)
+		return
+	}
+
+	w.Header().Set("Content-Type", "application/json")
+	w.WriteHeader(http.StatusOK)
+	err = json.NewEncoder(w).Encode(orders)
+	if err != nil {
+		log.Printf("Can't encode order picks: %v", err)
+		w.WriteHeader(http.StatusInternalServerError)
+	}
+}
+
 func (a *api) GetOrder(num int, w http.ResponseWriter, req *http.Request) {
 	vars := mux.Vars(req)
 	id, _ := strconv.Atoi(vars["id"])
diff --git a/api/order_test.go b/api/order_test.go
index 53da7de5f06fd0887dc863029116b055eea46fd7..eae2fa976862ad805278d5b2ac1d624374f5d72f 100644
--- a/api/order_test.go
+++ b/api/order_test.go
@@ -24,6 +24,7 @@ func TestOrderAddList(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 	tapi.addTestOrder()
 
 	var orders []db.Order
@@ -50,6 +51,7 @@ func TestOrderActive(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 	tapi.addTestOrder()
 
 	var orders []db.Order
@@ -70,6 +72,7 @@ func TestOrderDelete(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 
 	order := testOrder
 	order.Deadline = time.Now().Add(-24 * time.Hour)
@@ -95,12 +98,7 @@ func TestOrderDelete(t *testing.T) {
 		t.Fatal("Can't create order purchase:", resp.Status)
 	}
 
-	dbPath := path.Join(tapi.testPath, "test.db")
-	database, err := db.Init(dbPath)
-	if err != nil {
-		t.Fatal("Can't initialize the db:", err)
-	}
-	orders = database.DeactivateOrders()
+	orders = tapi.deactivateOrders()
 	if len(orders) != 1 {
 		t.Error("Deactivated wrong orders:", orders)
 	}
@@ -195,6 +193,7 @@ func TestOrderNoDeactivation(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 
 	order := testOrder
 	now := time.Now()
@@ -213,12 +212,7 @@ func TestOrderNoDeactivation(t *testing.T) {
 		t.Fatal("Didn't find my new order")
 	}
 
-	dbPath := path.Join(tapi.testPath, "test.db")
-	database, err := db.Init(dbPath)
-	if err != nil {
-		t.Fatal("Can't initialize the db:", err)
-	}
-	orders = database.DeactivateOrders()
+	orders = tapi.deactivateOrders()
 	if len(orders) != 0 {
 		t.Error("Deactivated some orders:", orders)
 	}
@@ -236,6 +230,7 @@ func TestOrderDeactivation(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 
 	order := testOrder
 	order.Deadline = time.Now().Add(-24 * time.Hour)
@@ -313,6 +308,7 @@ func TestGetOrder(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 	tapi.addTestOrder()
 
 	var orders []db.Order
@@ -364,6 +360,7 @@ func TestUpdateOrderPurchase(t *testing.T) {
 	tapi := newTestAPI(t)
 	defer tapi.close()
 	tapi.addTestMember()
+	tapi.addTestProducts()
 	tapi.addTestOrder()
 
 	var orders []db.Order
@@ -423,9 +420,49 @@ func TestUpdateOrderPurchase(t *testing.T) {
 	}
 }
 
+func TestOrderPicks(t *testing.T) {
+	tapi := newTestAPI(t)
+	defer tapi.close()
+	tapi.addTestMember()
+	tapi.addTestProducts()
+	tapi.addTestOrder()
+
+	testOrderOld := testOrder
+	testOrderOld.Deadline = time.Now().Add(-24 * time.Hour)
+	resp := tapi.do("POST", "/order", testOrderOld, nil)
+	if resp.StatusCode != http.StatusCreated {
+		tapi.t.Fatal("Can't create old order:", resp.Status)
+	}
+
+	var orders []db.Order
+	resp = tapi.do("GET", "/order/picks", nil, &orders)
+	if resp.StatusCode != http.StatusOK {
+		t.Fatal("Can't get orders picks:", resp.Status)
+	}
+
+	if len(orders) != 1 {
+		t.Fatal("Wrong number of orders", len(orders), orders)
+	}
+	if orders[0].Name != testOrder.Name {
+		t.Error("Wrong name:", orders[0].Name)
+	}
+	if orders[0].Deadline.Day() != testOrder.Deadline.Day() {
+		t.Fatal("Wrong deadline", orders[0].Deadline, "!=", testOrder.Deadline)
+	}
+}
+
 func (tapi *testAPI) addTestOrder() {
 	resp := tapi.do("POST", "/order", testOrder, nil)
 	if resp.StatusCode != http.StatusCreated {
 		tapi.t.Fatal("Can't create order:", resp.Status)
 	}
 }
+
+func (tapi *testAPI) deactivateOrders() []db.Order {
+	dbPath := path.Join(tapi.testPath, "test.db")
+	database, err := db.Init(dbPath)
+	if err != nil {
+		tapi.t.Fatal("Can't initialize the db:", err)
+	}
+	return database.DeactivateOrders()
+}