diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/ProtocolParameter.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/ProtocolParameter.java
index c3b6e3ee2..48307387a 100644
--- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/ProtocolParameter.java
+++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/ProtocolParameter.java
@@ -43,7 +43,19 @@ public class ProtocolParameter {
TEXT,
/**
- * A password parameter, whose value is sensitive and must be hidden.
+ * A username parameter. This parameter type generally behaves
+ * identically to arbitrary text parameters, but has semantic
+ * differences. If credential pass-through is in use, the value for this
+ * parameter may be automatically provided using the credentials
+ * originally used by the user to authenticate.
+ */
+ USERNAME,
+
+ /**
+ * A password parameter, whose value is sensitive and must be hidden. If
+ * credential pass-through is in use, the value for this parameter may
+ * be automatically provided using the credentials originally used by
+ * the user to authenticate.
*/
PASSWORD,
diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/crud/protocols/List.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/crud/protocols/List.java
index f8eda88e9..7efcf6b06 100644
--- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/crud/protocols/List.java
+++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/crud/protocols/List.java
@@ -149,6 +149,11 @@ public class List extends RestrictedHttpServlet {
xml.writeAttribute("type", "text");
break;
+ // Username parameter
+ case USERNAME:
+ xml.writeAttribute("type", "username");
+ break;
+
// Password parameter
case PASSWORD:
xml.writeAttribute("type", "password");
diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/xml/protocol/ParamTagHandler.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/xml/protocol/ParamTagHandler.java
index c4d4170c9..26336432e 100644
--- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/xml/protocol/ParamTagHandler.java
+++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/xml/protocol/ParamTagHandler.java
@@ -57,6 +57,10 @@ public class ParamTagHandler implements TagHandler {
else if ("numeric".equals(type))
protocolParameter.setType(ProtocolParameter.Type.NUMERIC);
+ // Username field
+ else if ("username".equals(type))
+ protocolParameter.setType(ProtocolParameter.Type.USERNAME);
+
// Password field
else if ("password".equals(type))
protocolParameter.setType(ProtocolParameter.Type.PASSWORD);
diff --git a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/rdp.xml b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/rdp.xml
index ebe82ae8f..7bd39404f 100644
--- a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/rdp.xml
+++ b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/rdp.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/ssh.xml b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/ssh.xml
index a04327b1e..8239e7160 100644
--- a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/ssh.xml
+++ b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/ssh.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/telnet.xml b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/telnet.xml
index 09e1f2443..fe797436b 100644
--- a/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/telnet.xml
+++ b/guacamole/src/main/resources/net/sourceforge/guacamole/net/protocols/telnet.xml
@@ -3,7 +3,7 @@
-
+