diff --git a/.golangci.yml b/.golangci.yml
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_LmdvbGFuZ2NpLnltbA==..93875fe45953a0c26a91bf3965967d32c85b8fc6_LmdvbGFuZ2NpLnltbA== 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -92,7 +92,7 @@
     - nolintlint  # Reports ill-formed or insufficient nolint directives	style		v1.26.0
     - nonamedreturns # Reports all named returns.	style		v1.46.0
     - nosprintfhostport # Checks for misuse of Sprintf to construct a host with port in a URL.	style		v1.46.0
-    # - paralleltest  # paralleltest detects missing usage of t.Parallel() method in your Go test	style, test		v1.33.0
+    - paralleltest  # paralleltest detects missing usage of t.Parallel() method in your Go test	style, test		v1.33.0
     - perfsprint # Checks that fmt.Sprintf can be replaced with a faster alternative.	performance		v1.55.0
     - prealloc  # Finds slice declarations that could potentially be preallocated	performance		v1.19.0
     - predeclared  # find code that shadows one of Go's predeclared identifiers	style		v1.35.0
@@ -144,6 +144,8 @@
     enable-all: true
     disable:
       - require-error
+  paralleltest:
+    ignore-loop-var: true
 issues:
   # Maximum issues count per one linter. Set to 0 to disable. Default is 50.
   max-issues-per-linter: 0
@@ -165,6 +167,10 @@
     - path: 'cmd/|auth/|restapi/'
       linters:
         - lll
+    - path: 'utils/log-console-writer_test.go|tests'
+      linters:
+        - tparallel
+        - paralleltest
   exclude-dirs:
     - dependencies
     - restapi/operations
diff --git a/Makefile b/Makefile
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_TWFrZWZpbGU=..93875fe45953a0c26a91bf3965967d32c85b8fc6_TWFrZWZpbGU= 100644
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,7 @@
 
 GOLANGCI_LINT_VERSION = v1.64.6
 GOLANGCI_LINT_BIN = tools/bin/golangci-lint-$(GOLANGCI_LINT_VERSION)
+GOLANGCI_LINT_ARGS =
 
 BASEVERSION = $(shell grep version: swagger.yaml| cut -f2 -d: |xargs)
 VERSION = $(BASEVERSION)
