diff --git a/core/kg/cmd/commands/root.go b/core/kg/cmd/commands/root.go
index b5c92e2..70a4d23 100644
--- a/core/kg/cmd/commands/root.go
+++ b/core/kg/cmd/commands/root.go
@@ -2,6 +2,7 @@
 
 import (
 	"github.com/giolekva/pcloud/core/kg/log"
+	"github.com/giolekva/pcloud/core/kg/model"
 	"github.com/giolekva/pcloud/core/kg/server"
 	"github.com/spf13/cobra"
 )
@@ -23,7 +24,7 @@
 }
 
 func serverCmdF(command *cobra.Command, args []string) error {
-	config := &log.LoggerConfiguration{
+	logger := log.NewLogger(&log.LoggerConfiguration{
 		EnableConsole: true,
 		ConsoleJSON:   true,
 		ConsoleLevel:  "debug",
@@ -31,11 +32,15 @@
 		FileJSON:      true,
 		FileLevel:     "debug",
 		FileLocation:  "server.log",
-	}
-	logger := log.NewLogger(config)
-	grpcServer := server.NewGRPCServer(logger)
+	})
+	config := model.NewConfig()
+
+	grpcServer := server.NewGRPCServer(logger, config, nil)
+	httpServer := server.NewHTTPServer(logger, config, nil)
+
 	servers := server.New(logger)
 	servers.AddServers(grpcServer)
+	servers.AddServers(httpServer)
 	servers.Run()
 
 	return nil
diff --git a/core/kg/go.mod b/core/kg/go.mod
index 5b1e996..ebc81e8 100644
--- a/core/kg/go.mod
+++ b/core/kg/go.mod
@@ -4,6 +4,7 @@
 
 require (
 	github.com/Masterminds/squirrel v1.5.0
+	github.com/gorilla/mux v1.8.0
 	github.com/jmoiron/sqlx v1.3.1
 	github.com/pkg/errors v0.9.1
 	github.com/spf13/cobra v1.1.3
diff --git a/core/kg/go.sum b/core/kg/go.sum
index 04cc7b0..60b5893 100644
--- a/core/kg/go.sum
+++ b/core/kg/go.sum
@@ -94,6 +94,8 @@
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
diff --git a/core/kg/model/config.go b/core/kg/model/config.go
index 021fb74..04cc39b 100644
--- a/core/kg/model/config.go
+++ b/core/kg/model/config.go
@@ -3,10 +3,20 @@
 const (
 	databaseDriverPostgres = "postgres"
 	defaultDataSource      = "postgres://user:test@localhost/pcloud_test?sslmode=disable&connect_timeout=10"
+
+	defaultHTTPHost         = "0.0.0.0"
+	defaultHTTPPort         = 9086
+	defaultHTTPReadTimeout  = 5
+	defaultHTTPWriteTimeout = 10
+	defaultHTTPIdleTimeout  = 120
+
+	defaultGRPCPort = 9087
 )
 
 type Config struct {
-	SqlSettings SqlSettings
+	SQLSettings  SQLSettings
+	HTTPSettings HTTPSettings
+	GRPCSettings GRPCSettings
 }
 
 func NewConfig() *Config {
@@ -16,15 +26,17 @@
 }
 
 func (c *Config) SetDefaults() {
-	c.SqlSettings.SetDefaults()
+	c.SQLSettings.SetDefaults()
+	c.HTTPSettings.SetDefaults()
+	c.GRPCSettings.SetDefaults()
 }
 
-type SqlSettings struct {
-	DriverName string `access:"environment,write_restrictable,cloud_restrictable"`
-	DataSource string `access:"environment,write_restrictable,cloud_restrictable"`
+type SQLSettings struct {
+	DriverName string
+	DataSource string
 }
 
-func (s *SqlSettings) SetDefaults() {
+func (s *SQLSettings) SetDefaults() {
 	if s.DriverName == "" {
 		s.DriverName = databaseDriverPostgres
 	}
@@ -33,3 +45,43 @@
 		s.DataSource = defaultDataSource
 	}
 }
+
+type HTTPSettings struct {
+	Host         string
+	Port         int
+	ReadTimeout  int
+	WriteTimeout int
+	IdleTimeout  int
+}
+
+func (s *HTTPSettings) SetDefaults() {
+	if s.Host == "" {
+		s.Host = defaultHTTPHost
+	}
+
+	if s.Port == 0 {
+		s.Port = defaultHTTPPort
+	}
+
+	if s.ReadTimeout == 0 {
+		s.ReadTimeout = defaultHTTPReadTimeout
+	}
+
+	if s.WriteTimeout == 0 {
+		s.WriteTimeout = defaultHTTPWriteTimeout
+	}
+
+	if s.IdleTimeout == 0 {
+		s.IdleTimeout = defaultHTTPIdleTimeout
+	}
+}
+
+type GRPCSettings struct {
+	Port int
+}
+
+func (s *GRPCSettings) SetDefaults() {
+	if s.Port == 0 {
+		s.Port = defaultGRPCPort
+	}
+}
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
+}
diff --git a/core/kg/store/sqlstore/store.go b/core/kg/store/sqlstore/store.go
index f5577f0..2fbe0c7 100644
--- a/core/kg/store/sqlstore/store.go
+++ b/core/kg/store/sqlstore/store.go
@@ -10,7 +10,7 @@
 type SqlStore struct {
 	db       *sqlx.DB
 	stores   SqlStoreStores
-	settings *model.SqlSettings
+	settings *model.SQLSettings
 }
 
 var _ store.Store = &SqlStore{}
@@ -19,7 +19,7 @@
 	user store.UserStore
 }
 
-func New(settings model.SqlSettings) *SqlStore {
+func New(settings model.SQLSettings) *SqlStore {
 	store := &SqlStore{
 		settings: &settings,
 	}
