diff --git a/.ci/.golangci-master.yml b/.ci/.golangci-master.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1a21937d63f0d30e5daf6bf57d4f35763bf42da4
--- /dev/null
+++ b/.ci/.golangci-master.yml
@@ -0,0 +1,23 @@
+run:
+  timeout: 5m
+  issues-exit-code: 1
+output:
+  format: code-climate
+  print-issued-lines: true
+  print-linter-name: true
+  uniq-by-line: true
+  path-prefix: ""
+linters-settings:
+  gocyclo:
+    min-complexity: 15
+  golint:
+    min-confidence: 0.8
+linters:
+  disable-all: true
+  enable:
+    - gofmt
+    - golint
+    - gocyclo
+    - govet
+issues:
+  exclude-use-default: false
diff --git a/.ci/.golangci.yml b/.ci/.golangci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5c4c88e8338b257ad41a8b594d2aae8a27f82f2a
--- /dev/null
+++ b/.ci/.golangci.yml
@@ -0,0 +1,21 @@
+run:
+  timeout: 5m
+  issues-exit-code: 1
+output:
+  format: code-climate
+  print-issued-lines: true
+  print-linter-name: true
+  uniq-by-line: true
+  path-prefix: ""
+linters-settings:
+  gocyclo:
+    min-complexity: 15
+  golint:
+    min-confidence: 0.8
+linters:
+  disable-all: true
+  enable:
+    - gofmt
+    - golint
+    - gocyclo
+    - govet
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e896eedf2d1f44497013bef3fb944427d4a4364b..acbe3bcc482ea40ddc2d509f298a7b3ffade585d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,3 +1,42 @@
+stages:
+  - test
+
+code-quality-master:
+  image: golangci/golangci-lint:latest-alpine
+  tags:
+    - docker
+  stage: test
+  only:
+    - merge_requests
+  except:
+    variables:
+      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master"
+  script:
+    - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
+    # writes golangci-lint output to gl-code-quality-report.json
+    - golangci-lint run --config .ci/.golangci-master.yml | tee gl-code-quality-report.json
+  artifacts:
+    reports:
+      codequality: gl-code-quality-report.json
+
+
+code-quality:
+  image: golangci/golangci-lint:latest-alpine
+  tags:
+    - docker
+  stage: test
+  only:
+    - merge_requests
+  except:
+    variables:
+      - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
+  script:
+    - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
+    # writes golangci-lint output to gl-code-quality-report.json
+    - golangci-lint run --config .ci/.golangci.yml | tee gl-code-quality-report.json
+  artifacts:
+    reports:
+      codequality: gl-code-quality-report.json
 
 Documentation:
   image:
@@ -13,4 +52,4 @@ Documentation:
     - pandoc --filter pandoc-citeproc --bibliography=bibliography.bib --csl=acm-sig-proceedings.csl --variable papersize=a4paper -s *.md -o documentation.pdf
   artifacts:
     paths:
-      - documentation/design/documentation.pdf
\ No newline at end of file
+      - documentation/design/documentation.pdf
diff --git a/database/database.go b/database/database.go
index caefc09743776dcf6b5b3c07a5d062afa6f466f7..31b0312727c77e6abd3cd234b03435f3b1dd2d1d 100644
--- a/database/database.go
+++ b/database/database.go
@@ -35,7 +35,9 @@ func createDriver(uri, username, password string, encrypted bool) neo4j.Driver {
 		},
 	)
 
-	logError("failed creating database Driver", err)
+	if err != nil {
+		log.Info("failed creating database Driver:", err)
+	}
 
 	return driver
 }
@@ -45,7 +47,9 @@ func createSession(driver neo4j.Driver) neo4j.Session {
 	sessionConfig := neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite}
 	session, err := driver.NewSession(sessionConfig)
 
-	logError("failed creating database session", err)
+	if err != nil {
+		log.Info("failed creating database session:", err)
+	}
 
 	return session
 }
@@ -71,7 +75,9 @@ func (d Database) StoreNodes(json string) {
 			"stringToAdd": json,
 		})
 
-	logError("failed storing Nodes into database", err)
+	if err != nil {
+		log.Info("failed storing Nodes into database:", err)
+	}
 
 	log.Info("successfully added Nodes into database")
 }
