diff --git src/apps/deskbar/BarApp.cpp src/apps/deskbar/BarApp.cpp
index 58664f7..ee02685 100644
--- src/apps/deskbar/BarApp.cpp
+++ src/apps/deskbar/BarApp.cpp
@@ -645,6 +645,10 @@ TBarApp::AddTeam(team_id team, uint32 flags, const char* sig, entry_ref* ref)
 
 	sBarTeamInfoList.AddItem(barInfo);
 
+	// If expandNewTeams is set, add the sig to the expanded items list.
+	if (fSettings.expandNewTeams)
+		BarView()->AddExpandedItem(sig);
+
 	int32 subsCount = sSubscribers.CountItems();
 	if (subsCount > 0) {
 		for (int32 i = 0; i < subsCount; i++) {
diff --git src/apps/deskbar/BarView.cpp src/apps/deskbar/BarView.cpp
index 6e71956..8a62149 100644
--- src/apps/deskbar/BarView.cpp
+++ src/apps/deskbar/BarView.cpp
@@ -68,6 +68,9 @@ const int32 kDefaultRecentAppCount = 10;
 
 const int32 kMenuTrackMargin = 20;
 
+BList TBarView::sExpandedItems;
+
+
 TBarView::TBarView(BRect frame, bool vertical, bool left, bool top,
 		bool showInterval, uint32 state, float, bool showTime)
 	: BView(frame, "BarView", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
@@ -92,6 +95,13 @@ TBarView::TBarView(BRect frame, bool vertical, bool left, bool top,
 	fDragRegion->AddChild(fReplicantTray);
 	if (fTrayLocation != 0)
 		AddChild(fDragRegion);
+
+	sExpandedItems.MakeEmpty();
+
+	// Add the Tracker to the list of expanded items so that it
+	// will be expanded on startup.
+	if (static_cast<TBarApp*>(be_app)->Settings()->expandNewTeams)
+		AddExpandedItem(kTrackerSignature);
 }
 
 
@@ -99,6 +109,11 @@ TBarView::~TBarView()
 {
 	delete fDragMessage;
 	delete fCachedTypesList;
+
+	// Clean up the expanded items list
+	while (!sExpandedItems.IsEmpty())
+		delete static_cast<BString*>(sExpandedItems.RemoveItem((int32)0));
+	sExpandedItems.MakeEmpty();
 }
 
 
@@ -529,23 +544,7 @@ TBarView::ChangeState(int32 state, bool vertical, bool left, bool top)
 	PlaceTray(vertSwap, leftSwap, screenFrame);
 
 	// We need to keep track of what apps are expanded.
-	BList expandedItems;
-	BString* signature = NULL;
-	if (fVertical && Expando()
-		&& static_cast<TBarApp*>(be_app)->Settings()->superExpando) {
-		// Get a list of the signatures of expanded apps. Can't use
-		// team_id because there can be more than one team per application
-		if (fVertical && Expando() && vertical && fExpando) {
-			for (int index = 0; index < fExpando->CountItems(); index++) {
-				TTeamMenuItem* item
-					= dynamic_cast<TTeamMenuItem*>(fExpando->ItemAt(index));
-				if (item != NULL && item->IsExpanded()) {
-					signature = new BString(item->Signature());
-					expandedItems.AddItem((void*)signature);
-				}
-			}
-		}
-	}
+	SaveExpandedItems();
 
 	PlaceApplicationBar(screenFrame);
 	SizeWindow(screenFrame);
@@ -553,33 +552,90 @@ TBarView::ChangeState(int32 state, bool vertical, bool left, bool top)
 	Window()->UpdateIfNeeded();
 
 	// Re-expand those apps.
-	if (expandedItems.CountItems() > 0) {
-		for (int sigIndex = expandedItems.CountItems(); sigIndex-- > 0;) {
-			signature = static_cast<BString*>(expandedItems.ItemAt(sigIndex));
-			if (signature == NULL)
-				continue;
-
-			// Start at the 'bottom' of the list working up.
-			// Prevents being thrown off by expanding items.
-			for (int teamIndex = fExpando->CountItems(); teamIndex-- > 0;) {
-				TTeamMenuItem* item
-					= dynamic_cast<TTeamMenuItem*>(fExpando->ItemAt(teamIndex));
-				if (item != NULL && !signature->Compare(item->Signature())) {
-					item->ToggleExpandState(false);
-					break;
-				}
-			}
+	ExpandItems();
+	Invalidate();
+}
+
+
+void
+TBarView::SaveExpandedItems()
+{
+	if (!fExpando)
+		return;
+
+	// Get a list of the signatures of expanded apps. Can't use
+	// team_id because there can be more than one team per application
+	for (int32 teamIndex = fExpando->CountItems(); teamIndex-- > 0;) {
+		TTeamMenuItem* teamItem
+			= dynamic_cast<TTeamMenuItem*>(fExpando->ItemAt(teamIndex));
+		if (teamItem == NULL || teamItem->Signature() == NULL ||
+			*teamItem->Signature() == '\0')
+			continue;
+
+		if (teamItem->IsExpanded()) {
+			AddExpandedItem(teamItem->Signature());
 		}
+	}
+}
+
 
-		// Clean up expanded signature list.
-		while (!expandedItems.IsEmpty()) {
-			delete static_cast<BString*>(expandedItems.RemoveItem((int32)0));
+void
+TBarView::ExpandItems()
+{
+	if (!fExpando || !fVertical || !Expando()
+		|| !static_cast<TBarApp*>(be_app)->Settings()->superExpando
+		|| sExpandedItems.CountItems() <= 0)
+		return;
+
+	// Start at the 'bottom' of the list working up.
+	// Prevents being thrown off by expanding items.
+	for (int32 teamIndex = fExpando->CountItems(); teamIndex-- > 0;) {
+		TTeamMenuItem* teamItem
+			= dynamic_cast<TTeamMenuItem*>(fExpando->ItemAt(teamIndex));
+		if (teamItem == NULL || teamItem->Signature() == NULL
+			|| *teamItem->Signature() == '\0')
+			continue;
+
+		for (int32 sigIndex = sExpandedItems.CountItems(); sigIndex-- > 0;) {
+			BString* itemSig = (BString *)sExpandedItems.ItemAt(sigIndex);
+
+			if (itemSig->ICompare(teamItem->Signature()) == 0) {
+				teamItem->ToggleExpandState(false);
+				sExpandedItems.RemoveItem(sigIndex);
+				break;
+			}
 		}
+	}
+
+	// Clean up the expanded items list
+	while (!sExpandedItems.IsEmpty())
+		delete static_cast<BString*>(sExpandedItems.RemoveItem((int32)0));
+	sExpandedItems.MakeEmpty();
 
-		fExpando->SizeWindow();
+	fExpando->SizeWindow();
+}
+
+void
+TBarView::AddExpandedItem(const char* signature)
+{
+  // If signature is not in the list, add it
+	bool shouldAdd = true;
+
+	for (int32 sigIndex = sExpandedItems.CountItems();
+		sigIndex-- > 0;) {
+		BString *itemSig = (BString *)sExpandedItems.ItemAt(sigIndex);
+		if (itemSig->ICompare(signature) == 0) {
+			// already in the list, don't add the signature
+			shouldAdd = false;
+			break;
+		}
 	}
 
-	Invalidate();
+	// Add the signature to the list
+	if (shouldAdd) {
+		BString *sigToAdd = new BString(signature);
+		sExpandedItems.AddItem((void *)sigToAdd);
+	}
 }
 
 
diff --git src/apps/deskbar/BarView.h src/apps/deskbar/BarView.h
index 9e165cb..2268fb4 100644
--- src/apps/deskbar/BarView.h
+++ src/apps/deskbar/BarView.h
@@ -141,7 +141,8 @@ class TBarView : public BView {
 		TExpandoMenuBar* ExpandoMenuBar() const;
 		TBarMenuBar* BarMenuBar() const;
 		TDragRegion* DragRegion() const { return fDragRegion; }
-			
+		void AddExpandedItem(const char* signature);
+
 	private:
 		friend class TBeMenu;
 		friend class PreferencesWindow;
@@ -151,6 +152,8 @@ class TBarView : public BView {
 		void PlaceBeMenu();
 		void PlaceTray(bool vertSwap, bool leftSwap, BRect screenFrame);
 		void PlaceApplicationBar(BRect screenFrame);
+		void SaveExpandedItems();
+		void ExpandItems();
 
 		TBarMenuBar* fBarMenuBar;
 		TExpandoMenuBar* fExpando;
@@ -177,6 +180,7 @@ class TBarView : public BView {
 		uint32 fMaxRecentApps;
 
 		TTeamMenuItem* fLastDragItem;
+		static BList sExpandedItems;
 };
 
 