diff --git a/engines/mjml/mjml_test.go b/engines/mjml/mjml_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_ZW5naW5lcy9tam1sL21qbWxfdGVzdC5nbw==..93875fe45953a0c26a91bf3965967d32c85b8fc6_ZW5naW5lcy9tam1sL21qbWxfdGVzdC5nbw== 100644
--- a/engines/mjml/mjml_test.go
+++ b/engines/mjml/mjml_test.go
@@ -59,4 +59,5 @@
 }
 
 func TestDukType(t *testing.T) {
+	t.Parallel()
 	t.Run("Simple", func(t *testing.T) {
@@ -62,4 +63,5 @@
 	t.Run("Simple", func(t *testing.T) {
+		t.Parallel()
 		ctx, err := initDukTapeCtx()
 		require.NoError(t, err)
 
@@ -70,6 +72,7 @@
 		}))
 	})
 	t.Run("WithError", func(t *testing.T) {
+		t.Parallel()
 		ctx, err := initDukTapeCtx()
 		require.NoError(t, err)
 
@@ -82,6 +85,7 @@
 		t.Log(r)
 	})
 	t.Run("Invalid-mjml", func(t *testing.T) {
+		t.Parallel()
 		ctx, err := initDukTapeCtx()
 		require.NoError(t, err)
 
diff --git a/engines/mustache/engine_test.go b/engines/mustache/engine_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_ZW5naW5lcy9tdXN0YWNoZS9lbmdpbmVfdGVzdC5nbw==..93875fe45953a0c26a91bf3965967d32c85b8fc6_ZW5naW5lcy9tdXN0YWNoZS9lbmdpbmVfdGVzdC5nbw== 100644
--- a/engines/mustache/engine_test.go
+++ b/engines/mustache/engine_test.go
@@ -11,6 +11,7 @@
 )
 
 func TestVarlist(t *testing.T) {
+	t.Parallel()
 	mt, err := mustache.ParseString(`
 	{{#outsection}}
 		{{#section1}}
diff --git a/engines/wpd/process_test.go b/engines/wpd/process_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_ZW5naW5lcy93cGQvcHJvY2Vzc190ZXN0Lmdv..93875fe45953a0c26a91bf3965967d32c85b8fc6_ZW5naW5lcy93cGQvcHJvY2Vzc190ZXN0Lmdv 100644
--- a/engines/wpd/process_test.go
+++ b/engines/wpd/process_test.go
@@ -11,6 +11,7 @@
 )
 
 func TestProcess(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	p, err := NewRealProcess()
 	require.NoError(t, err)
diff --git a/engines/wpd/wpd_test.go b/engines/wpd/wpd_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_ZW5naW5lcy93cGQvd3BkX3Rlc3QuZ28=..93875fe45953a0c26a91bf3965967d32c85b8fc6_ZW5naW5lcy93cGQvd3BkX3Rlc3QuZ28= 100644
--- a/engines/wpd/wpd_test.go
+++ b/engines/wpd/wpd_test.go
@@ -14,9 +14,10 @@
 )
 
 func TestRealWpd(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	p, err := wpd.NewRealProcess()
 
 	require.NoError(t, err)
 
 	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
@@ -17,10 +18,10 @@
 	log := testutils.GetLogger(t)
 	p, err := wpd.NewRealProcess()
 
 	require.NoError(t, err)
 
 	ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
-	defer cancel()
+	t.Cleanup(cancel)
 
 	wpd, err := wpd.NewProcessWPD(p, log)
 	require.NoError(t, err)
diff --git a/lib/condchan_test.go b/lib/condchan_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_bGliL2NvbmRjaGFuX3Rlc3QuZ28=..93875fe45953a0c26a91bf3965967d32c85b8fc6_bGliL2NvbmRjaGFuX3Rlc3QuZ28= 100644
--- a/lib/condchan_test.go
+++ b/lib/condchan_test.go
@@ -26,6 +26,7 @@
 }
 
 func TestCondChan(t *testing.T) {
+	t.Parallel()
 	needStop := false
 	ch, hit := redner.NewCondChan(func() bool { return needStop })
 
diff --git a/models/template_db_test.go b/models/template_db_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_bW9kZWxzL3RlbXBsYXRlX2RiX3Rlc3QuZ28=..93875fe45953a0c26a91bf3965967d32c85b8fc6_bW9kZWxzL3RlbXBsYXRlX2RiX3Rlc3QuZ28= 100644
--- a/models/template_db_test.go
+++ b/models/template_db_test.go
@@ -15,6 +15,7 @@
 )
 
 func TestTemplateDB(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	ctx, cancel := testutils.GetContext(t)
 	ctx = log.WithContext(ctx)
@@ -22,7 +23,7 @@
 	defer cancel()
 
 	db := database.GetTestDB(ctx, t, migration.Source)
-	defer db.Close()
+	t.Cleanup(db.Close)
 
 	_, err := database.Exec(db, database.SQLInsert(models.AccountDB{Name: "account"}), &log)
 	require.NoError(t, err)
diff --git a/restapi/handlers/account-template-update_test.go b/restapi/handlers/account-template-update_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_cmVzdGFwaS9oYW5kbGVycy9hY2NvdW50LXRlbXBsYXRlLXVwZGF0ZV90ZXN0Lmdv..93875fe45953a0c26a91bf3965967d32c85b8fc6_cmVzdGFwaS9oYW5kbGVycy9hY2NvdW50LXRlbXBsYXRlLXVwZGF0ZV90ZXN0Lmdv 100644
--- a/restapi/handlers/account-template-update_test.go
+++ b/restapi/handlers/account-template-update_test.go
@@ -7,4 +7,5 @@
 
 	"github.com/Masterminds/squirrel"
 	"github.com/stretchr/testify/assert"
+
 	"orus.io/orus-io/go-orusapi/database"
@@ -10,8 +11,7 @@
 	"orus.io/orus-io/go-orusapi/database"
-
 	"orus.io/orus-io/rednerd/models"
 	"orus.io/orus-io/rednerd/testutils"
 	"orus.io/orus-io/rednerd/testutils/apitester"
 )
 
 func TestAccountTemplateUpdate(t *testing.T) {
@@ -12,9 +12,10 @@
 	"orus.io/orus-io/rednerd/models"
 	"orus.io/orus-io/rednerd/testutils"
 	"orus.io/orus-io/rednerd/testutils/apitester"
 )
 
 func TestAccountTemplateUpdate(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	ctx, cancel := testutils.GetContext(t)
 	ctx = log.WithContext(ctx)
@@ -22,12 +23,22 @@
 	defer cancel()
 
 	tester := apitester.NewAPITester(ctx, t, nil)
-	tmpl := models.Template{
-		Account:    "janedoe",
-		Name:       "hello",
-		Language:   "mustache",
-		Produces:   "text/plain",
-		BodyFormat: "text",
-		Body:       "Hello {{name}}!",
+	tmpls := []models.Template{
+		{
+			Account:    "janedoe",
+			Name:       "1",
+			Language:   "mustache",
+			Produces:   "text/plain",
+			BodyFormat: "text",
+			Body:       "Hello {{name}}!",
+		},
+		{
+			Account:    "janedoe",
+			Name:       "2",
+			Language:   "mustache",
+			Produces:   "text/plain",
+			BodyFormat: "text",
+			Body:       "Hello {{name}}!",
+		},
 	}
 
@@ -32,7 +43,9 @@
 	}
 
-	defer tester.Close()
-	defer tester.Logout()
+	t.Cleanup(func() {
+		tester.Close()
+		tester.Logout()
+	})
 	tester.Login("admin", "admin")
 
 	tester.CreateUser("janedoe", "janedoe")
@@ -36,6 +49,7 @@
 	tester.Login("admin", "admin")
 
 	tester.CreateUser("janedoe", "janedoe")
+	tester.Logout()
 	tester.Login("janedoe", "janedoe")
 
 	t.Run("Update non-existent template", func(t *testing.T) {
@@ -39,4 +53,5 @@
 	tester.Login("janedoe", "janedoe")
 
 	t.Run("Update non-existent template", func(t *testing.T) {
+		t.Parallel()
 		r := tester.APITest("template_update").
@@ -42,5 +57,5 @@
 		r := tester.APITest("template_update").
-			Put("/api/v1/template/janedoe/hello").
+			Put("/api/v1/template/janedoe/unknown").
 			JSON(&models.Template{}).
 			Expect(t).
 			Status(http.StatusNotFound).
@@ -53,5 +68,7 @@
 	})
 
 	t.Run("Update body", func(t *testing.T) {
-		defer func() {
+		t.Parallel()
+
+		t.Cleanup(func() {
 			_, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log)
@@ -57,7 +74,7 @@
 			_, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log)
-		}()
+		}())
 
 		var responseTemplate models.Template
 
 		tester.CreateTemplate(
 			"janedoe",
@@ -59,11 +76,11 @@
 
 		var responseTemplate models.Template
 
 		tester.CreateTemplate(
 			"janedoe",
-			&tmpl,
+			&tmpls[0],
 			&responseTemplate,
 		)
 
 		responseTemplate.Body = "Hi {{name}}!"
 		r := tester.APITest("template_update").
@@ -65,9 +82,9 @@
 			&responseTemplate,
 		)
 
 		responseTemplate.Body = "Hi {{name}}!"
 		r := tester.APITest("template_update").
-			Put("/api/v1/template/janedoe/hello").
+			Put("/api/v1/template/janedoe/" + tmpls[0].Name).
 			JSON(&responseTemplate).
 			Expect(t).
 			Status(http.StatusOK).
@@ -78,5 +95,7 @@
 	})
 
 	t.Run("Rename", func(t *testing.T) {
-		defer func() {
+		t.Parallel()
+
+		t.Cleanup(func() {
 			_, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log)
@@ -82,7 +101,7 @@
 			_, _ = database.Exec(tester.DB, squirrel.Delete(models.TemplateDBTable), &log)
-		}()
+		}())
 
 		var responseTemplate models.Template
 
 		tester.CreateTemplate(
 			"janedoe",
@@ -84,11 +103,11 @@
 
 		var responseTemplate models.Template
 
 		tester.CreateTemplate(
 			"janedoe",
-			&tmpl,
+			&tmpls[1],
 			&responseTemplate,
 		)
 
 		responseTemplate.Name = "hi"
 		r := tester.APITest("template_update").
@@ -90,9 +109,9 @@
 			&responseTemplate,
 		)
 
 		responseTemplate.Name = "hi"
 		r := tester.APITest("template_update").
-			Put("/api/v1/template/janedoe/hello").
+			Put("/api/v1/template/janedoe/" + tmpls[1].Name).
 			JSON(&responseTemplate).
 			Expect(t).
 			Status(http.StatusOK).
diff --git a/restapi/handlers/renderlogs_test.go b/restapi/handlers/renderlogs_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_cmVzdGFwaS9oYW5kbGVycy9yZW5kZXJsb2dzX3Rlc3QuZ28=..93875fe45953a0c26a91bf3965967d32c85b8fc6_cmVzdGFwaS9oYW5kbGVycy9yZW5kZXJsb2dzX3Rlc3QuZ28= 100644
--- a/restapi/handlers/renderlogs_test.go
+++ b/restapi/handlers/renderlogs_test.go
@@ -15,4 +15,5 @@
 )
 
 func TestRenderLogs(t *testing.T) {
+	t.Parallel()
 	ctx, cancel := testutils.GetContext(t)
@@ -18,4 +19,2 @@
 	ctx, cancel := testutils.GetContext(t)
-	defer cancel()
-
 	tester := apitester.NewAPITester(ctx, t, nil)
@@ -21,6 +20,9 @@
 	tester := apitester.NewAPITester(ctx, t, nil)
-	defer tester.Close()
-
+	t.Cleanup(func() {
+		tester.Close()
+		tester.Logout()
+		cancel()
+	})
 	now := time.Now()
 	tester.SetNow(now)
 	// db := database.NewSQLHelper(ctx, tester.DB, tester.Logger)
@@ -77,8 +79,6 @@
 
 	tester.Logout()
 	tester.Login("admin", "admin")
-
-	defer tester.Logout()
 	csvFilename := strconv.Itoa(tester.Now().Year()) +
 		"-" +
 		fmt.Sprintf("%02d", int(tester.Now().Month())) +
diff --git a/restapi/handlers/user-get_test.go b/restapi/handlers/user-get_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_cmVzdGFwaS9oYW5kbGVycy91c2VyLWdldF90ZXN0Lmdv..93875fe45953a0c26a91bf3965967d32c85b8fc6_cmVzdGFwaS9oYW5kbGVycy91c2VyLWdldF90ZXN0Lmdv 100644
--- a/restapi/handlers/user-get_test.go
+++ b/restapi/handlers/user-get_test.go
@@ -44,6 +44,7 @@
 }
 
 func TestUserGet(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	ctx, cancel := testutils.GetContext(t)
 	ctx = log.WithContext(ctx)
@@ -51,7 +52,7 @@
 	defer cancel()
 
 	tester := apitester.NewAPITester(ctx, t, nil)
-	defer tester.Close()
+	t.Cleanup(tester.Close)
 
 	// login as admin and create a user
 	tester.Login("admin", "admin")
@@ -66,6 +67,7 @@
 	tester.Logout()
 
 	t.Run("unauthorized", func(t *testing.T) {
+		t.Parallel()
 		// try and get the list as johndoe_1
 		tester.Login("johndoe", "johndoe")
 		defer tester.Logout()
@@ -76,6 +78,7 @@
 			End()
 	})
 	t.Run("basic", func(t *testing.T) {
+		t.Parallel()
 		tester.Login("admin", "admin")
 		defer tester.Logout()
 		r := tester.APITest("user_get").
diff --git a/restapi/handlers/user-list_test.go b/restapi/handlers/user-list_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_cmVzdGFwaS9oYW5kbGVycy91c2VyLWxpc3RfdGVzdC5nbw==..93875fe45953a0c26a91bf3965967d32c85b8fc6_cmVzdGFwaS9oYW5kbGVycy91c2VyLWxpc3RfdGVzdC5nbw== 100644
--- a/restapi/handlers/user-list_test.go
+++ b/restapi/handlers/user-list_test.go
@@ -13,6 +13,7 @@
 )
 
 func TestUserList(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	ctx, cancel := testutils.GetContext(t)
 	ctx = log.WithContext(ctx)
@@ -20,7 +21,7 @@
 	defer cancel()
 
 	tester := apitester.NewAPITester(ctx, t, nil)
-	defer tester.Close()
+	t.Cleanup(tester.Close)
 
 	// login as admin and create 10 users
 	tester.Login("admin", "admin")
@@ -34,6 +35,7 @@
 
 	tester.Logout()
 	t.Run("unauthorized", func(t *testing.T) {
+		t.Parallel()
 		// try and get the list as johndoe_1
 		tester.Login("johndoe_1", "password1")
 		defer tester.Logout()
@@ -44,6 +46,7 @@
 			End()
 	})
 	t.Run("basic", func(t *testing.T) {
+		t.Parallel()
 		tester.Login("admin", "admin")
 		defer tester.Logout()
 		r := tester.APITest("user_list").
diff --git a/restapi/handlers/user-update_test.go b/restapi/handlers/user-update_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_cmVzdGFwaS9oYW5kbGVycy91c2VyLXVwZGF0ZV90ZXN0Lmdv..93875fe45953a0c26a91bf3965967d32c85b8fc6_cmVzdGFwaS9oYW5kbGVycy91c2VyLXVwZGF0ZV90ZXN0Lmdv 100644
--- a/restapi/handlers/user-update_test.go
+++ b/restapi/handlers/user-update_test.go
@@ -12,6 +12,7 @@
 )
 
 func TestUserUpdate(t *testing.T) {
+	t.Parallel()
 	log := testutils.GetLogger(t)
 	ctx, cancel := testutils.GetContext(t)
 	ctx = log.WithContext(ctx)
@@ -19,7 +20,7 @@
 	defer cancel()
 
 	tester := apitester.NewAPITester(ctx, t, nil)
-	defer tester.Close()
+	t.Cleanup(tester.Close)
 
 	// login as admin and create a user
 	tester.Login("admin", "admin")
@@ -52,6 +53,7 @@
 	tester.Logout()
 
 	t.Run("unauthorized", func(t *testing.T) {
+		t.Parallel()
 		tester.Login("janedoe", "janedoe")
 		defer tester.Logout()
 		_ = tester.APITest("user_update").
@@ -62,6 +64,7 @@
 			End()
 	})
 	t.Run("basic", func(t *testing.T) {
+		t.Parallel()
 		tester.Login("johndoe", "johndoe")
 		defer tester.Logout()
 		r := tester.APITest("user_update").
diff --git a/utils/parse_period_test.go b/utils/parse_period_test.go
index 2f2261ad2e7bc910b49e03ab5713de767ea27818_dXRpbHMvcGFyc2VfcGVyaW9kX3Rlc3QuZ28=..93875fe45953a0c26a91bf3965967d32c85b8fc6_dXRpbHMvcGFyc2VfcGVyaW9kX3Rlc3QuZ28= 100644
--- a/utils/parse_period_test.go
+++ b/utils/parse_period_test.go
@@ -9,6 +9,7 @@
 )
 
 func TestParsePeriod(t *testing.T) {
+	t.Parallel()
 	for _, tt := range []struct {
 		period         string
 		expectedError  string
@@ -36,6 +37,7 @@
 		},
 	} {
 		t.Run(tt.period, func(t *testing.T) {
+			t.Parallel()
 			p, err := utils.ParsePeriod(tt.period)
 			if err != nil {
 				require.EqualError(t, err, tt.expectedError)