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")
+}
