diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 014aa2bce..33678c0d2 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -140,6 +140,8 @@ var migrations = []Migration{
 	NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
 	// v45 -> v46
 	NewMigration("remove index column from repo_unit table", removeIndexColumnFromRepoUnitTable),
+	// v46 -> v47
+	NewMigration("remove organization watch repositories", removeOrganizationWatchRepo),
 }
 
 // Migrate database to current version
diff --git a/models/migrations/v46.go b/models/migrations/v46.go
new file mode 100644
index 000000000..3cc35a300
--- /dev/null
+++ b/models/migrations/v46.go
@@ -0,0 +1,36 @@
+// Copyright 2017 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 migrations
+
+import (
+	"github.com/go-xorm/xorm"
+)
+
+func removeOrganizationWatchRepo(x *xorm.Engine) error {
+	// UserType defines the user type
+	type UserType int
+
+	const (
+		// UserTypeIndividual defines an individual user
+		UserTypeIndividual UserType = iota // Historic reason to make it starts at 0.
+
+		// UserTypeOrganization defines an organization
+		UserTypeOrganization
+	)
+
+	sess := x.NewSession()
+	defer sess.Close()
+	if err := sess.Begin(); err != nil {
+		return err
+	}
+	if _, err := sess.Exec("DELETE FROM watch WHERE id IN (SELECT watch.id FROM watch INNER JOIN user ON watch.user_id = user.id WHERE `user`.`type` = ?)", UserTypeOrganization); err != nil {
+		return err
+	}
+	if _, err := sess.Exec("UPDATE `repository` SET num_watches = (SELECT count(*) FROM watch WHERE `repository`.`id` = watch.repo_id)"); err != nil {
+		return err
+	}
+
+	return sess.Commit()
+}
diff --git a/models/repo.go b/models/repo.go
index f457bdb22..740bbe8da 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -1295,7 +1295,7 @@ func createRepository(e *xorm.Session, doer, u *User, repo *Repository) (err err
 		}
 	}
 
-	if err = watchRepo(e, u.ID, repo.ID, true); err != nil {
+	if err = watchRepo(e, doer.ID, repo.ID, true); err != nil {
 		return fmt.Errorf("watchRepo: %v", err)
 	} else if err = newRepoAction(e, u, repo); err != nil {
 		return fmt.Errorf("newRepoAction: %v", err)
@@ -1480,7 +1480,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
 		return fmt.Errorf("decrease old owner repository count: %v", err)
 	}
 
-	if err = watchRepo(sess, newOwner.ID, repo.ID, true); err != nil {
+	if err = watchRepo(sess, doer.ID, repo.ID, true); err != nil {
 		return fmt.Errorf("watchRepo: %v", err)
 	} else if err = transferRepoAction(sess, doer, owner, repo); err != nil {
 		return fmt.Errorf("transferRepoAction: %v", err)