diff --git a/core/client/cmd/pcloud/app_android.go b/core/client/cmd/pcloud/app_android.go
index c66b401..61737ee 100644
--- a/core/client/cmd/pcloud/app_android.go
+++ b/core/client/cmd/pcloud/app_android.go
@@ -3,7 +3,6 @@
 import (
 	"errors"
 	"fmt"
-	"time"
 	"unsafe"
 
 	"gioui.org/app"
@@ -84,16 +83,12 @@
 }
 
 func (a *androidApp) StartVPN(config []byte) error {
-	fmt.Println("2222222")
 	a.nebulaConfig = config
-	fmt.Println(string(a.nebulaConfig))
 	return jni.Do(a.jvm, func(env *jni.Env) error {
-		fmt.Println(123123)
 		cls := jni.GetObjectClass(env, a.activity)
 		m := jni.GetMethodID(env, cls, "startVpn", "(Ljava/lang/String;)Ljava/lang/String;")
 		jConfig := jni.JavaString(env, string(config))
 		_, err := jni.CallObjectMethod(env, a.activity, m, jni.Value(jConfig))
-		fmt.Println(123123123)
 		return err
 
 	})
@@ -144,14 +139,6 @@
 	if string(a.nebulaConfig) == "" {
 		return nil
 	}
-	fmt.Println(333333333)
-	fmt.Println(string(a.nebulaConfig))
-	// return nil
-	// if err := a.callVoidMethod(a.appCtx, "prepareVPN", "(Landroid/app/Activity;I)V",
-	// 	jni.Value(act), jni.Value(requestPrepareVPN)); err != nil {
-	// 	return nil
-	// }
-
 	config := nc.NewC(logrus.StandardLogger())
 	if err := config.LoadString(string(a.nebulaConfig)); err != nil {
 		return err
@@ -161,24 +148,13 @@
 	if err != nil {
 		panic(err)
 	}
-	t := time.Now()
-	fmt.Println("#########3")
-	fmt.Println(t.String())
-	fmt.Println(hostCert.Details.NotBefore.String())
-	fmt.Println(hostCert.Details.NotAfter.String())
-	fmt.Println(t.Before(hostCert.Details.NotBefore))
-	fmt.Println(t.After(hostCert.Details.NotAfter))
-	fmt.Println("#########3")
-	// return nil
 	return jni.Do(a.jvm, func(env *jni.Env) error {
-		fmt.Println("---------")
 		cls := jni.GetObjectClass(env, a.service)
 		m := jni.GetMethodID(env, cls, "newBuilder", "()Landroid/net/VpnService$Builder;")
 		b, err := jni.CallObjectMethod(env, a.service, m)
 		if err != nil {
 			return fmt.Errorf("PCloudVPNService.newBuilder: %v", err)
 		}
-		fmt.Println("---------")
 		bcls := jni.GetObjectClass(env, b)
 		addAddress := jni.GetMethodID(env, bcls, "addAddress", "(Ljava/lang/String;I)Landroid/net/VpnService$Builder;")
 		addRoute := jni.GetMethodID(env, bcls, "addRoute", "(Ljava/lang/String;I)Landroid/net/VpnService$Builder;")
@@ -229,7 +205,6 @@
 			return err
 		}
 		fd := int(tunFD)
-		fmt.Println("===========")
 		ctrl, err := nebula.Main(config, false, "pcloud", logrus.StandardLogger(), &fd)
 		if err != nil {
 			return err
diff --git a/core/client/cmd/pcloud/client.go b/core/client/cmd/pcloud/client.go
index b48db76..0d059ff 100644
--- a/core/client/cmd/pcloud/client.go
+++ b/core/client/cmd/pcloud/client.go
@@ -7,7 +7,6 @@
 	"encoding/base64"
 	"encoding/json"
 	"errors"
-	"fmt"
 	"io"
 	"net/http"
 
@@ -112,7 +111,6 @@
 		return nil, err
 	}
 	cfgYaml := cfgYamlB.Bytes()
-	fmt.Println(string(cfgYaml))
 	var cfgMap map[string]interface{}
 	if err := yaml.Unmarshal(cfgYaml, &cfgMap); err != nil {
 		return nil, err
@@ -133,6 +131,5 @@
 		return nil, nil, err
 	}
 	curve25519.ScalarBaseMult(&pubkey, &privkey)
-	fmt.Println()
 	return pubkey[:], privkey[:], nil
 }
diff --git a/core/client/cmd/pcloud/main.go b/core/client/cmd/pcloud/main.go
index 1e43fa5..fa013c9 100644
--- a/core/client/cmd/pcloud/main.go
+++ b/core/client/cmd/pcloud/main.go
@@ -10,10 +10,12 @@
 	"time"
 
 	"gioui.org/app"
+	"gioui.org/font/gofont"
 	"gioui.org/io/system"
 	"gioui.org/layout"
 	"gioui.org/op"
 	"gioui.org/unit"
+	"gioui.org/widget/material"
 	"github.com/skip2/go-qrcode"
 )
 
@@ -34,10 +36,11 @@
 }
 
 func newProcessor() *processor {
+	th := material.NewTheme(gofont.Collection())
 	return &processor{
 		vc:                NewDirectVPNClient(*vpnApiAddr),
 		app:               createApp(),
-		ui:                NewUI(),
+		ui:                NewUI(th),
 		inviteQrCh:        make(chan image.Image, 1),
 		inviteQrScannedCh: make(chan []byte, 1),
 		onConnectCh:       make(chan interface{}, 1),
@@ -95,17 +98,11 @@
 			p.ui.InviteQRGenerated(img)
 			w.Invalidate()
 		case code := <-p.inviteQrScannedCh:
-			// go func() {
-			fmt.Println("00000000")
 			p.JoinNetworkAndConnect(code)
-			fmt.Println("00000000")
-			// }()
 		case s := <-p.onConnectCh:
-			fmt.Println("--- 1111111111")
 			if err := p.app.Connect(s); err != nil {
-				panic(err)
+				return err
 			}
-			fmt.Println("--- 1111111111")
 		}
 	}
 	return nil
