diff --git a/src/apps/deskbar/BarApp.cpp b/src/apps/deskbar/BarApp.cpp
index 532e1bc..f008ff8 100644
--- a/src/apps/deskbar/BarApp.cpp
+++ b/src/apps/deskbar/BarApp.cpp
@@ -72,7 +72,6 @@ BList TBarApp::sSubscribers;
 const uint32 kShowBeMenu = 'BeMn';
 const uint32 kShowTeamMenu = 'TmMn';
 
-const BRect kIconSize(0.0f, 0.0f, 15.0f, 15.0f);
 
 static const color_space kIconFormat = B_RGBA32;
 
@@ -95,6 +94,9 @@ TBarApp::TBarApp()
 	InitSettings();
 	InitIconPreloader();
 
+	fBarWindow = new TBarWindow();
+	fBarView = static_cast<TBarApp*>(be_app)->BarView();
+
 	be_roster->StartWatching(this);
 
 	sBarTeamInfoList.MakeEmpty();
@@ -116,7 +118,6 @@ TBarApp::TBarApp()
 
 	fSwitcherMessenger = BMessenger(new TSwitchManager(fSettings.switcherLoc));
 
-	fBarWindow = new TBarWindow();
 	fBarWindow->Show();
 
 	// this messenger now targets the barview instead of the
@@ -190,26 +191,20 @@ TBarApp::SaveSettings()
 		storedSettings.AddFloat("width", fSettings.width);
 		storedSettings.AddBool("showTime", fSettings.showTime);
 		storedSettings.AddPoint("switcherLoc", fSettings.switcherLoc);
-		storedSettings.AddInt32("recentAppsCount",
-			fSettings.recentAppsCount);
-		storedSettings.AddInt32("recentDocsCount",
-			fSettings.recentDocsCount);
-		storedSettings.AddBool("timeShowSeconds",
-			fSettings.timeShowSeconds);
+		storedSettings.AddInt32("recentAppsCount", fSettings.recentAppsCount);
+		storedSettings.AddInt32("recentDocsCount", fSettings.recentDocsCount);
+		storedSettings.AddBool("timeShowSeconds", fSettings.timeShowSeconds);
 		storedSettings.AddInt32("recentFoldersCount",
 			fSettings.recentFoldersCount);
 		storedSettings.AddBool("alwaysOnTop", fSettings.alwaysOnTop);
 		storedSettings.AddBool("timeFullDate", fSettings.timeFullDate);
 		storedSettings.AddBool("trackerAlwaysFirst",
 			fSettings.trackerAlwaysFirst);
-		storedSettings.AddBool("sortRunningApps",
-			fSettings.sortRunningApps);
-		storedSettings.AddBool("superExpando",
-			fSettings.superExpando);
-		storedSettings.AddBool("expandNewTeams",
-			fSettings.expandNewTeams);
-		storedSettings.AddBool("autoRaise",
-			fSettings.autoRaise);
+		storedSettings.AddBool("sortRunningApps", fSettings.sortRunningApps);
+		storedSettings.AddBool("superExpando", fSettings.superExpando);
+		storedSettings.AddBool("expandNewTeams", fSettings.expandNewTeams);
+		storedSettings.AddInt32("iconSize", fSettings.iconSize);
+		storedSettings.AddBool("autoRaise", fSettings.autoRaise);
 		storedSettings.AddBool("recentAppsEnabled",
 			fSettings.recentAppsEnabled);
 		storedSettings.AddBool("recentDocsEnabled",
@@ -244,6 +239,7 @@ TBarApp::InitSettings()
 	settings.sortRunningApps = false;
 	settings.superExpando = false;
 	settings.expandNewTeams = false;
+	settings.iconSize = kMinimumIconSize;
 	settings.autoRaise = false;
 	settings.recentAppsEnabled = true;
 	settings.recentDocsEnabled = true;
@@ -291,12 +287,10 @@ TBarApp::InitSettings()
 				&settings.trackerAlwaysFirst);
 			storedSettings.FindBool("sortRunningApps",
 				&settings.sortRunningApps);
