diff --git a/plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt
similarity index 98%
rename from plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt
rename to plugins/package-managers/node/src/main/kotlin/NpmDetection.kt
index d3fd8776675d1..e07a1d6e5f763 100644
--- a/plugins/package-managers/node/src/main/kotlin/utils/NpmDetection.kt
+++ b/plugins/package-managers/node/src/main/kotlin/NpmDetection.kt
@@ -17,7 +17,7 @@
  * License-Filename: LICENSE
  */
 
-package org.ossreviewtoolkit.plugins.packagemanagers.node.utils
+package org.ossreviewtoolkit.plugins.packagemanagers.node
 
 import java.io.File
 import java.nio.file.FileSystems
@@ -31,7 +31,7 @@ import org.ossreviewtoolkit.utils.common.collectMessages
 /**
  * A class to detect the package managers used for the give [definitionFiles].
  */
-class NpmDetection(private val definitionFiles: Collection<File>) {
+internal class NpmDetection(private val definitionFiles: Collection<File>) {
     /**
      * A map of project directories to the set of package managers that are most likely responsible for the project. If
      * the set is empty, none of the package managers is responsible.
@@ -110,7 +110,7 @@ class NpmDetection(private val definitionFiles: Collection<File>) {
 /**
  * An enum of all supported Node package managers.
  */
-enum class NodePackageManager(
+internal enum class NodePackageManager(
     val lockfileName: String,
     val markerFileName: String? = null,
     val workspaceFileName: String = NodePackageManager.DEFINITION_FILE
diff --git a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt b/plugins/package-managers/node/src/main/kotlin/NpmSupport.kt
similarity index 98%
rename from plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt
rename to plugins/package-managers/node/src/main/kotlin/NpmSupport.kt
index 1f3766e3ff386..074576d16c85c 100644
--- a/plugins/package-managers/node/src/main/kotlin/utils/NpmSupport.kt
+++ b/plugins/package-managers/node/src/main/kotlin/NpmSupport.kt
@@ -17,7 +17,7 @@
  * License-Filename: LICENSE
  */
 
-package org.ossreviewtoolkit.plugins.packagemanagers.node.utils
+package org.ossreviewtoolkit.plugins.packagemanagers.node
 
 import java.io.File
 import java.lang.invoke.MethodHandles
@@ -37,14 +37,14 @@ import org.ossreviewtoolkit.model.Project
 import org.ossreviewtoolkit.model.RemoteArtifact
 import org.ossreviewtoolkit.model.VcsInfo
 import org.ossreviewtoolkit.model.VcsType
-import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
-import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
 import org.ossreviewtoolkit.utils.common.realFile
 import org.ossreviewtoolkit.utils.common.toUri
 import org.ossreviewtoolkit.utils.spdx.SpdxConstants
 
 internal const val NON_EXISTING_SEMVER = "0.0.0"
 
+private val logger = loggerOf(MethodHandles.lookup().lookupClass())
+
 /**
  * Expand an NPM shortcut [url] to a regular URL as used for dependencies, see
  * https://docs.npmjs.com/cli/v7/configuring-npm/package-json#urls-as-dependencies.
@@ -247,8 +247,6 @@ internal fun parsePackage(
     return module
 }
 
-private val logger = loggerOf(MethodHandles.lookup().lookupClass())
-
 internal fun parseProject(packageJsonFile: File, analysisRoot: File, managerName: String): Project {
     logger.debug { "Parsing project info from '$packageJsonFile'." }
 
diff --git a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt
index 6a5d30173c6b6..3c24b7bed216b 100644
--- a/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt
+++ b/plugins/package-managers/node/src/main/kotlin/npm/Npm.kt
@@ -29,9 +29,10 @@ import org.ossreviewtoolkit.analyzer.AbstractPackageManagerFactory
 import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
 import org.ossreviewtoolkit.model.config.PackageManagerConfiguration
 import org.ossreviewtoolkit.model.config.RepositoryConfiguration
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.Yarn
 import org.ossreviewtoolkit.utils.common.Os
 import org.ossreviewtoolkit.utils.common.ProcessCapture
@@ -95,7 +96,7 @@ class Npm(
         return runCatching {
             val process = run(workingDir, "info", "--json", packageName)
 
-            org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson(process.stdout)
+            parsePackageJson(process.stdout)
         }.onFailure { e ->
             logger.warn { "Error getting details for $packageName in directory $workingDir: ${e.message.orEmpty()}" }
         }.onSuccess {
diff --git a/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt b/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt
index 90a3a88109c98..f62ae55eb2624 100644
--- a/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt
+++ b/plugins/package-managers/node/src/main/kotlin/pnpm/Pnpm.kt
@@ -31,11 +31,11 @@ import org.ossreviewtoolkit.model.ProjectAnalyzerResult
 import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
 import org.ossreviewtoolkit.model.config.RepositoryConfiguration
 import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseProject
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parseProject
 import org.ossreviewtoolkit.utils.common.CommandLineTool
 import org.ossreviewtoolkit.utils.common.Os
 import org.ossreviewtoolkit.utils.common.stashDirectories
diff --git a/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt b/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt
index a3b0f29fa12d3..edeff23ef7562 100644
--- a/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt
+++ b/plugins/package-managers/node/src/main/kotlin/pnpm/PnpmDependencyHandler.kt
@@ -27,9 +27,9 @@ import org.ossreviewtoolkit.model.Package
 import org.ossreviewtoolkit.model.PackageLinkage
 import org.ossreviewtoolkit.model.utils.DependencyHandler
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackage
 import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.pnpm.ModuleInfo.Dependency
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parsePackage
 import org.ossreviewtoolkit.utils.common.realFile
 
 internal class PnpmDependencyHandler(private val pnpm: Pnpm) : DependencyHandler<Dependency> {
diff --git a/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt b/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt
index bd1be49ff8e1f..d2c990ff8891f 100644
--- a/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt
+++ b/plugins/package-managers/node/src/main/kotlin/yarn/Yarn.kt
@@ -50,13 +50,13 @@ import org.ossreviewtoolkit.model.config.RepositoryConfiguration
 import org.ossreviewtoolkit.model.createAndLogIssue
 import org.ossreviewtoolkit.model.readTree
 import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.npm.groupLines
 import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseProject
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.splitNpmNamespaceAndName
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parseProject
+import org.ossreviewtoolkit.plugins.packagemanagers.node.splitNpmNamespaceAndName
 import org.ossreviewtoolkit.utils.common.CommandLineTool
 import org.ossreviewtoolkit.utils.common.DiskCache
 import org.ossreviewtoolkit.utils.common.Os
diff --git a/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt b/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt
index b40409e274876..0ecc3962e22da 100644
--- a/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt
+++ b/plugins/package-managers/node/src/main/kotlin/yarn/YarnDependencyHandler.kt
@@ -27,7 +27,7 @@ import org.ossreviewtoolkit.model.Package
 import org.ossreviewtoolkit.model.PackageLinkage
 import org.ossreviewtoolkit.model.Project
 import org.ossreviewtoolkit.model.utils.DependencyHandler
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parsePackage
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackage
 
 /**
  * A data class storing information about a specific NPM module and its dependencies.
diff --git a/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt b/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt
index 067cf0e9a6f35..8ce2afd47a9d5 100644
--- a/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt
+++ b/plugins/package-managers/node/src/main/kotlin/yarn2/Yarn2.kt
@@ -53,16 +53,16 @@ import org.ossreviewtoolkit.model.config.RepositoryConfiguration
 import org.ossreviewtoolkit.model.createAndLogIssue
 import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder
 import org.ossreviewtoolkit.model.utils.DependencyHandler
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NpmDetection
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
+import org.ossreviewtoolkit.plugins.packagemanagers.node.fixNpmDownloadUrl
+import org.ossreviewtoolkit.plugins.packagemanagers.node.mapNpmLicenses
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parseNpmAuthor
+import org.ossreviewtoolkit.plugins.packagemanagers.node.parseNpmVcsInfo
 import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJsons
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NpmDetection
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.fixNpmDownloadUrl
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.mapNpmLicenses
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseNpmAuthor
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.parseNpmVcsInfo
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.splitNpmNamespaceAndName
+import org.ossreviewtoolkit.plugins.packagemanagers.node.splitNpmNamespaceAndName
 import org.ossreviewtoolkit.utils.common.CommandLineTool
 import org.ossreviewtoolkit.utils.common.Os
 import org.ossreviewtoolkit.utils.ort.runBlocking
diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt b/plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt
similarity index 96%
rename from plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt
rename to plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt
index 5a5da244be844..c9c9a82f4f73e 100644
--- a/plugins/package-managers/node/src/test/kotlin/utils/NpmDetectionTest.kt
+++ b/plugins/package-managers/node/src/test/kotlin/NpmDetectionTest.kt
@@ -17,7 +17,7 @@
  * License-Filename: LICENSE
  */
 
-package org.ossreviewtoolkit.plugins.packagemanagers.node.utils
+package org.ossreviewtoolkit.plugins.packagemanagers.node
 
 import io.kotest.core.spec.style.WordSpec
 import io.kotest.engine.spec.tempdir
@@ -30,10 +30,10 @@ import io.kotest.matchers.should
 import io.kotest.matchers.shouldBe
 
 import org.ossreviewtoolkit.analyzer.PackageManager
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.NPM
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.PNPM
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.YARN
-import org.ossreviewtoolkit.plugins.packagemanagers.node.utils.NodePackageManager.YARN2
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.NPM
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.PNPM
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.YARN
+import org.ossreviewtoolkit.plugins.packagemanagers.node.NodePackageManager.YARN2
 import org.ossreviewtoolkit.utils.common.withoutPrefix
 import org.ossreviewtoolkit.utils.test.getAssetFile
 
diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt b/plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt
similarity index 97%
rename from plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt
rename to plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt
index 51d0ffc91153b..8d9e33ff7f998 100644
--- a/plugins/package-managers/node/src/test/kotlin/utils/NpmSupportTest.kt
+++ b/plugins/package-managers/node/src/test/kotlin/NpmSupportTest.kt
@@ -17,7 +17,7 @@
  * License-Filename: LICENSE
  */
 
-package org.ossreviewtoolkit.plugins.packagemanagers.node.utils
+package org.ossreviewtoolkit.plugins.packagemanagers.node
 
 import io.kotest.core.spec.style.WordSpec
 import io.kotest.inspectors.forAll
@@ -25,7 +25,6 @@ import io.kotest.matchers.shouldBe
 
 import org.ossreviewtoolkit.model.VcsInfo
 import org.ossreviewtoolkit.model.VcsType
-import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson.Author
 import org.ossreviewtoolkit.plugins.packagemanagers.node.PackageJson.Repository
 
diff --git a/plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt b/plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt
similarity index 93%
rename from plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt
rename to plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt
index cc13e2aa85a49..b5d85cc5fba23 100644
--- a/plugins/package-managers/node/src/test/kotlin/utils/NpmDependencyHandlerTest.kt
+++ b/plugins/package-managers/node/src/test/kotlin/yarn/YarnDependencyHandlerTest.kt
@@ -17,7 +17,7 @@
  * License-Filename: LICENSE
  */
 
-package org.ossreviewtoolkit.plugins.packagemanagers.node.utils
+package org.ossreviewtoolkit.plugins.packagemanagers.node.yarn
 
 import io.kotest.core.spec.style.StringSpec
 import io.kotest.matchers.collections.containExactly
@@ -32,11 +32,9 @@ import org.ossreviewtoolkit.model.PackageLinkage
 import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
 import org.ossreviewtoolkit.model.config.RepositoryConfiguration
 import org.ossreviewtoolkit.plugins.packagemanagers.node.npm.Npm
-import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.NpmModuleInfo
-import org.ossreviewtoolkit.plugins.packagemanagers.node.yarn.YarnDependencyHandler
 import org.ossreviewtoolkit.utils.test.USER_DIR
 
-class NpmDependencyHandlerTest : StringSpec({
+class YarnDependencyHandlerTest : StringSpec({
     "identifierFor extracts the correct identifier" {
         val id = createIdentifier("foo")
         val module = createModuleInfo(id)