@@ -96,7 +102,9 @@ func (d Database) StoreNodeEdgePoints(json string) {
 			"stringToAdd": json,
 		})
 
-	logError("failed storing NodeEdgePoints into database", err)
+	if err != nil {
+		log.Info("failed storing NodeEdgePoints into database:", err)
+	}
 
 	setNodeNodeEdgePointsRelation(session)
 
@@ -104,7 +112,7 @@ func (d Database) StoreNodeEdgePoints(json string) {
 
 }
 
-func (d Database) StoreConnections(json string){}
+func (d Database) StoreConnections(json string) {}
 
 //setNodeNodeEdgePointsRelation creates the database relations between "nodes" and "node edge points"
 func setNodeNodeEdgePointsRelation(session neo4j.Session) {
@@ -118,14 +126,13 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) {
 	_, err := session.Run(
 		query, map[string]interface{}{})
 
-	logError("failed storing NodeNodeEdgePointsRelation into database", err)
+	if err != nil {
+		log.Info("failed storing NodeNodeEdgePointsRelation into database:", err)
+	}
 
 	log.Info("successfully stored NodeNodeEdgePointsRelation into database")
 }
 
 //logError logs error with custom and error message
 func logError(message string, err error) {
-	if err != nil {
-		log.Info("%v: %v", message, err)
-	}
 }
