diff --git a/core/kg/server/grpc_server.go b/core/kg/server/grpc_server.go
index c36c7d2..bc3b05f 100644
--- a/core/kg/server/grpc_server.go
+++ b/core/kg/server/grpc_server.go
@@ -1,29 +1,32 @@
 package server
 
 import (
+	"fmt"
 	"net"
 	"os"
 
 	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/giolekva/pcloud/core/kg/model"
 	"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
+	Log    *log.Logger
+	srv    *grpc.Server
+	config *model.Config
+	store  store.Store
 }
 
 var _ Server = &GRPCServerImpl{}
 
 // NewGRPCServer creates new GRPC Server
-func NewGRPCServer(logger *log.Logger) Server {
+func NewGRPCServer(logger *log.Logger, config *model.Config, store store.Store) Server {
 	a := &GRPCServerImpl{
-		Log: logger,
+		Log:    logger,
+		config: config,
+		store:  store,
 	}
 
 	pwd, _ := os.Getwd()
@@ -31,14 +34,14 @@
 	return a
 }
 
-// Start method starts an app
+// Start method starts a grpc server
 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)
+	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", a.config.GRPCSettings.Port))
 	if err != nil {
 		a.Log.Error("failed to listen: %v", log.Err(err))
 		return err
@@ -46,17 +49,18 @@
 
 	a.srv = grpc.NewServer()
 
-	a.Log.Info("GRPC Server is listening on", log.String("port", listenerPort))
+	a.Log.Info("GRPC Server is listening on", log.Int("port", a.config.GRPCSettings.Port))
 	if err := a.srv.Serve(lis); err != nil {
-		a.Log.Error("failed to serve: %v", log.Err(err))
+		a.Log.Error("failed to serve rpc: %v", log.Err(err))
 		return err
 	}
 	return nil
 }
 
-// Shutdown method shuts server down
+// Shutdown method shuts grpc server down
 func (a *GRPCServerImpl) Shutdown() error {
 	a.Log.Info("Stopping GRPC Server...")
 	a.srv.GracefulStop()
+	a.Log.Info("GRPC Server stopped")
 	return nil
 }
diff --git a/core/kg/server/http_server.go b/core/kg/server/http_server.go
new file mode 100644
index 0000000..e4a7688
--- /dev/null
+++ b/core/kg/server/http_server.go
@@ -0,0 +1,79 @@
+package server
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"net/http"
+	"os"
+	"time"
+
+	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/giolekva/pcloud/core/kg/model"
+	"github.com/giolekva/pcloud/core/kg/store"
+	"github.com/gorilla/mux"
+)
+
+// HTTPServerImpl http server implementation
+type HTTPServerImpl struct {
+	Log    *log.Logger
+	srv    *http.Server
+	root   *mux.Router
+	config *model.Config
+	store  store.Store
+}
+
+var _ Server = &HTTPServerImpl{}
+
+// NewHTTPServer creates new HTTP Server
+func NewHTTPServer(logger *log.Logger, config *model.Config, store store.Store) Server {
+	a := &HTTPServerImpl{
+		Log:    logger,
+		root:   mux.NewRouter(),
+		config: config,
+		store:  store,
+	}
+
+	pwd, _ := os.Getwd()
+	a.Log.Info("HTTP server current working", log.String("directory", pwd))
+	return a
+}
+
+// Start method starts a http server
+func (a *HTTPServerImpl) Start() error {
+	a.Log.Info("Starting HTTP Server...")
+
+	a.srv = &http.Server{
+		Addr:         fmt.Sprintf("%s:%d", a.config.HTTPSettings.Host, a.config.HTTPSettings.Port),
+		Handler:      a.root,
+		ReadTimeout:  time.Duration(a.config.HTTPSettings.ReadTimeout) * time.Second,
+		WriteTimeout: time.Duration(a.config.HTTPSettings.WriteTimeout) * time.Second,
+		IdleTimeout:  time.Duration(a.config.HTTPSettings.IdleTimeout) * time.Second,
+	}
+
+	a.Log.Info("HTTP Server is listening on", log.Int("port", a.config.HTTPSettings.Port))
+	if err := a.srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
+		a.Log.Error("failed to listen and serve: %v", log.Err(err))
+		return err
+	}
+	return nil
+}
+
+// Shutdown method shuts http server down
+func (a *HTTPServerImpl) Shutdown() error {
+	a.Log.Info("Stopping HTTP Server...")
+	if a.srv == nil {
+		return errors.New("no http server present")
+	}
+
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
+	defer cancel()
+	if err := a.srv.Shutdown(ctx); err != nil {
+		a.Log.Error("Unable to shutdown server", log.Err(err))
+	}
+
+	// a.srv.Close()
+	// a.srv = nil
+	a.Log.Info("HTTP Server stopped")
+	return nil
+}
