diff --git a/core/kg/cmd/commands/root.go b/core/kg/cmd/commands/root.go
index 812cdf1..b5c92e2 100644
--- a/core/kg/cmd/commands/root.go
+++ b/core/kg/cmd/commands/root.go
@@ -33,17 +33,10 @@
 		FileLocation:  "server.log",
 	}
 	logger := log.NewLogger(config)
-	srv, err := server.NewServer(logger)
-	if err != nil {
-		logger.Error(err.Error())
-		return err
-	}
-	defer srv.Shutdown()
+	grpcServer := server.NewGRPCServer(logger)
+	servers := server.New(logger)
+	servers.AddServers(grpcServer)
+	servers.Run()
 
-	serverErr := srv.Start()
-	if serverErr != nil {
-		logger.Error(err.Error())
-		return serverErr
-	}
 	return nil
 }
diff --git a/core/kg/go.mod b/core/kg/go.mod
index 5efcf10..5b1e996 100644
--- a/core/kg/go.mod
+++ b/core/kg/go.mod
@@ -7,6 +7,7 @@
 	github.com/jmoiron/sqlx v1.3.1
 	github.com/pkg/errors v0.9.1
 	github.com/spf13/cobra v1.1.3
+	github.com/vardius/shutdown v1.0.2
 	go.uber.org/zap v1.16.0
 	golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 // indirect
 	golang.org/x/tools v0.0.0-20200313205530-4303120df7d8 // indirect
diff --git a/core/kg/go.sum b/core/kg/go.sum
index 114f18a..04cc7b0 100644
--- a/core/kg/go.sum
+++ b/core/kg/go.sum
@@ -229,6 +229,8 @@
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/vardius/shutdown v1.0.2 h1:wNHRpdYc+KvJ3Q9KmkwKiqsnaW5LfkcP9ElXXv0OpC4=
+github.com/vardius/shutdown v1.0.2/go.mod h1:rvvQd32kv5NJycU1l4VJtqrJKY0Gg0IoQpVxZJeL44M=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
diff --git a/core/kg/server/grpc_server.go b/core/kg/server/grpc_server.go
new file mode 100644
index 0000000..c36c7d2
--- /dev/null
+++ b/core/kg/server/grpc_server.go
@@ -0,0 +1,62 @@
+package server
+
+import (
+	"net"
+	"os"
+
+	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/giolekva/pcloud/core/kg/store"
+	"google.golang.org/grpc"
+)
+
+const listenerPort = ":9081"
+
+// GRPCServerImpl grpc server implementation
+type GRPCServerImpl struct {
+	Log   *log.Logger
+	srv   *grpc.Server
+	store store.Store
+}
+
+var _ Server = &GRPCServerImpl{}
+
+// NewGRPCServer creates new GRPC Server
+func NewGRPCServer(logger *log.Logger) Server {
+	a := &GRPCServerImpl{
+		Log: logger,
+	}
+
+	pwd, _ := os.Getwd()
+	a.Log.Info("GRPC server current working", log.String("directory", pwd))
+	return a
+}
+
+// Start method starts an app
+func (a *GRPCServerImpl) Start() error {
+	a.Log.Info("Starting GRPC Server...")
+
+	// settings := model.NewConfig().SqlSettings
+	// a.store = sqlstore.New(settings)
+
+	lis, err := net.Listen("tcp", listenerPort)
+	if err != nil {
+		a.Log.Error("failed to listen: %v", log.Err(err))
+		return err
+	}
+
+	a.srv = grpc.NewServer()
+
+	a.Log.Info("GRPC Server is listening on", log.String("port", listenerPort))
+	if err := a.srv.Serve(lis); err != nil {
+		a.Log.Error("failed to serve: %v", log.Err(err))
+		return err
+	}
+	return nil
+}
+
+// Shutdown method shuts server down
+func (a *GRPCServerImpl) Shutdown() error {
+	a.Log.Info("Stopping GRPC Server...")
+	a.srv.GracefulStop()
+	return nil
+}
diff --git a/core/kg/server/server.go b/core/kg/server/server.go
deleted file mode 100644
index 12c2905..0000000
--- a/core/kg/server/server.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package server
-
-import (
-	"net"
-	"os"
-
-	"github.com/giolekva/pcloud/core/kg/log"
-	"github.com/giolekva/pcloud/core/kg/store"
-	"google.golang.org/grpc"
-)
-
-const listenerPort = ":9081"
-
-// Server type defines application global state
-type Server struct {
-	Log   *log.Logger
-	srv   *grpc.Server
-	store store.Store
-}
-
-// NewServer creates new Server
-func NewServer(logger *log.Logger) (*Server, error) {
-	a := &Server{
-		Log: logger,
-	}
-
-	pwd, _ := os.Getwd()
-	a.Log.Info("Current working", log.String("directory", pwd))
-	return a, nil
-}
-
-// Start method starts an app
-func (a *Server) Start() error {
-	// settings := model.NewConfig().SqlSettings
-	// a.store = sqlstore.New(settings)
-
-	lis, err := net.Listen("tcp", listenerPort)
-	if err != nil {
-		a.Log.Error("failed to listen: %v", log.Err(err))
-		return err
-	}
-
-	a.srv = grpc.NewServer()
-
-	a.Log.Info("Server is listening on", log.String("port", listenerPort))
-	if err := a.srv.Serve(lis); err != nil {
-		a.Log.Error("failed to serve: %v", log.Err(err))
-		return err
-	}
-	a.Log.Info("Server stopped")
-	return nil
-}
-
-// Shutdown method shuts server down
-func (a *Server) Shutdown() {
-	a.Log.Info("Stopping Server...")
-	a.srv.GracefulStop()
-}
diff --git a/core/kg/server/servers.go b/core/kg/server/servers.go
new file mode 100644
index 0000000..d197666
--- /dev/null
+++ b/core/kg/server/servers.go
@@ -0,0 +1,69 @@
+package server
+
+import (
+	"os"
+
+	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/vardius/shutdown"
+)
+
+// Server interface
+type Server interface {
+	Start() error
+	Shutdown() error
+}
+
+// Servers represents different server services
+type Servers struct {
+	servers []Server
+	logger  *log.Logger
+}
+
+// New provides new service application
+func New(logger *log.Logger) *Servers {
+	return &Servers{
+		logger: logger,
+	}
+}
+
+// AddServers adds servers to service
+func (ss *Servers) AddServers(servers ...Server) {
+	ss.servers = append(ss.servers, servers...)
+}
+
+// Run runs the service application
+func (ss *Servers) Run() {
+	for _, server := range ss.servers {
+		go func(server Server) {
+			if err := server.Start(); err != nil {
+				ss.logger.Error("can't start server", log.Err(err))
+				os.Exit(1)
+			}
+		}(server)
+	}
+	shutdown.GracefulStop(func() { ss.shutdown() })
+}
+
+func (ss *Servers) shutdown() {
+	ss.logger.Info("shutting down...")
+
+	errCh := make(chan error, len(ss.servers))
+
+	for _, server := range ss.servers {
+		go func(server Server) {
+			errCh <- server.Shutdown()
+		}(server)
+	}
+
+	for i := 0; i < len(ss.servers); i++ {
+		if err := <-errCh; err != nil {
+			go func(err error) {
+				ss.logger.Error("shutdown error", log.Err(err))
+				os.Exit(1)
+			}(err)
+			return
+		}
+	}
+
+	ss.logger.Info("gracefully stopped")
+}
