diff --git a/whisk/api.go b/whisk/api.go
index 51ed0d5..674408f 100644
--- a/whisk/api.go
+++ b/whisk/api.go
@@ -347,7 +347,7 @@
 
 	err = validateApiListResponse(apiArray)
 	if err != nil {
-		Debug(DbgError, "Not a valid ApiListReponse object\n")
+		Debug(DbgError, "Not a valid ApiListResponse object\n")
 		return nil, resp, err
 	}
 
diff --git a/whisk/client.go b/whisk/client.go
index 90337fc..0bd25cd 100644
--- a/whisk/client.go
+++ b/whisk/client.go
@@ -116,8 +116,8 @@
 // NewClient creates a new whisk client with the provided http client and whisk configuration.
 //
 // A new http.Transport will be created when client cert or TLS insecure options are set.
-// If one use custom tranport and want to keep it intact, please opt out TLS related fields
-// in configInput and construct TLS conguration in the custom transport.
+// If one use custom transport and want to keep it intact, please opt out TLS related fields
+// in configInput and construct TLS configuration in the custom transport.
 func NewClient(httpClient *http.Client, configInput *Config) (*Client, error) {
 
 	var config *Config
diff --git a/whisk/trace.go b/whisk/trace.go
index 86dc76d..a3e6480 100644
--- a/whisk/trace.go
+++ b/whisk/trace.go
@@ -61,7 +61,7 @@
 
 /* Function for tracing debug level messages to stdout
    Output format:
-   [file-or-function-name]:line-#:[DebugLevel] The formated message without any appended \n
+   [file-or-function-name]:line-#:[DebugLevel] The formatted message without any appended \n
 */
 func Debug(dl DebugLevel, msgFormat string, args ...interface{}) {
 	if isDebug {
diff --git a/whisk/wskprops_test.go b/whisk/wskprops_test.go
index 942e827..65b38ba 100644
--- a/whisk/wskprops_test.go
+++ b/whisk/wskprops_test.go
@@ -215,7 +215,7 @@
 
 	DeleteFile(OPENWHISK_PROPERTIES)
 	DeleteFile(TEST_AUTH_FILE_NAME)
-	// Make sure the "non-existant" test.auth key file really does not exist
+	// Make sure the "non-existent" test.auth key file really does not exist
 	DeleteFile(NON_EXISTING_TEST_FILE)
 
 	// Variant 3 ------------------------------------------------------------------
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index aca3ea6..5c90b02 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -298,8 +298,8 @@
 // It returns an error if the asset could not be found or
 // could not be loaded.
 func Asset(name string) ([]byte, error) {
-	cannonicalName := strings.Replace(name, "\\", "/", -1)
-	if f, ok := _bindata[cannonicalName]; ok {
+	canonicalName := strings.Replace(name, "\\", "/", -1)
+	if f, ok := _bindata[canonicalName]; ok {
 		a, err := f()
 		if err != nil {
 			return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
@@ -324,8 +324,8 @@
 // It returns an error if the asset could not be found or
 // could not be loaded.
 func AssetInfo(name string) (os.FileInfo, error) {
-	cannonicalName := strings.Replace(name, "\\", "/", -1)
-	if f, ok := _bindata[cannonicalName]; ok {
+	canonicalName := strings.Replace(name, "\\", "/", -1)
+	if f, ok := _bindata[canonicalName]; ok {
 		a, err := f()
 		if err != nil {
 			return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
@@ -374,8 +374,8 @@
 func AssetDir(name string) ([]string, error) {
 	node := _bintree
 	if len(name) != 0 {
-		cannonicalName := strings.Replace(name, "\\", "/", -1)
-		pathList := strings.Split(cannonicalName, "/")
+		canonicalName := strings.Replace(name, "\\", "/", -1)
+		pathList := strings.Split(canonicalName, "/")
 		for _, p := range pathList {
 			node = node.Children[p]
 			if node == nil {
@@ -458,6 +458,6 @@
 }
 
 func _filePath(dir, name string) string {
-	cannonicalName := strings.Replace(name, "\\", "/", -1)
-	return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
+	canonicalName := strings.Replace(name, "\\", "/", -1)
+	return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...)
 }
