diff --git a/docs/README.md b/docs/README.md
index b5d7993d2c49031785e3038b22db95367e30bb6a..95ba38b0da9718268cbf040a65d7571d7925ad63 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -19,18 +19,4 @@ $ bor server
 $ bor server --config ./legacy.toml
 ```
 
-- Modules, vhost and Cors configuration are common for all jsonrpc endpoints.
-
-Before:
-
-```
-$ bor --http --http.modules "eth,web" --ws --ws.modules "eth,web"
-```
-
-Now: 
-
-```
-$ bor server --http --ws --jsonrpc.modules "eth,web"
-```
-
 - ```Admin```, ```Personal``` and account related endpoints in ```Eth``` are being removed from the JsonRPC interface. Some of this functionality will be moved to the new GRPC server for operational tasks.
diff --git a/docs/cli/server.md b/docs/cli/server.md
index e2d961579a0299f0265dff8e26f6714c52605fd1..14e645907b32b1ee4e73367f637806e360eecd2c 100644
--- a/docs/cli/server.md
+++ b/docs/cli/server.md
@@ -109,8 +109,6 @@ The ```bor server``` command runs the Bor client.
 
 - ```jsonrpc.vhosts```: Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.
 
-- ```jsonrpc.modules```: API's offered over the HTTP-RPC interface.
-
 - ```http```: Enable the HTTP-RPC server.
 
 - ```http.addr```: HTTP-RPC server listening interface.
@@ -119,6 +117,8 @@ The ```bor server``` command runs the Bor client.
         
 - ```http.rpcprefix```: HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths.
 
+- ```http.modules```: API's offered over the HTTP-RPC interface.
+
 - ```ws```: Enable the WS-RPC server.
 
 - ```ws.addr```: WS-RPC server listening interface.
@@ -127,6 +127,8 @@ The ```bor server``` command runs the Bor client.
 
 - ```ws.rpcprefix```: HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.
 
+- ```ws.modules```: API's offered over the WS-RPC interface.
+
 - ```graphql```: Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well.
 
 ### P2P Options
diff --git a/internal/cli/server/config.go b/internal/cli/server/config.go
index a42470af45303bb609b4918fa2e112b1738ca166..0c3b8a5549b29a0de02546a50f3604a2193ec9f3 100644
--- a/internal/cli/server/config.go
+++ b/internal/cli/server/config.go
@@ -214,9 +214,6 @@ type JsonRPCConfig struct {
 	// IPCPath is the path of the ipc endpoint
 	IPCPath string `hcl:"ipc-path,optional"`
 
-	// Modules is the list of enabled api modules
-	Modules []string `hcl:"modules,optional"`
-
 	// VHost is the list of valid virtual hosts
 	VHost []string `hcl:"vhost,optional"`
 
@@ -256,6 +253,9 @@ type APIConfig struct {
 
 	// Host is the address to bind the api
 	Host string `hcl:"host,optional"`
+
+	// Modules is the list of enabled api modules
+	Modules []string `hcl:"modules,optional"`
 }
 
 type GpoConfig struct {
@@ -438,7 +438,6 @@ func DefaultConfig() *Config {
 		JsonRPC: &JsonRPCConfig{
 			IPCDisable: false,
 			IPCPath:    "",
-			Modules:    []string{"web3", "net"},
 			Cors:       []string{"*"},
 			VHost:      []string{"*"},
 			GasCap:     ethconfig.Defaults.RPCGasCap,
@@ -448,12 +447,14 @@ func DefaultConfig() *Config {
 				Port:    8545,
 				Prefix:  "",
 				Host:    "localhost",
+				Modules: []string{"web3", "net"},
 			},
 			Ws: &APIConfig{
 				Enabled: false,
 				Port:    8546,
 				Prefix:  "",
 				Host:    "localhost",
+				Modules: []string{"web3", "net"},
 			},
 			Graphql: &APIConfig{
 				Enabled: false,
@@ -851,11 +852,11 @@ func (c *Config) buildNode() (*node.Config, error) {
 			ListenAddr:      c.P2P.Bind + ":" + strconv.Itoa(int(c.P2P.Port)),
 			DiscoveryV5:     c.P2P.Discovery.V5Enabled,
 		},
-		HTTPModules:         c.JsonRPC.Modules,
+		HTTPModules:         c.JsonRPC.Http.Modules,
 		HTTPCors:            c.JsonRPC.Cors,
 		HTTPVirtualHosts:    c.JsonRPC.VHost,
 		HTTPPathPrefix:      c.JsonRPC.Http.Prefix,
-		WSModules:           c.JsonRPC.Modules,
+		WSModules:           c.JsonRPC.Ws.Modules,
 		WSOrigins:           c.JsonRPC.Cors,
 		WSPathPrefix:        c.JsonRPC.Ws.Prefix,
 		GraphQLCors:         c.JsonRPC.Cors,
diff --git a/internal/cli/server/flags.go b/internal/cli/server/flags.go
index 7403fc6c88206b912b86dce1eaecd33879f85eec..925c4b397eb13b7b02ddc5b0a2a4e9603d7bf01a 100644
--- a/internal/cli/server/flags.go
+++ b/internal/cli/server/flags.go
@@ -263,11 +263,6 @@ func (c *Command) Flags() *flagset.Flagset {
 		Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.",
 		Value: &c.cliConfig.JsonRPC.VHost,
 	})
-	f.SliceStringFlag(&flagset.SliceStringFlag{
-		Name:  "jsonrpc.modules",
-		Usage: "API's offered over the HTTP-RPC interface",
-		Value: &c.cliConfig.JsonRPC.Modules,
-	})
 
 	// http options
 	f.BoolFlag(&flagset.BoolFlag{
@@ -290,6 +285,12 @@ func (c *Command) Flags() *flagset.Flagset {
 		Usage: "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths.",
 		Value: &c.cliConfig.JsonRPC.Http.Prefix,
 	})
+	f.SliceStringFlag(&flagset.SliceStringFlag{
+		Name:  "http.modules",
+		Usage: "API's offered over the HTTP-RPC interface",
+		Value: &c.cliConfig.JsonRPC.Http.Modules,
+	})
+
 	// ws options
 	f.BoolFlag(&flagset.BoolFlag{
 		Name:  "ws",
@@ -311,6 +312,12 @@ func (c *Command) Flags() *flagset.Flagset {
 		Usage: "HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.",
 		Value: &c.cliConfig.JsonRPC.Ws.Prefix,
 	})
+	f.SliceStringFlag(&flagset.SliceStringFlag{
+		Name:  "ws.modules",
+		Usage: "API's offered over the WS-RPC interface",
+		Value: &c.cliConfig.JsonRPC.Ws.Modules,
+	})
+
 	// graphql options
 	f.BoolFlag(&flagset.BoolFlag{
 		Name:  "graphql",
diff --git a/internal/cli/server/server.go b/internal/cli/server/server.go
index f20ac43d1c1193b7a13fb4843ce71e604b3eeead..e882429e86c9ced1584b9f38432c79ad4c99df46 100644
--- a/internal/cli/server/server.go
+++ b/internal/cli/server/server.go
@@ -96,7 +96,7 @@ func NewServer(config *Config) (*Server, error) {
 
 	// graphql is started from another place
 	if config.JsonRPC.Graphql.Enabled {
-		if err := graphql.New(stack, backend.APIBackend, config.JsonRPC.Cors, config.JsonRPC.Modules); err != nil {
+		if err := graphql.New(stack, backend.APIBackend, config.JsonRPC.Cors, config.JsonRPC.VHost); err != nil {
 			return nil, fmt.Errorf("failed to register the GraphQL service: %v", err)
 		}
 	}