diff --git a/src/client/cmdLogin/login.go b/src/client/cmdLogin/login.go
index d2960f7ec95aea2950f94388e9bce4d88412df22..382fb3b1ff8f2736398536739761bb62557d99b2 100644
--- a/src/client/cmdLogin/login.go
+++ b/src/client/cmdLogin/login.go
@@ -3,9 +3,9 @@ package cmdLogin
 import (
 	"encoding/json"
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"syscall"
 
 	"golang.org/x/term"
diff --git a/src/client/cmdTemplate/templateCreate.go b/src/client/cmdTemplate/templateCreate.go
index 44eda68690e17ad2c7d1181c6632f9493ef2a6fc..92eb10934eb653f0267eec98226299a74424f9c6 100644
--- a/src/client/cmdTemplate/templateCreate.go
+++ b/src/client/cmdTemplate/templateCreate.go
@@ -1,9 +1,9 @@
 package cmdTemplate
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 
 	"github.com/go-resty/resty/v2"
 	"github.com/google/uuid"
diff --git a/src/client/cmdTemplate/templateDel.go b/src/client/cmdTemplate/templateDel.go
index b1a7be6cd2201e59b2a4d27603c3b8c3fa3fbf10..e5bbd494541bb7c814192c975ef5a2ff6eb9bde9 100644
--- a/src/client/cmdTemplate/templateDel.go
+++ b/src/client/cmdTemplate/templateDel.go
@@ -1,8 +1,8 @@
 package cmdTemplate
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Del struct {
diff --git a/src/client/cmdTemplate/templateEdit.go b/src/client/cmdTemplate/templateEdit.go
index a8b4f0579142aaa8ba106b1762c9a58d0f16a8a9..c770bb5b3fced7cc2866b3bb7f9338d15c009747 100644
--- a/src/client/cmdTemplate/templateEdit.go
+++ b/src/client/cmdTemplate/templateEdit.go
@@ -2,9 +2,9 @@ package cmdTemplate
 
 import (
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"strings"
 )
 
diff --git a/src/client/cmdTemplate/templateExportDisk.go b/src/client/cmdTemplate/templateExportDisk.go
index e8b9d4e303803ba57369f4400e73ca6508a9ecdf..abea4af778b93ad2d0bae2eafbff16092974ac8a 100644
--- a/src/client/cmdTemplate/templateExportDisk.go
+++ b/src/client/cmdTemplate/templateExportDisk.go
@@ -1,8 +1,8 @@
 package cmdTemplate
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type ExportDisk struct {
diff --git a/src/client/cmdUser/userAdd.go b/src/client/cmdUser/userAdd.go
index bb3973a693aaa97aea6c9c3e830acd6c3b41588f..0dbdc6eb5365f825dfb19078ee3ea1b495d00db1 100644
--- a/src/client/cmdUser/userAdd.go
+++ b/src/client/cmdUser/userAdd.go
@@ -4,10 +4,10 @@ import (
 	"encoding/csv"
 	"errors"
 	"io"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/caps"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"os"
 	"strings"
 )
diff --git a/src/client/cmdUser/userDel.go b/src/client/cmdUser/userDel.go
index b32dd2f84b2d75c1929223ca67c5b0d42d9c53fc..6ea96fa612289f6463589ff42cd3e13228a0517d 100644
--- a/src/client/cmdUser/userDel.go
+++ b/src/client/cmdUser/userDel.go
@@ -4,8 +4,8 @@ import (
 	"encoding/csv"
 	"errors"
 	"io"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 	"os"
 )
 
diff --git a/src/client/cmdUser/userList.go b/src/client/cmdUser/userList.go
index e66f11971c40a35e6391d37efaea876669f520b9..196d19e65f3f6b5b60877dcef46c0f09174f7d75 100644
--- a/src/client/cmdUser/userList.go
+++ b/src/client/cmdUser/userList.go
@@ -2,9 +2,9 @@ package cmdUser
 
 import (
 	"fmt"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"regexp"
 	"strings"
 )
diff --git a/src/client/cmdUser/userResetPwd.go b/src/client/cmdUser/userResetPwd.go
index 772dd77afc24398fe97ec1d60246a3d505d4470b..27441341844c69415b6c4882d3c9620e123f4003 100644
--- a/src/client/cmdUser/userResetPwd.go
+++ b/src/client/cmdUser/userResetPwd.go
@@ -2,8 +2,8 @@ package cmdUser
 
 import (
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type ResetPwd struct {
diff --git a/src/client/cmdUser/userSetCaps.go b/src/client/cmdUser/userSetCaps.go
index 61e76d2a851f1d5532299b28ec8773c7473e57d5..1fde3d16f9f162e8f557469f61c96a7bdbd19694 100644
--- a/src/client/cmdUser/userSetCaps.go
+++ b/src/client/cmdUser/userSetCaps.go
@@ -4,10 +4,10 @@ import (
 	"encoding/csv"
 	"errors"
 	"io"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/caps"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"os"
 	"strings"
 )
diff --git a/src/client/cmdUser/userUnlock.go b/src/client/cmdUser/userUnlock.go
index 5725307148ae5909f33ee52eb122d3e5fc34b114..219d307668e16888f8c68ad9531eb6dd0fda3840 100644
--- a/src/client/cmdUser/userUnlock.go
+++ b/src/client/cmdUser/userUnlock.go
@@ -2,8 +2,8 @@ package cmdUser
 
 import (
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Unlock struct {
diff --git a/src/client/cmdUser/userUpdatePwd.go b/src/client/cmdUser/userUpdatePwd.go
index 3dc52be685906cdb0ee5241d66f74813ce2c0783..4c6e38d05eb4fe01b8bf30cb574fdb03c79888c3 100644
--- a/src/client/cmdUser/userUpdatePwd.go
+++ b/src/client/cmdUser/userUpdatePwd.go
@@ -2,9 +2,9 @@ package cmdUser
 
 import (
 	"bytes"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 
 	"golang.org/x/crypto/ssh/terminal"
 )
diff --git a/src/client/cmdUser/userWhoami.go b/src/client/cmdUser/userWhoami.go
index 5b36fbafb872b6ad619f0336e684a5fe406c29d2..3af8624736bfa3a6b14346d4852bcb2f632ba5c6 100644
--- a/src/client/cmdUser/userWhoami.go
+++ b/src/client/cmdUser/userWhoami.go
@@ -1,8 +1,8 @@
 package cmdUser
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Whoami struct {
diff --git a/src/client/cmdVM/attachHelper.go b/src/client/cmdVM/attachHelper.go
index 6a99cf9bea809e6ae252c8643c2e20868a0590cd..f607e0dbbe05b93b5fd322298242dfcbb97bc1e4 100644
--- a/src/client/cmdVM/attachHelper.go
+++ b/src/client/cmdVM/attachHelper.go
@@ -5,10 +5,10 @@ import (
 	"errors"
 	"fmt"
 	"nexus-client/exec"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 	"sync"
 
 	"github.com/go-playground/validator/v10"
diff --git a/src/client/cmdVM/helper.go b/src/client/cmdVM/helper.go
index 9aab884885efc1309669a482217d431ce671c143..5ffd553a4b422fead99b806554a03af7320edda4 100644
--- a/src/client/cmdVM/helper.go
+++ b/src/client/cmdVM/helper.go
@@ -4,9 +4,9 @@ import (
 	"encoding/json"
 	"errors"
 	"nexus-client/cmd"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 	"regexp"
 	"strings"
 
diff --git a/src/client/cmdVM/vmAddAccess.go b/src/client/cmdVM/vmAddAccess.go
index 947eb7acf61402c541a4a13b8b9e3e20e972af52..d53c59dc1397f8a4525bb7d9f13fd608824f672a 100644
--- a/src/client/cmdVM/vmAddAccess.go
+++ b/src/client/cmdVM/vmAddAccess.go
@@ -5,10 +5,10 @@ import (
 	"errors"
 	"io"
 	"net/mail"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/caps"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 	"os"
 	"strings"
 )
diff --git a/src/client/cmdVM/vmAttachAsyncSingle.go b/src/client/cmdVM/vmAttachAsyncSingle.go
index bc17e8f34954b9825fb550617a8b05a7467a8deb..f088d1ed721c3c2f8228ac13c585ae3dc630c839 100644
--- a/src/client/cmdVM/vmAttachAsyncSingle.go
+++ b/src/client/cmdVM/vmAttachAsyncSingle.go
@@ -2,9 +2,9 @@ package cmdVM
 
 import (
 	"nexus-client/exec"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 )
 
 type AttachAsyncSingle struct {
diff --git a/src/client/cmdVM/vmAttachFromPwd.go b/src/client/cmdVM/vmAttachFromPwd.go
index 9d1ed6b506db0ca0e7c92244510fb3f4afd17323..d3e1fb895a769d59ddc3dcafcbdd726278bb9b0a 100644
--- a/src/client/cmdVM/vmAttachFromPwd.go
+++ b/src/client/cmdVM/vmAttachFromPwd.go
@@ -4,10 +4,10 @@ import (
 	"encoding/json"
 	"nexus-client/exec"
 	e "nexus-client/exec"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 
 	"github.com/go-playground/validator/v10"
 )
diff --git a/src/client/cmdVM/vmCreate.go b/src/client/cmdVM/vmCreate.go
index bbfb41532142b9ca6a5e24df03449793410d2d2b..38198dcd67fe1575fea4eb26c50a1ac74914e740 100644
--- a/src/client/cmdVM/vmCreate.go
+++ b/src/client/cmdVM/vmCreate.go
@@ -2,10 +2,10 @@ package cmdVM
 
 import (
 	"fmt"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 	"strconv"
 
 	"github.com/google/uuid"
diff --git a/src/client/cmdVM/vmCreds2csv.go b/src/client/cmdVM/vmCreds2csv.go
index a46719afc2d59d9478ff71a15966bd0c25186f08..5474cd93ecd6fb582128322905e91698b3c275a0 100644
--- a/src/client/cmdVM/vmCreds2csv.go
+++ b/src/client/cmdVM/vmCreds2csv.go
@@ -2,8 +2,8 @@ package cmdVM
 
 import (
 	"fmt"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 	"os"
 )
 
diff --git a/src/client/cmdVM/vmDel.go b/src/client/cmdVM/vmDel.go
index c788dea8206b9c73c3fb60da4c7c40b9c9c42bd0..5251c0f8f50a69c5050c6026910f6c22d1d41039 100644
--- a/src/client/cmdVM/vmDel.go
+++ b/src/client/cmdVM/vmDel.go
@@ -1,8 +1,8 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Del struct {
diff --git a/src/client/cmdVM/vmDelAccess.go b/src/client/cmdVM/vmDelAccess.go
index cf14dc4769e681b6694ac8dc57b1a4fb0f1c1865..c830076c842276134409766c75f72a18a7449cd5 100644
--- a/src/client/cmdVM/vmDelAccess.go
+++ b/src/client/cmdVM/vmDelAccess.go
@@ -5,8 +5,8 @@ import (
 	"errors"
 	"io"
 	"net/mail"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 	"os"
 )
 
diff --git a/src/client/cmdVM/vmEdit.go b/src/client/cmdVM/vmEdit.go
index 1beae87611af987a2fe4124ab3d38bc0d779f47c..0a1cf1ae8322c7222e7fbf05bfc619727e6b5b6a 100644
--- a/src/client/cmdVM/vmEdit.go
+++ b/src/client/cmdVM/vmEdit.go
@@ -2,10 +2,10 @@ package cmdVM
 
 import (
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 	"strconv"
 	"strings"
 )
diff --git a/src/client/cmdVM/vmExportDir.go b/src/client/cmdVM/vmExportDir.go
index ccb30e28dd46a47ba62e64ed5b85cfe0f52af13f..61b5521c8643cfdbcf43dc05028a9f29b1330fe7 100644
--- a/src/client/cmdVM/vmExportDir.go
+++ b/src/client/cmdVM/vmExportDir.go
@@ -1,9 +1,9 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 )
 
 type ExportDir struct {
diff --git a/src/client/cmdVM/vmImportDir.go b/src/client/cmdVM/vmImportDir.go
index 60db0a65e2d967ad465790b9d93fe57b1ca58bed..3e04a94454ae855488cd3739c9423c2d341f24eb 100644
--- a/src/client/cmdVM/vmImportDir.go
+++ b/src/client/cmdVM/vmImportDir.go
@@ -1,8 +1,8 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 	"os"
 )
 
diff --git a/src/client/cmdVM/vmListSingle.go b/src/client/cmdVM/vmListSingle.go
index 3c08662b621947148977b996e9062b808888d688..f8f35d5db841442ef2cd688064ec9b846f451b33 100644
--- a/src/client/cmdVM/vmListSingle.go
+++ b/src/client/cmdVM/vmListSingle.go
@@ -1,8 +1,8 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type ListSingle struct {
diff --git a/src/client/cmdVM/vmReboot.go b/src/client/cmdVM/vmReboot.go
index ff7b1c44159dc5f9f4b30129573eb43209a9eba1..6faee7114f35d225683e395c15943ad99733eaa2 100644
--- a/src/client/cmdVM/vmReboot.go
+++ b/src/client/cmdVM/vmReboot.go
@@ -1,8 +1,8 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Reboot struct {
diff --git a/src/client/cmdVM/vmShutdown.go b/src/client/cmdVM/vmShutdown.go
index 214fdb373aeae819e4e93f0232344682d6f36cda..e7108cb54a549c4a7e5f780bf3b5650cc2f4e232 100644
--- a/src/client/cmdVM/vmShutdown.go
+++ b/src/client/cmdVM/vmShutdown.go
@@ -1,8 +1,8 @@
 package cmdVM
 
 import (
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Shutdown struct {
diff --git a/src/client/cmdVM/vmStart.go b/src/client/cmdVM/vmStart.go
index 5963e2188ecec4e3c7949b5c78f71b591e917231..f556b3a3107e5a02e1ff7bac98b76f091e41e5c2 100644
--- a/src/client/cmdVM/vmStart.go
+++ b/src/client/cmdVM/vmStart.go
@@ -1,68 +1,68 @@
 package cmdVM
 
 import (
-    u "nexus-client/utils"
-    g "nexus-client/globals"
+	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Start struct {
-    Name string
+	Name string
 }
 
-func (cmd *Start)GetName() string {
-    return cmd.Name
+func (cmd *Start) GetName() string {
+	return cmd.Name
 }
 
-func (cmd *Start)GetDesc() []string {
-    return []string{
-        "Starts one or more VMs.",
-        "If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability."}
+func (cmd *Start) GetDesc() []string {
+	return []string{
+		"Starts one or more VMs.",
+		"If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability."}
 }
 
-func (cmd *Start)PrintUsage() {
-    printRegexUsage(cmd)
-    printRegexUsageDetails()
+func (cmd *Start) PrintUsage() {
+	printRegexUsage(cmd)
+	printRegexUsageDetails()
 }
 
-func (cmd *Start)Run(args []string) int {
-    client := g.GetInstance().Client
-    host := g.GetInstance().Host
+func (cmd *Start) Run(args []string) int {
+	client := g.GetInstance().Client
+	host := g.GetInstance().Host
 
-    argc := len(args)
-    if argc < 1 {
-        cmd.PrintUsage()
-        return 1
-    }
+	argc := len(args)
+	if argc < 1 {
+		cmd.PrintUsage()
+		return 1
+	}
 
-    vms, err := getFilteredVMs("/vms/start", args)
-    if err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
+	vms, err := getFilteredVMs("/vms/start", args)
+	if err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
 
-    if len(vms) == 0 {
-        u.PrintlnErr("Error: VM(s) not found.")
-        return 1
-    }
+	if len(vms) == 0 {
+		u.PrintlnErr("Error: VM(s) not found.")
+		return 1
+	}
 
-    statusCode := 0
+	statusCode := 0
 
-    for _, vm := range(vms) {
-        uuid := vm.ID.String()
-        resp, err := client.R().Put(host+"/vms/"+uuid+"/start")
-        if err != nil {
-            u.PrintlnErr("Failed starting VM \""+vm.Name+"\": "+err.Error())
-            statusCode = 1
-        } else {
-            if resp.IsSuccess() {
-                u.Println("Started VM \""+vm.Name+"\"")
-            } else {
-                u.PrintlnErr("Failed starting VM \""+vm.Name+"\": "+resp.Status()+": "+resp.String())
-                statusCode = 1
-            }
-        }
+	for _, vm := range vms {
+		uuid := vm.ID.String()
+		resp, err := client.R().Put(host + "/vms/" + uuid + "/start")
+		if err != nil {
+			u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + err.Error())
+			statusCode = 1
+		} else {
+			if resp.IsSuccess() {
+				u.Println("Started VM \"" + vm.Name + "\"")
+			} else {
+				u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + resp.Status() + ": " + resp.String())
+				statusCode = 1
+			}
+		}
 
-    }
+	}
 
-    return statusCode
+	return statusCode
 }
diff --git a/src/client/cmdVM/vmStartAttach.go b/src/client/cmdVM/vmStartAttach.go
index 619b15387ddc3d617fbe3ccbf0e4e3376bb17ab0..b684f0671439e2b0c97a2204680f696c8dba4ffa 100644
--- a/src/client/cmdVM/vmStartAttach.go
+++ b/src/client/cmdVM/vmStartAttach.go
@@ -1,96 +1,96 @@
 package cmdVM
 
 import (
-    "nexus-client/exec"
-    g "nexus-client/globals"
-    u "nexus-client/utils"
+	"nexus-client/exec"
+	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type StartAttach struct {
-    Name string
+	Name string
 }
 
 func (cmd *StartAttach) GetName() string {
-    return cmd.Name
+	return cmd.Name
 }
 
 func (cmd *StartAttach) GetDesc() []string {
-    return []string{
-        "Starts one or more VMs and attaches them in order to use their desktop environment.",
-        "If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability",
-        "and VM_ATTACH VM access capability or VM_ATTACH_ANY user capability."}
+	return []string{
+		"Starts one or more VMs and attaches them in order to use their desktop environment.",
+		"If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability",
+		"and VM_ATTACH VM access capability or VM_ATTACH_ANY user capability."}
 }
 
 func (cmd *StartAttach) PrintUsage() {
-    printRegexUsage(cmd)
-    printRegexUsageDetails()
+	printRegexUsage(cmd)
+	printRegexUsageDetails()
 }
 
 func (cmd *StartAttach) Run(args []string) int {
-    client := g.GetInstance().Client
-    host := g.GetInstance().Host
-
-    argc := len(args)
-    if argc < 1 {
-        cmd.PrintUsage()
-        return 1
-    }
-
-    if err := exec.CheckRemoteViewer(); err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
-
-    vms, err := getFilteredVMs("/vms/start", args)
-    if err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
-
-    if len(vms) == 0 {
-        u.PrintlnErr("Error: VM(s) not found.")
-        return 1
-    }
-
-    statusCode := 0
-
-    for _, vm := range vms {
-        uuid := vm.ID.String()
-        resp, err := client.R().Put(host + "/vms/" + uuid + "/start")
-        if err != nil {
-            u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + err.Error())
-            statusCode = 1
-        } else {
-            if resp.IsSuccess() {
-                u.Println("Started VM \"" + vm.Name + "\"")
-            } else {
-                u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + resp.Status() + ": " + resp.String())
-                statusCode = 1
-            }
-        }
-
-    }
-
-    // at this point, the returned filtered credentials only works for VMs that started successfully
-    creds, err := getFilteredVMCredentials("/vms/attach", args)
-    if err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
-
-    if len(creds) == 0 {
-        u.PrintlnErr("Error: No VM(s) to attach.")
-        return 1
-    }
-
-    attachStatusCode, err := AttachToVMs(creds, false)
-    if err != nil {
-        u.PrintlnErr(err)
-    }
-
-    returnCode := 0
-    if statusCode != 0 || attachStatusCode != 0 {
-        returnCode = 1
-    }
-    return returnCode
+	client := g.GetInstance().Client
+	host := g.GetInstance().Host
+
+	argc := len(args)
+	if argc < 1 {
+		cmd.PrintUsage()
+		return 1
+	}
+
+	if err := exec.CheckRemoteViewer(); err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
+
+	vms, err := getFilteredVMs("/vms/start", args)
+	if err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
+
+	if len(vms) == 0 {
+		u.PrintlnErr("Error: VM(s) not found.")
+		return 1
+	}
+
+	statusCode := 0
+
+	for _, vm := range vms {
+		uuid := vm.ID.String()
+		resp, err := client.R().Put(host + "/vms/" + uuid + "/start")
+		if err != nil {
+			u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + err.Error())
+			statusCode = 1
+		} else {
+			if resp.IsSuccess() {
+				u.Println("Started VM \"" + vm.Name + "\"")
+			} else {
+				u.PrintlnErr("Failed starting VM \"" + vm.Name + "\": " + resp.Status() + ": " + resp.String())
+				statusCode = 1
+			}
+		}
+
+	}
+
+	// at this point, the returned filtered credentials only works for VMs that started successfully
+	creds, err := getFilteredVMCredentials("/vms/attach", args)
+	if err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
+
+	if len(creds) == 0 {
+		u.PrintlnErr("Error: No VM(s) to attach.")
+		return 1
+	}
+
+	attachStatusCode, err := AttachToVMs(creds, false)
+	if err != nil {
+		u.PrintlnErr(err)
+	}
+
+	returnCode := 0
+	if statusCode != 0 || attachStatusCode != 0 {
+		returnCode = 1
+	}
+	return returnCode
 }
diff --git a/src/client/cmdVM/vmStartWithCreds.go b/src/client/cmdVM/vmStartWithCreds.go
index 91b1ab4114f65ff10e3797f46c6907c0aea2ea3d..67569d89a7ed54e7ed24eecf2fbfe6cf3700158d 100644
--- a/src/client/cmdVM/vmStartWithCreds.go
+++ b/src/client/cmdVM/vmStartWithCreds.go
@@ -1,91 +1,91 @@
 package cmdVM
 
 import (
-    "errors"
-    "nexus-common/params"
-    u "nexus-client/utils"
-    g "nexus-client/globals"
+	"errors"
+	u "nexus-client/utils"
+	"nexus-common/params"
+	g "nexus-libclient/globals"
 )
 
 type StartWithCreds struct {
-    Name string
+	Name string
 }
 
-func (cmd *StartWithCreds)GetName() string {
-    return cmd.Name
+func (cmd *StartWithCreds) GetName() string {
+	return cmd.Name
 }
 
-func (cmd *StartWithCreds)GetDesc() []string {
-    return []string{
-        "Starts one or more VMs with user-defined credentials.",
-        "If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability."}
+func (cmd *StartWithCreds) GetDesc() []string {
+	return []string{
+		"Starts one or more VMs with user-defined credentials.",
+		"If not the VM's owner: requires VM_START VM access capability or VM_START_ANY user capability."}
 }
 
-func (cmd *StartWithCreds)PrintUsage() {
-    for _, desc := range cmd.GetDesc() {
-        u.PrintlnErr(desc)
-    }
-    u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
-    u.PrintlnErr("USAGE: "+cmd.GetName()+" file.csv")
-    u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
-    const usage string = `file.csv    3-column CSV file defining the VMs to start and their credentials.
+func (cmd *StartWithCreds) PrintUsage() {
+	for _, desc := range cmd.GetDesc() {
+		u.PrintlnErr(desc)
+	}
+	u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
+	u.PrintlnErr("USAGE: " + cmd.GetName() + " file.csv")
+	u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
+	const usage string = `file.csv    3-column CSV file defining the VMs to start and their credentials.
             Content of the 3 columns: VM ID;VM name;password`
-    u.PrintlnErr(usage)
+	u.PrintlnErr(usage)
 }
 
-func (cmd *StartWithCreds)parseCSVFile(csvFile string) ([]string, []string, error) {
-    // Column 0: VM IDs
-    vmIDs, err := u.ReadCSVColumn(csvFile, 0)
-    if err != nil {
-        return nil, nil, err
-    }
-    // Column 2: passwords
-    pwds, err := u.ReadCSVColumn(csvFile, 2)
-    if err != nil {
-        return nil, nil, err
-    }
-    count := len(vmIDs)
-    if (len(pwds) != count) {
-        return nil, nil, errors.New("Invalid CSV file: all columns must have the same number of entries!")
-    }
-    return vmIDs, pwds, nil
+func (cmd *StartWithCreds) parseCSVFile(csvFile string) ([]string, []string, error) {
+	// Column 0: VM IDs
+	vmIDs, err := u.ReadCSVColumn(csvFile, 0)
+	if err != nil {
+		return nil, nil, err
+	}
+	// Column 2: passwords
+	pwds, err := u.ReadCSVColumn(csvFile, 2)
+	if err != nil {
+		return nil, nil, err
+	}
+	count := len(vmIDs)
+	if len(pwds) != count {
+		return nil, nil, errors.New("Invalid CSV file: all columns must have the same number of entries!")
+	}
+	return vmIDs, pwds, nil
 }
 
-func (cmd *StartWithCreds)Run(args []string) int {
-    client := g.GetInstance().Client
-    host := g.GetInstance().Host
+func (cmd *StartWithCreds) Run(args []string) int {
+	client := g.GetInstance().Client
+	host := g.GetInstance().Host
 
-    argc := len(args)
-    if argc != 1 {
-        cmd.PrintUsage()
-        return 1
-    }
+	argc := len(args)
+	if argc != 1 {
+		cmd.PrintUsage()
+		return 1
+	}
 
-    vmIDs, pwds, err := cmd.parseCSVFile(args[0])
-    if err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
+	vmIDs, pwds, err := cmd.parseCSVFile(args[0])
+	if err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
 
-    statusCode := 0
+	statusCode := 0
 
-    vmArgs := &params.VMStartWithCreds {}
+	vmArgs := &params.VMStartWithCreds{}
 
-    for i, vmID := range(vmIDs) {
-        vmArgs.Pwd = pwds[i]
-        resp, err := client.R().SetBody(vmArgs).Put(host+"/vms/"+vmID+"/startwithcreds")
-        if err != nil {
-            u.PrintlnErr("Failed starting VM \""+vmID+"\": "+err.Error())
-            statusCode = 1
-        } else {
-            if resp.IsSuccess() {
-                u.Println("Started VM \""+vmID+"\"")
-            } else {
-                u.PrintlnErr("Failed starting VM \""+vmID+"\": "+resp.Status()+": "+resp.String())
-                statusCode = 1
-            }
-        }
-    }
+	for i, vmID := range vmIDs {
+		vmArgs.Pwd = pwds[i]
+		resp, err := client.R().SetBody(vmArgs).Put(host + "/vms/" + vmID + "/startwithcreds")
+		if err != nil {
+			u.PrintlnErr("Failed starting VM \"" + vmID + "\": " + err.Error())
+			statusCode = 1
+		} else {
+			if resp.IsSuccess() {
+				u.Println("Started VM \"" + vmID + "\"")
+			} else {
+				u.PrintlnErr("Failed starting VM \"" + vmID + "\": " + resp.Status() + ": " + resp.String())
+				statusCode = 1
+			}
+		}
+	}
 
-    return statusCode
+	return statusCode
 }
diff --git a/src/client/cmdVM/vmStop.go b/src/client/cmdVM/vmStop.go
index 74939fa20e4d2eff1f03135063a8a2836596b148..01d441ce9e6759dc75dd669d2f4486c9cb83c014 100644
--- a/src/client/cmdVM/vmStop.go
+++ b/src/client/cmdVM/vmStop.go
@@ -1,68 +1,68 @@
 package cmdVM
 
 import (
-    u "nexus-client/utils"
-    g "nexus-client/globals"
+	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 )
 
 type Stop struct {
-    Name string
+	Name string
 }
 
-func (cmd *Stop)GetName() string {
-    return cmd.Name
+func (cmd *Stop) GetName() string {
+	return cmd.Name
 }
 
-func (cmd *Stop)GetDesc() []string {
-    return []string{
-        "Kills one or more VMs.",
-        "If not the VM's owner: requires VM_STOP VM access capability or VM_STOP_ANY user capability."}
+func (cmd *Stop) GetDesc() []string {
+	return []string{
+		"Kills one or more VMs.",
+		"If not the VM's owner: requires VM_STOP VM access capability or VM_STOP_ANY user capability."}
 }
 
-func (cmd *Stop)PrintUsage() {
-    printRegexUsage(cmd)
-    printRegexUsageDetails()
+func (cmd *Stop) PrintUsage() {
+	printRegexUsage(cmd)
+	printRegexUsageDetails()
 }
 
-func (cmd *Stop)Run(args []string) int {
-    client := g.GetInstance().Client
-    host := g.GetInstance().Host
+func (cmd *Stop) Run(args []string) int {
+	client := g.GetInstance().Client
+	host := g.GetInstance().Host
 
-    argc := len(args)
-    if argc < 1 {
-        cmd.PrintUsage()
-        return 1
-    }
+	argc := len(args)
+	if argc < 1 {
+		cmd.PrintUsage()
+		return 1
+	}
 
-    vms, err := getFilteredVMs("/vms/stop", args)
-    if err != nil {
-        u.PrintlnErr(err.Error())
-        return 1
-    }
+	vms, err := getFilteredVMs("/vms/stop", args)
+	if err != nil {
+		u.PrintlnErr(err.Error())
+		return 1
+	}
 
-    if len(vms) == 0 {
-        u.PrintlnErr("Error: VM(s) not found.")
-        return 1
-    }
+	if len(vms) == 0 {
+		u.PrintlnErr("Error: VM(s) not found.")
+		return 1
+	}
 
-    statusCode := 0
+	statusCode := 0
 
-    for _, vm := range(vms) {
-        uuid := vm.ID.String()
-        resp, err := client.R().Put(host+"/vms/"+uuid+"/stop")
-        if err != nil {
-            u.PrintlnErr("Failed stopping VM \""+vm.Name+"\": "+err.Error())
-            statusCode = 1
-        } else {
-            if resp.IsSuccess() {
-                u.Println("Stopped VM \""+vm.Name+"\"")
-            } else {
-                u.PrintlnErr("Failed stopping VM \""+vm.Name+"\": "+resp.Status()+": "+resp.String())
-                statusCode = 1
-            }
-        }
+	for _, vm := range vms {
+		uuid := vm.ID.String()
+		resp, err := client.R().Put(host + "/vms/" + uuid + "/stop")
+		if err != nil {
+			u.PrintlnErr("Failed stopping VM \"" + vm.Name + "\": " + err.Error())
+			statusCode = 1
+		} else {
+			if resp.IsSuccess() {
+				u.Println("Stopped VM \"" + vm.Name + "\"")
+			} else {
+				u.PrintlnErr("Failed stopping VM \"" + vm.Name + "\": " + resp.Status() + ": " + resp.String())
+				statusCode = 1
+			}
+		}
 
-    }
+	}
 
-    return statusCode
+	return statusCode
 }
diff --git a/src/client/cmdVersion/version.go b/src/client/cmdVersion/version.go
index 342d6058ba32d76eeb101cda89fbc9af096e807c..dde61e0313ea5cbebf50070e1bac723328fc2327 100644
--- a/src/client/cmdVersion/version.go
+++ b/src/client/cmdVersion/version.go
@@ -3,10 +3,10 @@ package cmdVersion
 import (
 	"encoding/json"
 	"errors"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-client/version"
 	"nexus-common/params"
+	g "nexus-libclient/globals"
 )
 
 type Version struct {
diff --git a/src/client/nexus-cli/nexus-cli.go b/src/client/nexus-cli/nexus-cli.go
index b53931df7b4fa9d7597a8e0249e7b477a5f8b43f..8b4bca9657d5f0c85e7533dbc0383512542db803 100644
--- a/src/client/nexus-cli/nexus-cli.go
+++ b/src/client/nexus-cli/nexus-cli.go
@@ -10,11 +10,11 @@ import (
 	"nexus-client/cmdVM"
 	"nexus-client/cmdVersion"
 	"nexus-client/defaults"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-client/version"
 	"nexus-common/buildversion"
 	"nexus-common/utils"
+	g "nexus-libclient/globals"
 	"os"
 	"path"
 	"strings"
diff --git a/src/client/nexus-exam/nexus-exam.go b/src/client/nexus-exam/nexus-exam.go
index ba01a20beac2318a2be407ffa545b1cd64056da7..f73abf8579db147774c964800d4a0a7de9696f04 100644
--- a/src/client/nexus-exam/nexus-exam.go
+++ b/src/client/nexus-exam/nexus-exam.go
@@ -9,12 +9,12 @@ import (
 	"nexus-client/cmdToken"
 	"nexus-client/defaults"
 	e "nexus-client/exec"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
 	"nexus-client/version"
 	"nexus-common/buildversion"
 	"nexus-common/params"
 	"nexus-common/vm"
+	g "nexus-libclient/globals"
 	"os"
 	"os/exec"
 	"path"
diff --git a/src/client/nexush/nexush.go b/src/client/nexush/nexush.go
index 7d88ea0e481ed647a706693d9372efb874f0aab2..8f5fb48c86b5b030b818959c8c668728bfd7dc80 100644
--- a/src/client/nexush/nexush.go
+++ b/src/client/nexush/nexush.go
@@ -13,8 +13,8 @@ import (
 	"nexus-client/cmdVM"
 	"nexus-client/cmdVersion"
 	"nexus-client/defaults"
-	g "nexus-client/globals"
 	u "nexus-client/utils"
+	g "nexus-libclient/globals"
 
 	"nexus-client/version"
 	"nexus-common/buildversion"
diff --git a/src/client/utils/csv.go b/src/client/utils/csv.go
index 122eb0c52f67c01ec45dffa5cafd81e32b764037..5140e250c45176b0d59295ad11fc6efb26d4ac37 100644
--- a/src/client/utils/csv.go
+++ b/src/client/utils/csv.go
@@ -4,7 +4,7 @@ import (
 	"encoding/csv"
 	"errors"
 	"io"
-	g "nexus-client/globals"
+	g "nexus-libclient/globals"
 	"os"
 	"strconv"
 )
diff --git a/src/client/globals/Globals.go b/src/libclient/globals/Globals.go
similarity index 100%
rename from src/client/globals/Globals.go
rename to src/libclient/globals/Globals.go
diff --git a/src/libclient/template/templateList.go b/src/libclient/template/templateList.go
index bb0b5047a0f1eec3ad7451a8df2994590db24ae3..6748afee6fc9358d93aab22deb9f34686e59c49c 100644
--- a/src/libclient/template/templateList.go
+++ b/src/libclient/template/templateList.go
@@ -2,8 +2,8 @@ package template
 
 import (
 	"errors"
-	g "nexus-client/globals"
 	t "nexus-common/template"
+	g "nexus-libclient/globals"
 )
 
 func GetTemplates() ([]t.TemplateSerialized, error) {
diff --git a/src/libclient/token/tokenRefresh.go b/src/libclient/token/tokenRefresh.go
index 5fd19a13169aafd26f509311adaf8b8af0ce2b77..02a72964a59b96f22659e99fdd6d6125d7450d4d 100644
--- a/src/libclient/token/tokenRefresh.go
+++ b/src/libclient/token/tokenRefresh.go
@@ -3,7 +3,7 @@ package token
 import (
 	"encoding/json"
 	"errors"
-	g "nexus-client/globals"
+	g "nexus-libclient/globals"
 )
 
 // Return a new token