diff --git a/extensions/guacamole-auth-ldap/src/main/java/org/apache/guacamole/auth/ldap/group/UserGroupService.java b/extensions/guacamole-auth-ldap/src/main/java/org/apache/guacamole/auth/ldap/group/UserGroupService.java
index fbfeaaf..14cfd8e 100644
--- a/extensions/guacamole-auth-ldap/src/main/java/org/apache/guacamole/auth/ldap/group/UserGroupService.java
+++ b/extensions/guacamole-auth-ldap/src/main/java/org/apache/guacamole/auth/ldap/group/UserGroupService.java
@@ -108,7 +108,7 @@
         // Do not return any user groups if base DN is not specified
         String groupBaseDN = confService.getGroupBaseDN();
         if (groupBaseDN == null)
-            return Collections.<String, UserGroup>emptyMap();
+            return Collections.emptyMap();
 
         // Retrieve all visible user groups which are not guacConfigGroups
         Collection<String> attributes = confService.getGroupNameAttributes();
@@ -163,7 +163,7 @@
         // Do not return any user groups if base DN is not specified
         String groupBaseDN = confService.getGroupBaseDN();
         if (groupBaseDN == null)
-            return Collections.<LDAPEntry>emptyList();
+            return Collections.emptyList();
 
         // Get all groups the user is a member of starting at the groupBaseDN,
         // excluding guacConfigGroups
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUser.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUser.java
index 0a1acbf..b502f7a 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUser.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUser.java
@@ -59,7 +59,7 @@
      */
     @Override
     public Map<String, String> getAttributes() {
-        return Collections.<String, String>emptyMap();
+        return Collections.emptyMap();
     }
 
     /**
@@ -94,7 +94,7 @@
      */
     @Override
     public List<ActivityRecord> getHistory() throws GuacamoleException {
-        return Collections.<ActivityRecord>emptyList();
+        return Collections.emptyList();
     }
 
     /**
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUserGroup.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUserGroup.java
index 725984d..f63bfae 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUserGroup.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/AbstractUserGroup.java
@@ -39,7 +39,7 @@
      */
     @Override
     public Map<String, String> getAttributes() {
-        return Collections.<String, String>emptyMap();
+        return Collections.emptyMap();
     }
 
     /**
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/RelatedObjectSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/RelatedObjectSet.java
index f49876d..05f4c24 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/RelatedObjectSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/RelatedObjectSet.java
@@ -84,7 +84,7 @@
 
         @Override
         public Set<String> getObjects() throws GuacamoleException {
-            return Collections.<String>emptySet();
+            return Collections.emptySet();
         }
 
         @Override
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.java
index d9ce666..638f952 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/ObjectPermissionSet.java
@@ -155,13 +155,13 @@
         @Override
         public Collection<String> getAccessibleObjects(Collection<ObjectPermission.Type> permissions,
                 Collection<String> identifiers) throws GuacamoleException {
-            return Collections.<String>emptySet();
+            return Collections.emptySet();
         }
 
         @Override
         public Set<ObjectPermission> getPermissions()
                 throws GuacamoleException {
-            return Collections.<ObjectPermission>emptySet();
+            return Collections.emptySet();
         }
 
         @Override
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/SystemPermissionSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/SystemPermissionSet.java
index b58baa6..52b62cd 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/SystemPermissionSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/permission/SystemPermissionSet.java
@@ -110,7 +110,7 @@
         @Override
         public Set<SystemPermission> getPermissions()
                 throws GuacamoleException {
-            return Collections.<SystemPermission>emptySet();
+            return Collections.emptySet();
         }
 
         @Override
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.java
index 1fd9ac7..cbb298e 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleObjectPermissionSet.java
@@ -38,7 +38,7 @@
     /**
      * The set of all permissions currently granted.
      */
-    private Set<ObjectPermission> permissions = Collections.<ObjectPermission>emptySet();
+    private Set<ObjectPermission> permissions = Collections.emptySet();
 
     /**
      * Creates a new empty SimpleObjectPermissionSet. If you are not extending
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.java
index e1352cd..3796c43 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleRelatedObjectSet.java
@@ -34,7 +34,7 @@
     /**
      * A set containing the identifiers of all objects currently present.
      */
-    private Set<String> identifiers = Collections.<String>emptySet();
+    private Set<String> identifiers = Collections.emptySet();
 
     /**
      * Creates a new empty SimpleRelatedObjectSet. If you are not extending
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.java
index dd0479b..24c6d2d 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleSystemPermissionSet.java
@@ -35,7 +35,7 @@
     /**
      * The set of all permissions currently granted.
      */
-    private Set<SystemPermission> permissions = Collections.<SystemPermission>emptySet();
+    private Set<SystemPermission> permissions = Collections.emptySet();
 
     /**
      * Creates a new empty SimpleSystemPermissionSet. If you are not extending