diff --git a/core/client/cmd/pcloud/ui.go b/core/client/cmd/pcloud/ui.go
index 50e74ff..6f805fa 100644
--- a/core/client/cmd/pcloud/ui.go
+++ b/core/client/cmd/pcloud/ui.go
@@ -9,6 +9,7 @@
 	"gioui.org/op/paint"
 	"gioui.org/unit"
 	"gioui.org/widget"
+	"gioui.org/widget/material"
 )
 
 type (
@@ -17,6 +18,7 @@
 )
 
 type UI struct {
+	th     *material.Theme
 	invite struct {
 		open widget.Clickable
 		show bool
@@ -30,8 +32,8 @@
 	}
 }
 
-func NewUI() *UI {
-	return &UI{}
+func NewUI(th *material.Theme) *UI {
+	return &UI{th: th}
 }
 
 func (ui *UI) InviteQRGenerated(img image.Image) {
@@ -96,15 +98,10 @@
 func (ui *UI) layoutActions(gtx C) D {
 	return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
 		layout.Flexed(1, func(gtx C) D {
-			return ui.invite.open.Layout(gtx, func(gtx C) D {
-				return ColorBox(gtx, gtx.Constraints.Min, color.NRGBA{R: 255, A: 255})
-			})
-
+			return material.Button(ui.th, &ui.invite.open, "Invite").Layout(gtx)
 		}),
 		layout.Flexed(1, func(gtx C) D {
-			return ui.join.open.Layout(gtx, func(gtx C) D {
-				return ColorBox(gtx, gtx.Constraints.Min, color.NRGBA{G: 128, A: 255})
-			})
+			return material.Button(ui.th, &ui.join.open, "Join").Layout(gtx)
 		}),
 	)
 }
diff --git a/core/client/go.mod b/core/client/go.mod
index 76a8d55..c14150b 100644
--- a/core/client/go.mod
+++ b/core/client/go.mod
@@ -9,6 +9,7 @@
 	github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
 	github.com/slackhq/nebula v1.5.1
 	golang.org/x/crypto v0.0.0-20211202192323-5770296d904e
+	golang.org/x/exp v0.0.0-20210722180016-6781d3edade3
 	golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098 // indirect
 	sigs.k8s.io/yaml v1.1.0
 )