diff --git a/go.mod b/go.mod
index 3f041eb5b6bf48dc5efff1d244a67fd6f95418ae..eb95a65a8340c359295c54d4030bb21ad018440c 100644
--- a/go.mod
+++ b/go.mod
@@ -13,7 +13,6 @@ require (
 	github.com/neo4j/neo4j-go-driver v1.8.3
 	github.com/rivo/tview v0.0.0-20200915114512-42866ecf6ca6
 	golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect
-	golang.org/x/tools v0.0.0-20190617190820-da514acc4774
 	google.golang.org/genproto v0.0.0-20200519141106-08726f379972 // indirect
 	google.golang.org/grpc v1.29.1
 	google.golang.org/protobuf v1.23.0
diff --git a/gosdn-cli/gosdn-cli.go b/gosdn-cli/gosdn-cli.go
index 0716fc26b4e912a23e14342db6d58566be11908d..daf42cfe93bb1de1ab3bc95953a08f79a867cbaf 100644
--- a/gosdn-cli/gosdn-cli.go
+++ b/gosdn-cli/gosdn-cli.go
@@ -3,13 +3,13 @@ package main
 import (
 	pb "code.fbi.h-da.de/cocsn/gosdn/cliInterface"
 	"context"
+	"flag"
 	"fmt"
 	"github.com/rivo/tview"
 	"google.golang.org/grpc"
 	"log"
 	"os"
 	"time"
-	"flag"
 )
 
 const (
@@ -29,18 +29,18 @@ var (
 type cliClientConfig struct {
 	goSDNCLIAddr4 *string
 	goSDNCLIPort4 *int
-	interactive *bool
-	goSDNCommand *string
+	interactive   *bool
+	goSDNCommand  *string
 }
 
 type commandOptions struct {
-	name string
+	name        string
 	description string
-	command func(conn *grpc.ClientConn) ()
+	command     func(conn *grpc.ClientConn)
 }
 
-var commandList = map[string] commandOptions {
-	"hello": {"hello", "test connection to goSDN controller", goSDNSayHello},
+var commandList = map[string]commandOptions{
+	"hello":    {"hello", "test connection to goSDN controller", goSDNSayHello},
 	"shutdown": {"shutdown", "request goSDN controller to shutdown", goSDNShutdown},
 	"testdb" :  {"testdb", "test all database connections", goSDNTestDB},
 	"tapigetnodes" :  {"testdb", "test all database connections", goSDNTestDB},
@@ -50,7 +50,7 @@ var commandList = map[string] commandOptions {
 	gosdn-cli allows to mode of operations:
 	- interactive: text GUI to operate goSDN
     - non-interactive: basic CLI without text GUI
- */
+*/
 
 func main() {
 	// This holds the basic configuration for gosdn-cli
@@ -65,7 +65,7 @@ func main() {
 	flag.Parse()
 
 	// Print complete command list and exit
-	if (*printCommandList == true) {
+	if *printCommandList == true {
 		for _, element := range commandList {
 			fmt.Println(element.name + "\t" + element.description)
 		}
@@ -88,11 +88,11 @@ func main() {
 	log.Println(("Connected to " + conn.Target()))
 
 	// Check for non-interactive or interactive mode
-	if(*myConfiguration.interactive == false) {
+	if *myConfiguration.interactive == false {
 		log.Println("starting in non-interactive mode")
 		// Lookup command or die
 		_, found := commandList[*myConfiguration.goSDNCommand]
-		if(found) {
+		if found {
 			// Excecute desired command
 			commandList[*myConfiguration.goSDNCommand].command(conn)
 		} else {
@@ -119,9 +119,9 @@ func main() {
 	}
 }
 
+func goSDNSayHello(conn *grpc.ClientConn) {
 
 func goSDNSayHello (conn *grpc.ClientConn) {
-
 	c := pb.NewGrpcCliClient(conn)
 
 	// Contact the server and print out its response.
@@ -137,10 +137,9 @@ func goSDNSayHello (conn *grpc.ClientConn) {
 	}
 	log.Printf("Greeting: %s", r.String())
 
-
 }
 
-func goSDNShutdown (conn *grpc.ClientConn) {
+func goSDNShutdown(conn *grpc.ClientConn) {
 
 	c := pb.NewGrpcCliClient(conn)
 
@@ -158,6 +157,6 @@ func goSDNShutdown (conn *grpc.ClientConn) {
 	log.Printf("Greeting: %s", r.GetMessage())
 }
 
-func goSDNTestDB(conn *grpc.ClientConn){
+func goSDNTestDB(conn *grpc.ClientConn) {
 	// TODO: fill with code
-}
\ No newline at end of file
+}
diff --git a/log/logger.go b/log/logger.go
index ab258d8b731c5b8692ee8afe37b9c18012b712b2..060ded548d286d1a863f6bd33d9d0b9edd809fb4 100644
--- a/log/logger.go
+++ b/log/logger.go
@@ -45,27 +45,27 @@ func Output(out io.Writer) {
 }
 
 func Debug(args ...interface{}) {
-	log(DEBUG, args)
+	log(DEBUG, args...)
 }
 
 func Info(args ...interface{}) {
-	log(INFO, args)
+	log(INFO, args...)
 }
 
 func Warn(args ...interface{}) {
-	log(WARNING, args)
+	log(WARNING, args...)
 }
 
 func Error(args ...interface{}) {
-	log(ERROR, args)
+	log(ERROR, args...)
 }
 
 func Fatal(args ...interface{}) {
-	log(FATAL, args)
+	log(FATAL, args...)
 }
 
 func Panic(args ...interface{}) {
-	log(PANIC, args)
+	log(PANIC, args...)
 }
 
 func log(level Level, args ...interface{}) {
diff --git a/nucleus/controller.go b/nucleus/controller.go
index 2b4cdb19219dc74bf77a48d02f3363df09d2ead3..de00cf348ba441d1d8ef8e6c4cd4c2b99eaf8d26 100644
--- a/nucleus/controller.go
+++ b/nucleus/controller.go
@@ -48,7 +48,7 @@ func (c *Core) Init(socket, configfile string) {
 	c.AttachDatabase()
 
 	//TODO: Create client config/CLI adapter
-	c.clients["ciena-mcp"] = ciena.NewMCPClient( "141.100.70.170", "", "", &c.database)
+	c.clients["ciena-mcp"] = ciena.NewMCPClient("141.100.70.170", "", "", &c.database)
 }
 
 func (c *Core) AttachDatabase() {
diff --git a/restconf/util/unmarshal.go b/restconf/util/unmarshal.go
index 2386eec8e18bc61e08b71fc7cc782ebe9318bb06..fa195f9357e99b8353a04f66b0a1abffa6c2f9ab 100644
--- a/restconf/util/unmarshal.go
+++ b/restconf/util/unmarshal.go
@@ -9,7 +9,7 @@ type YANGConsumer struct {
 	Data *bytes.Buffer
 }
 
-func (yc YANGConsumer)Consume(reader io.Reader, _ interface{}) error {
-	_,err := yc.Data.ReadFrom(reader)
+func (yc YANGConsumer) Consume(reader io.Reader, _ interface{}) error {
+	_, err := yc.Data.ReadFrom(reader)
 	return err
 }