482e17639372073c44c32d26707a69b8132b3ba4
braney
  Fri Aug 5 18:05:55 2011 -0700
changes related to #4842
diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index d860c17..3cdd424 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -883,34 +883,48 @@
     }
 
 /* Scan through group table, putting in ones where we have data. */
 groupsAll = hLoadGrps(database);
 for (group = slPopHead(&groupsAll); group != NULL; group = slPopHead(&groupsAll))
     {
     if (hashLookup(groupsInTrackList, group->name))
 	{
 	slAddTail(&groupList, group);
 	hashAdd(groupsInDatabase, group->name, group);
 	}
     else
         grpFree(&group);
     }
 
+/* if we have custom tracks, we want to add the track hubs
+ * after that group */
+struct grp *addAfter = NULL;
+if (sameString(groupList->name, "user"))
+    addAfter = groupList;
+
 /* Add in groups from hubs. */
 for (group = slPopHead(pHubGrpList); group != NULL; group = slPopHead(pHubGrpList))
     {
-    slAddTail(&groupList, group);
+    /* check to see if we're inserting hubs rather than
+     * adding them to the front of the list */
+    if (addAfter != NULL)
+	{
+	group->next = addAfter->next;
+	addAfter->next = group;
+	}
+    else
+	slAddHead(&groupList, group);
     hashAdd(groupsInDatabase, group->name, group);
     }
 
 /* Do some error checking for tracks with group names that are
  * not in database.  Just warn about them. */
 for (track = trackList; track != NULL; track = track->next)
     {
     if (!hashLookup(groupsInDatabase, track->grp))
          warn("Track %s has group %s, which isn't in grp table",
 	 	track->table, track->grp);
     }
 
 /* Create dummy group for all tracks. */
 AllocVar(group);
 group->name = cloneString("allTracks");