diff --git a/src/go/go.mod b/src/go/go.mod
index 2b499c86444..19a178ac64c 100644
--- a/src/go/go.mod
+++ b/src/go/go.mod
@@ -46,3 +46,5 @@ require (
 	google.golang.org/protobuf v1.27.1 // indirect
 	gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
 )
+
+replace git.zabbix.com/ap/plugin-support => ../../../../plugin-support
\ No newline at end of file
diff --git a/src/go/internal/agent/scheduler/task.go b/src/go/internal/agent/scheduler/task.go
index 42149f0cf33..7799515e857 100644
--- a/src/go/internal/agent/scheduler/task.go
+++ b/src/go/internal/agent/scheduler/task.go
@@ -153,11 +153,35 @@ type exporterTask struct {
 	output  plugin.ResultWriter
 }
 
+func invokeExport(a plugin.Accessor, key string, params []string, ctx plugin.ContextProvider) (any, error) {
+	exporter, _ := a.(plugin.Exporter)
+
+	if a.HandleTimeout() {
+		return exporter.Export(key, params, ctx)
+	}
+
+	var ret any
+	var err error
+	tc := make(chan bool)
+
+	go func() {
+		ret, err = exporter.Export(key, params, ctx)
+		tc <- true
+	}()
+
+	select {
+	case <-tc:
+	case <-time.After(time.Second * time.Duration(ctx.Timeout())):
+		err = fmt.Errorf("Timeout occurred while gathering data.")
+	}
+
+	return ret, err
+}
+
 func (t *exporterTask) perform(s Scheduler) {
 	// pass item key as parameter so it can be safely updated while task is being processed in its goroutine
 	go func(itemkey string) {
 		var result *plugin.Result
-		exporter, _ := t.plugin.impl.(plugin.Exporter)
 		now := time.Now()
 		var key string
 		var params []string
@@ -166,18 +190,7 @@ func (t *exporterTask) perform(s Scheduler) {
 		if key, params, err = itemutil.ParseKey(itemkey); err == nil {
 			var ret interface{}
 
-			tc := make(chan bool)
-
-			go func() {
-				ret, err = exporter.Export(key, params, t)
-				tc <- true
-			}()
-
-			select {
-			case <-tc:
-			case <-time.After(time.Second * time.Duration(t.item.timeout)):
-				err = fmt.Errorf("Timeout occurred while gathering data.")
-			}
+			ret, err = invokeExport(t.plugin.impl, key, params, t)
 
 			if err == nil {
 				log.Debugf("executed exporter task for itemid:%d key '%s'", t.item.itemid, itemkey)
diff --git a/src/go/plugins/net/tcp/tcp_nix.go b/src/go/plugins/net/tcp/tcp_nix.go
index ea52356f3fe..9e8faa96b01 100644
--- a/src/go/plugins/net/tcp/tcp_nix.go
+++ b/src/go/plugins/net/tcp/tcp_nix.go
@@ -38,4 +38,6 @@ func init() {
 		"net.tcp.service", "Checks if service is running and accepting TCP connections.",
 		"net.tcp.service.perf", "Checks performance of TCP service.",
 		"net.tcp.socket.count", "Returns number of TCP sockets that match parameters.")
+
+	impl.SetHandleTimeout(true)
 }