-			storedSettings.FindBool("superExpando",
-				&settings.superExpando);
-			storedSettings.FindBool("expandNewTeams",
-				&settings.expandNewTeams);
-			storedSettings.FindBool("autoRaise",
-				&settings.autoRaise);
+			storedSettings.FindBool("superExpando", &settings.superExpando);
+			storedSettings.FindBool("expandNewTeams", &settings.expandNewTeams);
+			storedSettings.FindInt32("iconSize", (int32*)&settings.iconSize);
+			storedSettings.FindBool("autoRaise", &settings.autoRaise);
 			storedSettings.FindBool("recentAppsEnabled",
 				&settings.recentAppsEnabled);
 			storedSettings.FindBool("recentDocsEnabled",
@@ -369,6 +363,10 @@ TBarApp::MessageReceived(BMessage* message)
 			fPreferencesWindow = NULL;
 			break;
 
+		case kStateChanged:
+			fPreferencesWindow->PostMessage(kStateChanged);
+			break;
+
 		case B_SOME_APP_LAUNCHED:
 		{
 			team_id team = -1;
@@ -478,6 +476,26 @@ TBarApp::MessageReceived(BMessage* message)
 			break;
 		}
 
+		case kResizeTeamIcons:
+		{
+			int32 iconSize;
+
+			if (message->FindInt32("be:value", &iconSize) == B_OK)
+				fSettings.iconSize = iconSize * 8;
+
+			if (fSettings.iconSize < kMinimumIconSize)
+				fSettings.iconSize = kMinimumIconSize;
+			else if (fSettings.iconSize > kMaximumIconSize)
+				fSettings.iconSize = kMaximumIconSize;
+
+			ResizeTeamIcons();
+
+			fBarWindow->Lock();
+			fBarView->UpdatePlacement();
+			fBarWindow->Unlock();
+			break;
+		}
+
 		case 'TASK':
 			fSwitcherMessenger.SendMessage(message);
 			break;
@@ -628,17 +646,18 @@ TBarApp::AddTeam(team_id team, uint32 flags, const char* sig, entry_ref* ref)
 		return;
 	}
 
-	BFile file(ref, B_READ_ONLY);
-	BAppFileInfo appMime(&file);
-
 	BarTeamInfo* barInfo = new BarTeamInfo(new BList(), flags, strdup(sig),
-		new BBitmap(kIconSize, kIconFormat), strdup(ref->name));
+		new BBitmap(IconRect(), kIconFormat), strdup(ref->name));
+
+	if ((barInfo->flags & B_BACKGROUND_APP) == 0
+		&& strcasecmp(barInfo->sig, kDeskbarSignature) != 0)
+		FetchAppIcon(barInfo->sig, barInfo->icon);
 
 	barInfo->teams->AddItem((void*)team);
-	if (appMime.GetIcon(barInfo->icon, B_MINI_ICON) != B_OK)
-		appMime.GetTrackerIcon(barInfo->icon, B_MINI_ICON);
 
 	sBarTeamInfoList.AddItem(barInfo);
