diff --git a/src/Configuration.cc b/src/Configuration.cc
index b03b9820128c7a83aa357e827d13d3b7d611720d..94aa50495bc22e844868716b7e6d38e5c7b6a917 100644
--- a/src/Configuration.cc
+++ b/src/Configuration.cc
@@ -20,7 +20,6 @@
 #include <fstream>
 #include <iostream>
 #include <utility>
-#include <vector>
 
 #include "Configuration.hh"
 
@@ -31,9 +30,7 @@
 #include <boost/tokenizer.hpp>
 #pragma GCC diagnostic pop
 
-using namespace std;
-
-Hook::Hook(string global_init_file_arg)
+Configuration::Hook::Hook(string global_init_file_arg)
 {
   if (global_init_file_arg.empty())
     {
@@ -43,7 +40,7 @@ Hook::Hook(string global_init_file_arg)
   hooks["global_init_file"] = move(global_init_file_arg);
 }
 
-Path::Path(vector<string> includepath_arg)
+Configuration::Path::Path(vector<string> includepath_arg)
 {
   if (includepath_arg.empty())
     {
@@ -53,12 +50,13 @@ Path::Path(vector<string> includepath_arg)
   paths["include"] = move(includepath_arg);
 }
 
-FollowerNode::FollowerNode(string computerName_arg, string port_arg, int minCpuNbr_arg,
-                           int maxCpuNbr_arg, string userName_arg, string password_arg,
-                           string remoteDrive_arg, string remoteDirectory_arg,
-                           string programPath_arg, string programConfig_arg,
-                           string matlabOctavePath_arg, bool singleCompThread_arg,
-                           int numberOfThreadsPerJob_arg, string operatingSystem_arg) :
+Configuration::FollowerNode::FollowerNode(string computerName_arg, string port_arg,
+                                          int minCpuNbr_arg, int maxCpuNbr_arg, string userName_arg,
+                                          string password_arg, string remoteDrive_arg,
+                                          string remoteDirectory_arg, string programPath_arg,
+                                          string programConfig_arg, string matlabOctavePath_arg,
+                                          bool singleCompThread_arg, int numberOfThreadsPerJob_arg,
+                                          string operatingSystem_arg) :
     computerName {move(computerName_arg)},
     port {move(port_arg)},
     minCpuNbr {minCpuNbr_arg},
@@ -89,7 +87,8 @@ FollowerNode::FollowerNode(string computerName_arg, string port_arg, int minCpuN
       }
 }
 
-Cluster::Cluster(member_nodes_t member_nodes_arg) : member_nodes {move(member_nodes_arg)}
+Configuration::Cluster::Cluster(member_nodes_t member_nodes_arg) :
+    member_nodes {move(member_nodes_arg)}
 {
   if (member_nodes.empty())
     {
diff --git a/src/Configuration.hh b/src/Configuration.hh
index 8e8a59e45689755ae4f9328ed25edecf503fd4a4..5b6014c2d1eb16225ff73a65e99b2e0ac8fd2c30 100644
--- a/src/Configuration.hh
+++ b/src/Configuration.hh
@@ -28,82 +28,68 @@
 
 using namespace std;
 
-using member_nodes_t = map<string, double>;
-
-class Hook
+/* The abstract representation of the configuration.
+   Merges information from the command-line and from the configuration file. */
+class Configuration
 {
 public:
-  explicit Hook(string global_init_file_arg);
+  Configuration(bool parallel_arg, bool parallel_test_arg, bool parallel_follower_open_mode_arg,
+                bool parallel_use_psexec_arg, string cluster_name);
 
 private:
-  map<string, string> hooks;
+  using member_nodes_t = map<string, double>;
 
-public:
-  [[nodiscard]] map<string, string>
-  get_hooks() const
+  class Hook
   {
-    return hooks;
+  public:
+    explicit Hook(string global_init_file_arg);
+    [[nodiscard]] map<string, string>
+    get_hooks() const
+    {
+      return hooks;
+    };
+
+  private:
+    map<string, string> hooks;
   };
-};
 
-class Path
-{
-public:
-  explicit Path(vector<string> includepath_arg);
-
-private:
-  map<string, vector<string>> paths;
-
-public:
-  [[nodiscard]] map<string, vector<string>>
-  get_paths() const
+  class Path
   {
-    return paths;
+  public:
+    explicit Path(vector<string> includepath_arg);
+    [[nodiscard]] map<string, vector<string>>
+    get_paths() const
+    {
+      return paths;
+    };
+
+  private:
+    map<string, vector<string>> paths;
   };
-};
-
-class FollowerNode
-{
-  friend class Configuration;
-
-public:
-  FollowerNode(string computerName_arg, string port_arg, int minCpuNbr_arg, int maxCpuNbr_arg,
-               string userName_arg, string password_arg, string remoteDrive_arg,
-               string remoteDirectory_arg, string programPath_arg, string programConfig_arg,
-               string matlabOctavePath_arg, bool singleCompThread_arg,
-               int numberOfThreadsPerJob_arg, string operatingSystem_arg);
 
-protected:
-  const string computerName, port;
-  int minCpuNbr, maxCpuNbr;
-  const string userName, password;
-  const string remoteDrive, remoteDirectory;
-  const string programPath, programConfig, matlabOctavePath;
-  const bool singleCompThread;
-  const int numberOfThreadsPerJob;
-  const string operatingSystem;
-};
-
-class Cluster
-{
-  friend class Configuration;
-
-public:
-  explicit Cluster(member_nodes_t member_nodes_arg);
-
-protected:
-  member_nodes_t member_nodes;
-};
+  struct FollowerNode
+  {
+    FollowerNode(string computerName_arg, string port_arg, int minCpuNbr_arg, int maxCpuNbr_arg,
+                 string userName_arg, string password_arg, string remoteDrive_arg,
+                 string remoteDirectory_arg, string programPath_arg, string programConfig_arg,
+                 string matlabOctavePath_arg, bool singleCompThread_arg,
+                 int numberOfThreadsPerJob_arg, string operatingSystem_arg);
+    const string computerName, port;
+    int minCpuNbr, maxCpuNbr;
+    const string userName, password;
+    const string remoteDrive, remoteDirectory;
+    const string programPath, programConfig, matlabOctavePath;
+    const bool singleCompThread;
+    const int numberOfThreadsPerJob;
+    const string operatingSystem;
+  };
 
-/* The abstract representation of the configuration.
-   Merges information from the command-line and from the configuration file. */
-class Configuration
-{
-public:
-  Configuration(bool parallel_arg, bool parallel_test_arg, bool parallel_follower_open_mode_arg,
-                bool parallel_use_psexec_arg, string cluster_name);
+  struct Cluster
+  {
+    explicit Cluster(member_nodes_t member_nodes_arg);
+    member_nodes_t member_nodes;
+  };
 
-private:
   const bool parallel, parallel_test, parallel_follower_open_mode, parallel_use_psexec;
   const string cluster_name;
   string firstClusterName;