diff --git a/nsswitch/wbinfo.c b/nsswitch/wbinfo.c
index ae89f87..6b4eb7a 100644
--- a/nsswitch/wbinfo.c
+++ b/nsswitch/wbinfo.c
@@ -180,7 +180,7 @@ static bool wbinfo_get_userinfo(char *user)
 		 pwd->pw_passwd,
 		 (unsigned int)pwd->pw_uid,
 		 (unsigned int)pwd->pw_gid,
-		 pwd->pw_gecos,
+		 pwd->pw_name,
 		 pwd->pw_dir,
 		 pwd->pw_shell);
 
@@ -207,7 +207,7 @@ static bool wbinfo_get_uidinfo(int uid)
 		 pwd->pw_passwd,
 		 (unsigned int)pwd->pw_uid,
 		 (unsigned int)pwd->pw_gid,
-		 pwd->pw_gecos,
+		 pwd->pw_name,
 		 pwd->pw_dir,
 		 pwd->pw_shell);
 
@@ -235,7 +235,7 @@ static bool wbinfo_get_user_sidinfo(const char *sid_str)
 		 pwd->pw_passwd,
 		 (unsigned int)pwd->pw_uid,
 		 (unsigned int)pwd->pw_gid,
-		 pwd->pw_gecos,
+		 pwd->pw_name,
 		 pwd->pw_dir,
 		 pwd->pw_shell);
 
diff --git a/nsswitch/winbind_nss_linux.c b/nsswitch/winbind_nss_linux.c
index 635813c..0c69bb9 100644
--- a/nsswitch/winbind_nss_linux.c
+++ b/nsswitch/winbind_nss_linux.c
@@ -201,19 +201,6 @@ static NSS_STATUS fill_pwent(struct passwd *result,
 	result->pw_uid = pw->pw_uid;
 	result->pw_gid = pw->pw_gid;
 
-	/* GECOS */
-	len = strlen(pw->pw_gecos) + 1;
-
-	if ((result->pw_gecos =
-	     get_static(buffer, buflen, len)) == NULL) {
-
-		/* Out of memory */
-
-		return NSS_STATUS_TRYAGAIN;
-	}
-
-	memcpy(result->pw_gecos, pw->pw_gecos, len);
-
 	/* Home directory */
 	len = strlen(pw->pw_dir) + 1;
 
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index a66b646..15c1251 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -148,21 +148,10 @@ static NTSTATUS samu_set_unix_internal(struct pdb_methods *methods,
 
 	fullname = NULL;
 
-	if (count_commas(pwd->pw_gecos) == 3) {
-		/*
-		 * Heuristic: This seems to be a gecos field that has been
-		 * edited by chfn(1). Only use the part before the first
-		 * comma. Fixes bug 5198.
-		 */
-		fullname = talloc_strndup(
-			talloc_tos(), pwd->pw_gecos,
-			strchr(pwd->pw_gecos, ',') - pwd->pw_gecos);
-	}
-
 	if (fullname != NULL) {
 		pdb_set_fullname(user, fullname, PDB_SET);
 	} else {
-		pdb_set_fullname(user, pwd->pw_gecos, PDB_SET);
+		pdb_set_fullname(user, pwd->pw_name, PDB_SET);
 	}
 	TALLOC_FREE(fullname);
 
diff --git a/source3/winbindd/wb_getpwsid.c b/source3/winbindd/wb_getpwsid.c
index 8dc09eb..52d1ecc 100644
--- a/source3/winbindd/wb_getpwsid.c
+++ b/source3/winbindd/wb_getpwsid.c
@@ -116,9 +116,6 @@ static void wb_getpwsid_queryuser_done(struct tevent_req *subreq)
 
 	strlcpy(pw->pw_name, output_username, sizeof(pw->pw_name));
 
-	strlcpy(pw->pw_gecos, info->full_name ? info->full_name : "",
-		sizeof(pw->pw_gecos));
-
 	tmp = talloc_sub_specified(
 		state, info->homedir, acct_name,
 		info->primary_group_name, info->domain_name,
diff --git a/source4/auth/ntlm/auth_unix.c b/source4/auth/ntlm/auth_unix.c
index 67cd5f3..bf1bc6d 100644
--- a/source4/auth/ntlm/auth_unix.c
+++ b/source4/auth/ntlm/auth_unix.c
@@ -83,7 +83,7 @@ static NTSTATUS authunix_make_user_info_dc(TALLOC_CTX *mem_ctx,
 	user_info_dc->user_session_key = data_blob(NULL,0);
 	user_info_dc->lm_session_key = data_blob(NULL,0);
 
-	info->full_name = talloc_steal(info, pwd->pw_gecos);
+	info->full_name = talloc_strdup(info, pwd->pw_name); /* XXX: I _think_ talloc_steal here for pw_name would be wrong */
 	NT_STATUS_HAVE_NO_MEMORY(info->full_name);
 	info->logon_script = talloc_strdup(info, "");
 	NT_STATUS_HAVE_NO_MEMORY(info->logon_script);
@@ -132,8 +132,6 @@ static NTSTATUS talloc_getpwnam(TALLOC_CTX *ctx, const char *username, struct pa
 
         ret->pw_uid = from->pw_uid;
         ret->pw_gid = from->pw_gid;
-        ret->pw_gecos = talloc_strdup(ctx, from->pw_gecos);
-	NT_STATUS_HAVE_NO_MEMORY(ret->pw_gecos);
 
         ret->pw_dir = talloc_strdup(ctx, from->pw_dir);
 	NT_STATUS_HAVE_NO_MEMORY(ret->pw_dir);