+	BMessage message(kResizeTeamIcons);
+	be_app->PostMessage(&message);
 
 	int32 subsCount = sSubscribers.CountItems();
 	if (subsCount > 0) {
@@ -698,6 +717,20 @@ TBarApp::RemoveTeam(team_id team)
 
 
 void
+TBarApp::ResizeTeamIcons()
+{
+	for (int32 i = 0; i < sBarTeamInfoList.CountItems(); i++) {
+		BarTeamInfo* barInfo = (BarTeamInfo*)sBarTeamInfoList.ItemAt(i);
+		if ((barInfo->flags & B_BACKGROUND_APP) == 0
+			&& strcasecmp(barInfo->sig, kDeskbarSignature) != 0) {
+			barInfo->icon = new BBitmap(IconRect(), kIconFormat);
+			FetchAppIcon(barInfo->sig, barInfo->icon);
+		}
+	}
+}
+
+
+void
 TBarApp::ShowPreferencesWindow()
 {
 	if (fPreferencesWindow)
@@ -709,6 +742,30 @@ TBarApp::ShowPreferencesWindow()
 }
 
 
+void
+TBarApp::FetchAppIcon(const char* signature, BBitmap* icon)
+{
+	app_info appInfo;
+
+	if (be_roster->GetAppInfo(signature, &appInfo) == B_OK) {
+		BFile file(&appInfo.ref, B_READ_ONLY);
+		BAppFileInfo appMime(&file);
+		icon_size size = icon->Bounds().IntegerHeight() >= 31
+			? B_LARGE_ICON : B_MINI_ICON;
+
+		if (appMime.GetIcon(icon, size) != B_OK)
+			appMime.GetTrackerIcon(icon, size);
+	}
+}
+
+
+const BRect
+TBarApp::IconRect()
+{
+	return BRect(0, 0, fSettings.iconSize - 1, fSettings.iconSize - 1);
+}
+
+
 //	#pragma mark -
 
 
diff --git a/src/apps/deskbar/BarApp.h b/src/apps/deskbar/BarApp.h
index 6f15838..f474417 100644
--- a/src/apps/deskbar/BarApp.h
+++ b/src/apps/deskbar/BarApp.h
@@ -80,6 +80,7 @@ const uint32 kTrackerFirst = 'TkFt';
 const uint32 kSortRunningApps = 'SAps';
 const uint32 kSuperExpando = 'SprE';
 const uint32 kExpandNewTeams = 'ExTm';
+const uint32 kResizeTeamIcons = 'RTIs';
 const uint32 kAutoRaise = 'AtRs';
 const uint32 kRestartTracker = 'Trak';
 
@@ -88,6 +89,11 @@ const uint32 kShutdownSystem = 301;
 const uint32 kRebootSystem = 302;
 const uint32 kSuspendSystem = 304;
 
+// icon size constants
+const int32 kMinimumIconSize = 16;
+const int32 kMaximumIconSize = 64;
+const int32 kIconSizeInterval = 8;
+
 /* --------------------------------------------- */
 
 struct desk_settings {
@@ -109,6 +115,7 @@ struct desk_settings {
 	bool sortRunningApps;
 	bool superExpando;
 	bool expandNewTeams;
+	int32 iconSize;
 	bool autoRaise;
 	bool recentAppsEnabled;
 	bool recentDocsEnabled;
@@ -139,6 +146,7 @@ class TBarApp : public BApplication {
 
 		static void Subscribe(const BMessenger &subscriber, BList*);
 		static void Unsubscribe(const BMessenger &subscriber);
+		void ResizeTeamIcons();
 
 	private:
 		void AddTeam(team_id team, uint32 flags, const char	*sig, entry_ref	*);
@@ -148,8 +156,11 @@ class TBarApp : public BApplication {
 		void SaveSettings();
 
 		void ShowPreferencesWindow();
+		void FetchAppIcon(const char* signature, BBitmap* icon);
+		const BRect IconRect();
 
 		TBarWindow* fBarWindow;
+		TBarView* fBarView;
 		BMessenger fSwitcherMessenger;
 		BMessenger fStatusViewMessenger;
 		BFile* fSettingsFile;
diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp
index f113e6a..f028fb2 100644
--- a/src/apps/deskbar/BarView.cpp
+++ b/src/apps/deskbar/BarView.cpp
@@ -130,10 +130,10 @@ void
 TBarView::Draw(BRect)
 {
 	BRect bounds(Bounds());
-	
+
 	rgb_color hilite = tint_color(ViewColor(), B_DARKEN_1_TINT);
 	rgb_color light = tint_color(ViewColor(), B_LIGHTEN_2_TINT);
-	
+
 	SetHighColor(hilite);
 	if (AcrossTop()) 
 		StrokeLine(bounds.LeftBottom(), bounds.RightBottom());
@@ -232,9 +232,11 @@ TBarView::PlaceBeMenu()
 	} else if (fState == kExpandoState) {
 		// shows apps below tray
 		fBarMenuBar->RemoveTeamMenu();
-		if (fVertical)
+		if (fVertical) {
 			width += 1;
-		else
+			desk_settings* settings = ((TBarApp*)be_app)->Settings();
+			width += settings->iconSize - kMinimumIconSize;
+		} else
 			width = floorf(width) / 2;
 		loc = Bounds().LeftTop();
 	} else 
@@ -298,6 +300,7 @@ TBarView::PlaceApplicationBar(BRect screenFrame)
 	if (fState == kMiniState)
 		return;
 
+	desk_settings* settings = ((TBarApp*)be_app)->Settings();
 	BRect expandoFrame(0, 0, 0, 0);
 	if (fVertical) {
 		// top left/right
@@ -309,12 +312,14 @@ TBarView::PlaceApplicationBar(BRect screenFrame)
 		expandoFrame.bottom = expandoFrame.top + 1;
 		if (fState == kFullState)
 			expandoFrame.right = fBarMenuBar->Frame().Width();
-		else
-			expandoFrame.right = sMinimumWindowWidth;
+		else {
+			expandoFrame.right = sMinimumWindowWidth + settings->iconSize
+				- kMinimumIconSize;
+		}
 	} else {
 		// top or bottom
 		expandoFrame.top = 0;
-		expandoFrame.bottom = kHModeHeight;
+		expandoFrame.bottom = settings->iconSize + 4;
 		if (fTrayLocation != 0)
 			expandoFrame.right = fDragRegion->Frame().left - 1;
 		else
@@ -336,13 +341,15 @@ TBarView::GetPreferredWindowSize(BRect screenFrame, float* width, float* height)
 		windowHeight = screenFrame.bottom;
 		windowWidth = fBarMenuBar->Frame().Width();
 	} else if (fState == kExpandoState) {
+		desk_settings* settings = ((TBarApp*)be_app)->Settings();
 		if (fVertical) {
 			// top left or right
 			windowHeight = fExpando->Frame().bottom;
+			windowWidth += settings->iconSize - kMinimumIconSize;
 		} else {
 			// top or bottom, full
 			fExpando->CheckItemSizes(0);
-			windowHeight = kHModeHeight;
+			windowHeight = settings->iconSize + 4;
 			windowWidth = screenFrame.Width();
 		}
 	} else {
@@ -433,12 +440,20 @@ TBarView::ChangeState(int32 state, bool vertical, bool left, bool top)
 {
 	bool vertSwap = (fVertical != vertical);
 	bool leftSwap = (fLeft != left);
+	bool stateChanged = (fState != state);
 
 	fState = state;
 	fVertical = vertical;
 	fLeft = left;
 	fTop = top;
 
+	// Send a message to the preferences window to let it know to enable
+	// or disabled preference items
+	if (stateChanged) {
+		BMessage message(kStateChanged);
+		be_app->PostMessage(&message);
+	}
+
 	BRect screenFrame = (BScreen(Window())).Frame();
 
 	PlaceBeMenu();
@@ -934,8 +949,10 @@ BRect
 TBarView::OffsetIconFrame(BRect rect) const
 {
 	BRect frame(Frame());
+	desk_settings* settings = ((TBarApp*)be_app)->Settings();
+
 	frame.left += fDragRegion->Frame().left + fReplicantTray->Frame().left
-		+ rect.left;
+		+ rect.left + settings->iconSize - kMinimumIconSize;
 	frame.top += fDragRegion->Frame().top + fReplicantTray->Frame().top
 		+ rect.top;
 
diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp b/src/apps/deskbar/ExpandoMenuBar.cpp
index 0fd4483..28ecb99 100644
--- a/src/apps/deskbar/ExpandoMenuBar.cpp
+++ b/src/apps/deskbar/ExpandoMenuBar.cpp
@@ -89,7 +89,9 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView* bar, BRect frame, const char* name,
 {
 	SetItemMargins(0.0f, 0.0f, 0.0f, 0.0f);
 	SetFont(be_plain_font);
-	SetMaxContentWidth(sMinimumWindowWidth);
+	float maxContentWidth = sMinimumWindowWidth
+		+ ((TBarApp*)be_app)->Settings()->iconSize - kMinimumIconSize;
+	SetMaxContentWidth(maxContentWidth);
 }
 
 
@@ -133,6 +135,9 @@ TExpandoMenuBar::AttachedToWindow()
 
 	desk_settings* settings = ((TBarApp*)be_app)->Settings();
 
+	if (!fVertical || fBarView->Expando())
+		width += settings->iconSize - kMinimumIconSize;
+
 	if (settings->sortRunningApps)
 		teamList.SortItems(CompareByName);
 
@@ -628,10 +633,11 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
 	} else if (delta < 0 && fOverflow) {
 		reset = true;
 		if (fullWidth > width)
-			newWidth = floorf(width/count);
+			newWidth = floorf(width / count);
 		else
 			newWidth = sMinimumWindowWidth;
 	}
+
 	if (newWidth > sMinimumWindowWidth)
 		newWidth = sMinimumWindowWidth;
 
diff --git a/src/apps/deskbar/PreferencesWindow.cpp b/src/apps/deskbar/PreferencesWindow.cpp
index e8fdf07..6bd2405 100644
--- a/src/apps/deskbar/PreferencesWindow.cpp
+++ b/src/apps/deskbar/PreferencesWindow.cpp
@@ -17,6 +17,7 @@
 #include <OpenWithTracker.h>
 #include <RadioButton.h>
 #include <SeparatorView.h>
+#include <Slider.h>
 
 #include <ctype.h>
 
@@ -57,6 +58,15 @@ PreferencesWindow::PreferencesWindow(BRect frame)
 		new BMessage(kSuperExpando));
 	fAppsExpandNew = new BCheckBox(B_TRANSLATE("Expand new applications"),
 		new BMessage(kExpandNewTeams));
+	fAppsIconSizeSlider = new BSlider("icon_size", B_TRANSLATE("Icon size"),
+		NULL, kMinimumIconSize / kIconSizeInterval,
+		kMaximumIconSize / kIconSizeInterval, B_HORIZONTAL);
+	fAppsIconSizeSlider->SetHashMarks(B_HASH_MARKS_BOTTOM);
+	fAppsIconSizeSlider->SetHashMarkCount(((kMaximumIconSize - kMinimumIconSize)
+		/ kIconSizeInterval) + 1);
+	fAppsIconSizeSlider->SetLimitLabels(B_TRANSLATE("Small"),
+		B_TRANSLATE("Large"));
+	fAppsIconSizeSlider->SetModificationMessage(new BMessage(kResizeTeamIcons));
 
 	fClockSeconds = new BCheckBox(B_TRANSLATE("Show seconds"),
 		new BMessage(kShowSeconds));
@@ -83,12 +93,13 @@ PreferencesWindow::PreferencesWindow(BRect frame)
 
 	// Values
 	TBarApp* barApp = static_cast<TBarApp*>(be_app);
-	desk_settings* appSettings = barApp->Settings();;
+	desk_settings* appSettings = barApp->Settings();
 
 	fAppsSort->SetValue(appSettings->sortRunningApps);
 	fAppsSortTrackerFirst->SetValue(appSettings->trackerAlwaysFirst);
 	fAppsShowExpanders->SetValue(appSettings->superExpando);
 	fAppsExpandNew->SetValue(appSettings->expandNewTeams);
+	fAppsIconSizeSlider->SetValue(appSettings->iconSize / 8);
 
 	int32 docCount = appSettings->recentDocsCount;
 	int32 appCount = appSettings->recentAppsCount;
@@ -131,6 +142,7 @@ PreferencesWindow::PreferencesWindow(BRect frame)
 	fAppsSort->SetTarget(be_app);
 	fAppsSortTrackerFirst->SetTarget(be_app);
 	fAppsExpandNew->SetTarget(be_app);
+	fAppsIconSizeSlider->SetTarget(be_app);
 
 	fClockSeconds->SetTarget(replicantTray);
 
@@ -179,6 +191,7 @@ PreferencesWindow::PreferencesWindow(BRect frame)
 				.SetInsets(20, 0, 0, 0)
 				.Add(fAppsExpandNew)
 				.End()
+			.Add(fAppsIconSizeSlider)
 			.AddGlue()
 			.SetInsets(10, 10, 10, 10)
 			.End()
@@ -242,6 +255,10 @@ PreferencesWindow::MessageReceived(BMessage* message)
 			be_app->PostMessage(message);
 			break;
 
+		case kStateChanged:
+			_EnableDisableDependentItems();
+			break;
+
 		default:
 			BWindow::MessageReceived(message);
 			break;
@@ -275,10 +292,22 @@ PreferencesWindow::_UpdateRecentCounts()
 void
 PreferencesWindow::_EnableDisableDependentItems()
 {
-	if (fAppsShowExpanders->Value())
-		fAppsExpandNew->SetEnabled(true);
-	else
+	TBarApp* barApp = static_cast<TBarApp*>(be_app);
+	if (barApp->BarView()->Vertical()) {
+		if (barApp->BarView()->Expando()) {
+			fAppsShowExpanders->SetEnabled(true);
+			if (fAppsShowExpanders->Value())
+				fAppsExpandNew->SetEnabled(true);
+			else
+				fAppsExpandNew->SetEnabled(false);
+		} else {
+			fAppsShowExpanders->SetEnabled(false);
+			fAppsExpandNew->SetEnabled(false);
+		}
+	} else {
+		fAppsShowExpanders->SetEnabled(false);
 		fAppsExpandNew->SetEnabled(false);
+	}
 
 	if (fMenuRecentDocuments->Value())
 		fMenuRecentDocumentCount->SetEnabled(true);
diff --git a/src/apps/deskbar/PreferencesWindow.h b/src/apps/deskbar/PreferencesWindow.h
index 77f641b..4aabde4 100644
--- a/src/apps/deskbar/PreferencesWindow.h
+++ b/src/apps/deskbar/PreferencesWindow.h
@@ -10,6 +10,7 @@
 #include <Button.h>
 #include <CheckBox.h>
 #include <RadioButton.h>
+#include <Slider.h>
 #include <StringView.h>
 #include <TextControl.h>
 #include <Window.h>
@@ -19,6 +20,7 @@ const uint32 kConfigShow = 'show';
 const uint32 kConfigClose = 'canc';
 const uint32 kUpdateRecentCounts = 'upct';
 const uint32 kEditMenuInTracker = 'mtrk';
+const uint32 kStateChanged = 'stch';
 
 
 class PreferencesWindow : public BWindow
@@ -51,6 +53,7 @@ private:
 			BCheckBox*		fAppsSortTrackerFirst;
 			BCheckBox*		fAppsShowExpanders;
 			BCheckBox*		fAppsExpandNew;
+			BSlider*		fAppsIconSizeSlider;
 
 			BCheckBox*		fClockSeconds;
 
diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp
index a504101..4f29518 100644
--- a/src/apps/deskbar/StatusView.cpp
+++ b/src/apps/deskbar/StatusView.cpp
@@ -136,11 +136,14 @@ TReplicantTray::TReplicantTray(TBarView* parent, bool vertical)
 	fAlignmentSupport(false)
 {
 	// init the minimum window width according to the logo.
+	desk_settings* settings = ((TBarApp*)be_app)->Settings();
 	const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE,
 		R_BeLogoIcon);
+
 	if (logoBitmap != NULL) {
 		sMinimumWindowWidth = max_c(sMinimumWindowWidth,
-			2 * (logoBitmap->Bounds().Width() + 8));
+			2 * (logoBitmap->Bounds().Width() + 8) + settings->iconSize
+			- kMinimumIconSize);
 		fMinimumTrayWidth = sMinimumWindowWidth - kGutter - kDragRegionWidth;
 	}
 }
@@ -250,6 +253,7 @@ void
 TReplicantTray::GetPreferredSize(float* preferredWidth, float* preferredHeight)
 {
 	float width = 0, height = kMinimumTrayHeight;
+	desk_settings* settings = ((TBarApp*)be_app)->Settings();
 
 	if (fMultiRowMode) {
 		if (fShelf->CountReplicants() > 0)
@@ -262,13 +266,16 @@ TReplicantTray::GetPreferredSize(float* preferredWidth, float* preferredHeight)
 		height = kGutter + (rowCount * kMaxReplicantHeight)
 			+ ((rowCount - 1) * kIconGap) + kGutter;
 		height = max(kMinimumTrayHeight, height);
-		width = fMinimumTrayWidth;
+
+		if (fBarView->Expando())
+			width = fMinimumTrayWidth + settings->iconSize - kMinimumIconSize;
+		else
+			width = fMinimumTrayWidth;
 	} else {
-		// if last replicant overruns clock then
-		// resize to accomodate
+		// if last replicant overruns the clock then resize to accomodate
 		if (fShelf->CountReplicants() > 0) {
-			if (fBarView->ShowingClock()
-				&& fRightBottomReplicant.right + 6 >= fClock->Frame().left) {
+			if (fBarView->ShowingClock() && fRightBottomReplicant.right + 6
+				>= fClock->Frame().left) {
 				width = fRightBottomReplicant.right + 6
 					+ fClock->Frame().Width();
 			} else
@@ -276,6 +283,7 @@ TReplicantTray::GetPreferredSize(float* preferredWidth, float* preferredHeight)
 		}
 		// this view has a fixed minimum width
 		width = max(fMinimumTrayWidth, width);
+		height = kGutter + settings->iconSize + kGutter;
 	}
 
 	*preferredWidth = width;
@@ -1237,13 +1245,15 @@ TReplicantTray::AcceptAddon(BRect replicantFrame, BMessage* message)
 BPoint
 TReplicantTray::LocationForReplicant(int32 index, float width)
 {
+	desk_settings* settings = ((TBarApp*)be_app)->Settings();
 	BPoint loc(kIconGap + 1, kGutter + 1);
 
 	if (fMultiRowMode) {
 		// try to find free space in every row
 		for (int32 row = 0; ; loc.y += kMaxReplicantHeight + kIconGap, row++) {
 			// determine free space in this row
-			BRect rect(loc.x, loc.y, loc.x + fMinimumTrayWidth - kIconGap - 2.0,
+			BRect rect(loc.x, loc.y, loc.x + fMinimumTrayWidth
+				+ settings->iconSize - kMinimumIconSize - kIconGap - 2.0,
 				loc.y + kMaxReplicantHeight);
 			if (row == 0 && fBarView->ShowingClock())
 				rect.right -= fClock->Frame().Width() + kIconGap;
diff --git a/src/apps/deskbar/TeamMenuItem.cpp b/src/apps/deskbar/TeamMenuItem.cpp
index cbd669f..5e7f1cd 100644
--- a/src/apps/deskbar/TeamMenuItem.cpp
+++ b/src/apps/deskbar/TeamMenuItem.cpp
@@ -203,15 +203,14 @@ TTeamMenuItem::GetContentSize(float* width, float* height)
 	if (fIcon)
 		iconBounds = fIcon->Bounds();
 	else
-		iconBounds = BRect(0, 0, 15, 15);
+		iconBounds = BRect(0, 0, kMinimumIconSize - 1, kMinimumIconSize - 1);
 
 	BMenuItem::GetContentSize(width, height);
 
 	if (fOverrideWidth != -1.0f)
 		*width = fOverrideWidth;
 	else
-		*width = kHPad + iconBounds.Width() + kLabelOffset + fLabelWidth + kHPad
-			+ 20;
+		*width = kHPad + iconBounds.Width() + kLabelOffset + fLabelWidth + kHPad			+ 20;
 
 	if (fOverrideHeight != -1.0f) 
 		*height = fOverrideHeight;
