diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 4f95662..ddf0c1e 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -10,24 +10,6 @@ ENV DEBIAN_FRONTEND=noninteractive
 RUN apt-get update \
     && apt-get -y install --no-install-recommends apt-utils 2>&1
 
-RUN go get -u -v \
-    github.com/mdempsky/gocode \
-    github.com/uudashr/gopkgs/cmd/gopkgs \
-    github.com/ramya-rao-a/go-outline \
-    github.com/acroca/go-symbols \
-    golang.org/x/tools/cmd/guru \
-    golang.org/x/tools/cmd/gorename \
-    github.com/rogpeppe/godef \
-    github.com/zmb3/gogetdoc \
-    github.com/sqs/goreturns \
-    golang.org/x/tools/cmd/goimports \
-    golang.org/x/lint/golint \
-    github.com/alecthomas/gometalinter \
-    honnef.co/go/tools/... \
-    github.com/golangci/golangci-lint/cmd/golangci-lint \
-    github.com/mgechev/revive \
-    github.com/derekparker/delve/cmd/dlv 2>&1
-
 # gocode-gomod
 RUN go get -x -d github.com/stamblerre/gocode 2>&1 \
     && go build -o gocode-gomod github.com/stamblerre/gocode \
@@ -44,3 +26,29 @@ ENV DEBIAN_FRONTEND=dialog
 
 # Set the default shell to bash rather than sh
 ENV SHELL /bin/bash
+
+# go tools
+RUN go get -u -v \
+    github.com/mdempsky/gocode \
+    github.com/uudashr/gopkgs/cmd/gopkgs \
+    github.com/ramya-rao-a/go-outline \
+    github.com/acroca/go-symbols \
+    github.com/godoctor/godoctor \
+    golang.org/x/tools/cmd/guru \
+    golang.org/x/tools/cmd/gorename \
+    github.com/rogpeppe/godef \
+    github.com/zmb3/gogetdoc \
+    github.com/haya14busa/goplay/cmd/goplay \
+    github.com/sqs/goreturns \
+    github.com/josharian/impl \
+    github.com/davidrjenni/reftools/cmd/fillstruct \
+    github.com/fatih/gomodifytags \
+    github.com/cweill/gotests/... \
+    golang.org/x/tools/cmd/goimports \
+    golang.org/x/lint/golint \
+    golang.org/x/tools/cmd/gopls \
+    github.com/alecthomas/gometalinter \
+    honnef.co/go/tools/... \
+    github.com/golangci/golangci-lint/cmd/golangci-lint \
+    github.com/mgechev/revive \
+    github.com/derekparker/delve/cmd/dlv 2>&1
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index a7d3c13..41e715c 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -11,6 +11,8 @@
 		"seccomp=unconfined"
 	],
 	"settings": {
-		"go.gopath": "/go"
+		"go.gopath": "/go",
+		"go.inferGopath": true,
+		"go.useLanguageServer": true
 	}
 }
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 4b21482..a99da60 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -6,7 +6,7 @@
             "type": "go",
             "request": "launch",
             "mode": "debug",
-            "program": "${workspaceFolder}/server.go"
+            "program": "${workspaceFolder}/src/main/server.go"
         }
     ]
 }
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..5672a16
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+    "go.useLanguageServer": true,
+    "go.inferGopath": true
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 13f9c0f..9924b5d 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,26 @@ Some things to try:
    - Press F1 and run the **Remote-Containers: Forward Port from Container...** command.
    - Select port 5000.
    - Click "Open Browser" in the notification that appears to access the web app on this new port.
-  
+3. **Refactoring - rename:**
+    - Open `hello.go`, select method name `Hello` press F1 and run the **Rename Symbol** command.
+3. **Refactoring - extract:**
+   - Open `hello.go` and select string, press F1 and run the **Go: Extract to variable** command.
+   - Open `hello.go` and select line with return statement, press F1 and run the **Go: Extract to function** command.
+3. **Generate tests:**
+    - Open `hello.go` and press F1 and run the **Go: Generate Unit Tests For File** command.
+    - Implement a test case: Open file `hello_test.go` and edit the line with the `TODO` comment: `{"hello without name", "Hello, "},` 
+    - You can toggle between implementation file and test file with press F1 and run the **Go: Toggle Test File**
+    - Tests can also run as benchmarks: Open file `hello_test.go`, press F1 and run the **Go: Benchmark File**
+4. **Stub generation:** ( [details](https://github.com/josharian/impl))
+   - define a struct `type mock struct {}`, enter a new line , press F1 and run the **Go: Generate interface stubs** command.
+   - edit command `m *mock http.ResponseWriter`
+4. **Fill structs:** ( [details](https://github.com/davidrjenni/reftools/tree/master/cmd/fillstruct))
+   - Open `hello.go` and select `user{}` of variable asignment, press F1 and run the **Go: Fill struct** command.
+4. **Add json tags to structs:** ( [details](https://github.com/fatih/gomodifytags))
+   - Open `hello.go` and go with cursor in to a struct, press F1 and run the **Go: Add Tags To Struct Fields** command.
+
+
+
 ## Contributing
 
 This project welcomes contributions and suggestions. Most contributions require you to agree to a
diff --git a/src/hello/hello.go b/src/hello/hello.go
new file mode 100644
index 0000000..323b848
--- /dev/null
+++ b/src/hello/hello.go
@@ -0,0 +1,24 @@
+package hello
+
+import ()
+
+// User user type
+type User struct {
+	ID   int64
+	Name string
+	Addr *Address
+}
+
+// Address address type
+type Address struct {
+	City   string
+	ZIP    int
+	LatLng [2]float64
+}
+
+var alex = User{}
+
+// Hello writes a welcome string
+func Hello() string {
+	return "Hello, " + alex.Name
+}
diff --git a/server.go b/src/main/server.go
similarity index 80%
rename from server.go
rename to src/main/server.go
index 90bfbb3..2afa31f 100644
--- a/server.go
+++ b/src/main/server.go
@@ -7,17 +7,18 @@ package main
 
 import (
 	"fmt"
+	"hello"
 	"io"
 	"net/http"
 )
 
-func hello(w http.ResponseWriter, r *http.Request) {
-	io.WriteString(w, "Hello remote world!")
+func handle(w http.ResponseWriter, r *http.Request) {
+	io.WriteString(w, hello.Hello())
 }
 
 func main() {
 	portNumber := "9000"
-	http.HandleFunc("/", hello)
+	http.HandleFunc("/", handle)
 	fmt.Println("Server listening on port ", portNumber)
 	http.ListenAndServe(":"+portNumber, nil)
 }