diff --git a/exercises/client-args.sh b/exercises/client-args.sh
new file mode 100755
index 0000000..7cb7c45
--- /dev/null
+++ b/exercises/client-args.sh
@@ -0,0 +1,142 @@
+#!/usr/bin/env bash
+
+# Test OpenStack client authentication aguemnts handling
+
+echo "**************************************************"
+echo "Begin DevStack Exercise: $0"
+echo "**************************************************"
+
+# Settings
+# ========
+
+# Keep track of the current directory
+EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
+TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
+
+# Import common functions
+source $TOP_DIR/functions
+
+# Import configuration
+source $TOP_DIR/openrc
+
+# Import exercise configuration
+source $TOP_DIR/exerciserc
+
+# Unset all of the known NOVA_ vars
+unset NOVA_API_KEY
+unset NOVA_ENDPOINT_NAME
+unset NOVA_PASSWORD
+unset NOVA_PROJECT_ID
+unset NOVA_REGION_NAME
+unset NOVA_URL
+unset NOVA_USERNAME
+unset NOVA_VERSION
+
+# Save the known variables for later
+export x_TENANT_NAME=$OS_TENANT_NAME
+export x_USERNAME=$OS_USERNAME
+export x_PASSWORD=$OS_PASSWORD
+export x_AUTH_URL=$OS_AUTH_URL
+
+#Unset the usual variables to force argument processing
+unset OS_TENANT_NAME
+unset OS_USERNAME
+unset OS_PASSWORD
+unset OS_AUTH_URL
+
+# Common authentication args
+TENANT_ARG="--os_tenant_name=$x_TENANT_NAME"
+ARGS="--os_username=$x_USERNAME --os_password=$x_PASSWORD --os_auth_url=$x_AUTH_URL"
+
+# Set global return
+RETURN=0
+
+# Keystone client
+# ---------------
+if [[ "$ENABLED_SERVICES" =~ "key" ]]; then
+    if [[ "$SKIP_EXERCISES" =~ "key" ]] ; then
+        STATUS_KEYSTONE="Skipped"
+    else
+        echo -e "\nTest Keystone"
+        if keystone $TENANT_ARG $ARGS catalog --service identity; then
+            STATUS_KEYSTONE="Succeeded"
+        else
+            STATUS_KEYSTONE="Failed"
+            RETURN=1
+        fi
+    fi
+fi
+
+# Nova client
+# -----------
+
+if [[ "$ENABLED_SERVICES" =~ "n-api" ]]; then
+    if [[ "$SKIP_EXERCISES" =~ "n-api" ]] ; then
+        STATUS_NOVA="Skipped"
+        STATUS_EC2="Skipped"
+    else
+        # Test OSAPI
+        echo -e "\nTest Nova"
+        if nova $TENANT_ARG $ARGS flavor-list; then
+            STATUS_NOVA="Succeeded"
+        else
+            STATUS_NOVA="Failed"
+            RETURN=1
+        fi
+    fi
+fi
+
+# Glance client
+# -------------
+
+if [[ "$ENABLED_SERVICES" =~ "g-api" ]]; then
+    if [[ "$SKIP_EXERCISES" =~ "g-api" ]] ; then
+        STATUS_GLANCE="Skipped"
+    else
+        echo -e "\nTest Glance"
+        if glance $TENANT_ARG $ARGS index; then
+            STATUS_GLANCE="Succeeded"
+        else
+            STATUS_GLANCE="Failed"
+            RETURN=1
+        fi
+    fi
+fi
+
+# Swift client
+# ------------
+
+if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then
+    if [[ "$SKIP_EXERCISES" =~ "swift" ]] ; then
+        STATUS_SWIFT="Skipped"
+    else
+        echo -e "\nTest Swift"
+        if swift $ARGS stat; then
+            STATUS_SWIFT="Succeeded"
+        else
+            STATUS_SWIFT="Failed"
+            RETURN=1
+        fi
+    fi
+fi
+
+# Results
+# -------
+
+function report() {
+    if [[ -n "$2" ]]; then
+        echo "$1: $2"
+    fi
+}
+
+echo -e "\n"
+report "Keystone" $STATUS_KEYSTONE
+report "Nova" $STATUS_NOVA
+report "Glance" $STATUS_GLANCE
+report "Swift" $STATUS_SWIFT
+
+echo "**************************************************"
+echo "End DevStack Exercise: $0"
+echo "**************************************************"
+
+exit $RETURN
