diff --git a/src/cmdUser/userAdd.go b/src/cmdUser/userAdd.go
index 65812e592757ed8d5c4262e770afa8b94e7d2148..11f968e33cb28808f34cca54576ee9bdcffb6104 100644
--- a/src/cmdUser/userAdd.go
+++ b/src/cmdUser/userAdd.go
@@ -1,6 +1,7 @@
 package cmdUser
 
 import (
+	"errors"
 	u "nexus-client/utils"
 	g "nexus-client/globals"
 )
@@ -25,52 +26,87 @@ func (cmd *Add)PrintUsage() {
 	}
 	u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
 	u.PrintlnErr("USAGE: "+cmd.Name+" email firstname lastname password [capability ...]")
+	u.PrintlnErr("       "+cmd.Name+" file.csv")
 	u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
+	const usage string = `file.csv   5-column CSV file defining each new user:
+               column1    email
+               column2    firstname
+               column3    lastname
+               column4    password
+               column5    capabilities (comma-separated)`
+	u.PrintlnErr(usage)
+}
+
+type cmdArgs struct {
+	Email string
+	FirstName string
+	LastName string
+	Pwd string
+	Caps map[string]int
 }
 
 func (cmd *Add)Run(args []string) int {
-	client := g.GetInstance().Client
-	host := g.GetInstance().Host
 
 	argc := len(args)
-	if argc < 4 {
+	if argc >= 4 {
+		// Detected syntax: email firstname lastname pwd [caps]
+		cargs := &cmdArgs {
+			Email: args[0],
+			FirstName: args[1],
+			LastName: args[2],
+			Pwd: args[3],
+			Caps: make(map[string]int),
+		}
+
+		if argc > 4 {
+			for _, cap := range args[4:] {
+				cargs.Caps[cap] = 1
+			}
+		}
+
+		if err := cmd.runRequest(cargs); err != nil {
+			u.PrintlnErr(err.Error())
+			return 1
+		}
+	} else if argc == 1 {
+		// Detected syntax: file.csv
+		/*
+		column1    email
+		column2    firstname
+		column3    lastname
+		column4    password
+		column5    capabilities (comma-separated)`
+		*/
+
+		var userFields[5][]
+
+		csvFile = args[0]
+		emails, err = u.ReadCSVColumn(csvFile, 0)
+		if err != nil {
+			u.PrintlnErr(err.Error())
+			return 1
+		}
+	} else {
 		cmd.PrintUsage()
 		return 1
 	}
 
-	type UserArgs struct {
-		Email string
-		FirstName string
-		LastName string
-		Pwd string
-		Caps map[string]int
-	}
-		
-	userArgs := &UserArgs {
-		Email: args[0],
-		FirstName: args[1],
-		LastName: args[2],
-		Pwd: args[3],
-		Caps: make(map[string]int),
-	}
+	return 0
+}
 
-	if argc > 4 {
-		for _, cap := range args[4:] {
-			userArgs.Caps[cap] = 1
-		}
-	}
+func (cmd *Add)runRequest(args *cmdArgs) error {
+	client := g.GetInstance().Client
+	host := g.GetInstance().Host
 
-	resp, err := client.R().SetBody(userArgs).Post(host+"/users")
+	resp, err := client.R().SetBody(args).Post(host+"/users")
 	if err != nil {
-		u.PrintlnErr("Error: "+err.Error())
-		return 1
+		return errors.New("Error: "+err.Error())
 	}
 
 	if resp.IsSuccess() {
 		u.Println(resp)
-		return 0
+		return nil
 	} else {
-		u.PrintlnErr("Error: "+resp.Status()+": "+resp.String())
-		return 1
+		return errors.New("Error: "+resp.Status()+": "+resp.String())
 	}
 }
diff --git a/src/cmdVM/vmCreate.go b/src/cmdVM/vmCreate.go
index 345e37c012b788f48302a47f41c3801eefa11e1e..bfd6c6b93d7037defacf4bc967b1e754c3cff978 100644
--- a/src/cmdVM/vmCreate.go
+++ b/src/cmdVM/vmCreate.go
@@ -1,11 +1,8 @@
 package cmdVM
 
 import (
-	"os"
 	"fmt"
-	"errors"
 	"strconv"
-	"encoding/csv"
 	u "nexus-client/utils"
 	g "nexus-client/globals"
 )
@@ -77,7 +74,7 @@ func (cmd *Create)Run(args []string) int {
 			// It's not a number, so we assume it's a CSV file.
 			// Checks if the file exists.
 			file := args[5]
-			csvEntries, err = cmd.getCSVColumn(file, 0)
+			csvEntries, err = u.ReadCSVColumn(file, 0)
 			if err != nil {
 				u.PrintlnErr(err.Error())
 				return 1
@@ -145,22 +142,3 @@ func (cmd *Create)Run(args []string) int {
 
 	return statusCode
 }
-
-func (cmd *Create)getCSVColumn(csvFile string, column int) ([]string, error) {
-	file, err := os.Open(csvFile)
-    if err != nil {
-        return nil, errors.New("Failed opening \""+csvFile+"\"")
-    }
-    reader := csv.NewReader(file)
-    records, err := reader.ReadAll()
-    if err != nil {
-        return nil, errors.New("\""+csvFile+"\": "+err.Error())
-	}
-
-	var entries []string
-	for _, col := range(records) {
-		entries = append(entries, col[column])
-	}
-
-	return entries, nil
-}