diff --git a/edition/main.go b/edition/main.go
index 4446ef9..57ed046 100644
--- a/edition/main.go
+++ b/edition/main.go
@@ -8,7 +8,7 @@ import (
 
 func main() {
 	tstor.Run([]tstor.Plugin{
-		archive.Plugin,
+		archive.ArchivePlugin{},
 		qbittorrent.QBittorrentPlugin{},
 	})
 }
diff --git a/plugins/archive/daemon.go b/plugins/archive/daemon.go
index 9056227..2609dd2 100644
--- a/plugins/archive/daemon.go
+++ b/plugins/archive/daemon.go
@@ -17,14 +17,19 @@ const daemonName = "archive"
 
 type ArchivePlugin struct{}
 
+var _ tstor.Plugin = (*ArchivePlugin)(nil)
+
 // Name implements tstor.Plugin.
-func (a *ArchivePlugin) Name() string {
+func (ArchivePlugin) Name() string {
 	return daemonName
 }
 
-var _ tstor.Plugin = (*ArchivePlugin)(nil)
+var _ tstor.DaemonPlugin = (*ArchivePlugin)(nil)
 
-var _ daemon.DaemonConstructor = NewDaemon
+// NewDaemon implements tstor.DaemonPlugin.
+func (a *ArchivePlugin) NewDaemon(context.Context, *koanf.Koanf) (daemon.Daemon, error) {
+	return &Daemon{}, nil
+}
 
 func NewDaemon(ctx context.Context, koanf *koanf.Koanf) (daemon.Daemon, error) {
 	return &Daemon{}, nil
diff --git a/plugins/qbittorrent/daemon.go b/plugins/qbittorrent/daemon.go
index 9c1ead1..c82f226 100644
--- a/plugins/qbittorrent/daemon.go
+++ b/plugins/qbittorrent/daemon.go
@@ -17,6 +17,7 @@ import (
 	"git.kmsign.ru/royalcat/tstor/server/src/daemon"
 	"git.kmsign.ru/royalcat/tstor/server/src/logwrap"
 	"git.kmsign.ru/royalcat/tstor/server/src/vfs"
+	"git.kmsign.ru/royalcat/tstor/server/tstor"
 	"github.com/anacrolix/torrent/metainfo"
 	"github.com/anacrolix/torrent/types/infohash"
 	infohash_v2 "github.com/anacrolix/torrent/types/infohash-v2"
@@ -26,6 +27,21 @@ import (
 	"go.opentelemetry.io/otel"
 )
 
+type QBittorrentPlugin struct {
+}
+
+var _ tstor.Plugin = (*QBittorrentPlugin)(nil)
+
+func (QBittorrentPlugin) Name() string {
+	return daemonName
+}
+
+var _ tstor.DaemonPlugin = (*QBittorrentPlugin)(nil)
+
+func (QBittorrentPlugin) NewDaemon(ctx context.Context, koanf *koanf.Koanf) (daemon.Daemon, error) {
+	return newDaemon(ctx, koanf)
+}
+
 var trace = otel.Tracer("git.kmsign.ru/royalcat/tstor/plugins/qbittorrent")
 
 type Daemon struct {
@@ -53,14 +69,7 @@ WebUI\Password_PBKDF2="@ByteArray(qef5I4wZBkDG+PP6/5mQwA==:LoTmorQM/QM5RHI4+dOiu
 
 const daemonName = "qbittorrent"
 
-type QBittorrentPlugin struct {
-}
-
-func (QBittorrentPlugin) Name() string {
-	return daemonName
-}
-
-func (QBittorrentPlugin) NewDaemon(ctx context.Context, koanf *koanf.Koanf) (daemon.Daemon, error) {
+func newDaemon(ctx context.Context, koanf *koanf.Koanf) (daemon.Daemon, error) {
 	log := rlog.Component(daemonName)
 
 	log.Debug(ctx, "QBittorrent plugin loaded. Starting qbittorrent-nox")
diff --git a/server/tstor/plugin.go b/server/tstor/plugin.go
index 4f01b32..b7fe6c6 100644
--- a/server/tstor/plugin.go
+++ b/server/tstor/plugin.go
@@ -4,7 +4,6 @@ import (
 	"context"
 
 	"git.kmsign.ru/royalcat/tstor/server/src/daemon"
-	"github.com/99designs/gqlgen/graphql"
 	"github.com/knadh/koanf/v2"
 )
 
@@ -14,5 +13,4 @@ type Plugin interface {
 
 type DaemonPlugin interface {
 	NewDaemon(context.Context, *koanf.Koanf) (daemon.Daemon, error)
-	GraphQLExecutableSchema() graphql.ExecutableSchema
 }