diff --git a/Mage.Client/plugins/mage-card-plugin.jar b/Mage.Client/plugins/mage-card-plugin.jar
index 69201b2f75..d46415592f 100644
Binary files a/Mage.Client/plugins/mage-card-plugin.jar and b/Mage.Client/plugins/mage-card-plugin.jar differ
diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml
index 1d66bf123d..15c5a0264b 100644
--- a/Mage.Client/pom.xml
+++ b/Mage.Client/pom.xml
@@ -88,7 +88,7 @@
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>Mage-Card-Plugin</artifactId>
-            <version>0.5</version>
+            <version>0.6</version>
             <scope>runtime</scope>
         </dependency>
         <dependency>
diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
index 677a6e9827..316b61ecb8 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
+++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java
@@ -55,6 +55,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
 
     public static final String KEY_HAND_USE_BIG_CARDS = "handUseBigCards";
     public static final String KEY_HAND_SHOW_TOOLTIPS = "handShowTooltips";
+	public static final String KEY_PERMANENTS_IN_ONE_PILE = "nonLandPermanentsInOnePile";
     public static final String KEY_CARD_IMAGES_USE_DEFAULT = "cardImagesUseDefault";
     public static final String KEY_CARD_IMAGES_PATH = "cardImagesPath";
 
@@ -86,7 +87,9 @@ public class PreferencesDialog extends javax.swing.JDialog {
         jTabbedPane1 = new javax.swing.JTabbedPane();
         jPanel1 = new javax.swing.JPanel();
         jPanel3 = new javax.swing.JPanel();
+		jPanel6 = new javax.swing.JPanel();
         showToolTipsInHand = new javax.swing.JCheckBox();
+		nonLandPermanentsInOnePile = new javax.swing.JCheckBox();
         displayBigCardsInHand = new javax.swing.JCheckBox();
         jPanel2 = new javax.swing.JPanel();
         jLabel1 = new javax.swing.JLabel();
@@ -141,6 +144,11 @@ public class PreferencesDialog extends javax.swing.JDialog {
             }
         });
 
+		jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder("Battlefield"));
+
+		nonLandPermanentsInOnePile.setSelected(false);
+        nonLandPermanentsInOnePile.setText("Put non-land permanents in one pile.");
+
         javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
         jPanel3.setLayout(jPanel3Layout);
         jPanel3Layout.setHorizontalGroup(
@@ -165,19 +173,37 @@ public class PreferencesDialog extends javax.swing.JDialog {
         jPanel1.setLayout(jPanel1Layout);
         jPanel1Layout.setHorizontalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(jPanel1Layout.createSequentialGroup()
-                .addContainerGap()
-                .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                .addContainerGap())
-        );
+            	.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+            	.addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+		);
         jPanel1Layout.setVerticalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel1Layout.createSequentialGroup()
                 .addContainerGap()
                 .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+				.addContainerGap()
+				.addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addContainerGap(173, Short.MAX_VALUE))
         );
 
+		javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
+        jPanel6.setLayout(jPanel6Layout);
+        jPanel6Layout.setHorizontalGroup(
+            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel6Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(nonLandPermanentsInOnePile)
+                    )
+                .addContainerGap(170, Short.MAX_VALUE))
+        );
+        jPanel6Layout.setVerticalGroup(
+            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(jPanel6Layout.createSequentialGroup()
+                .addComponent(nonLandPermanentsInOnePile)
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+
         jTabbedPane1.addTab("Main", jPanel1);
 
         jLabel1.setText("Choose phases MAGE will stop on:");
@@ -430,6 +456,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
         save(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS);
         save(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true", "false", UPDATE_CACHE_POLICY);
         save(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true", "false", UPDATE_CACHE_POLICY);
+		save(prefs, dialog.nonLandPermanentsInOnePile, KEY_PERMANENTS_IN_ONE_PILE, "true", "false", UPDATE_CACHE_POLICY);
         saveImagesPath(prefs);
         try {
             prefs.flush();
@@ -507,6 +534,7 @@ public class PreferencesDialog extends javax.swing.JDialog {
                     load(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS);
                     load(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true");
                     load(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true");
+					load(prefs, dialog.nonLandPermanentsInOnePile, KEY_PERMANENTS_IN_ONE_PILE, "true");
                     loadImagesPath(prefs);
                     dialog.setLocation(300, 200);
                     dialog.reset();
@@ -619,10 +647,12 @@ public class PreferencesDialog extends javax.swing.JDialog {
     private javax.swing.JPanel jPanel3;
     private javax.swing.JPanel jPanel4;
     private javax.swing.JPanel jPanel5;
+	private javax.swing.JPanel jPanel6;
     private javax.swing.JTabbedPane jTabbedPane1;
     private javax.swing.JButton saveButton;
     private javax.swing.JCheckBox showToolTipsInHand;
     private javax.swing.JCheckBox useDefaultImageFolder;
+	private javax.swing.JCheckBox nonLandPermanentsInOnePile;
     // End of variables declaration//GEN-END:variables
 
     private static final PreferencesDialog dialog = new PreferencesDialog(new javax.swing.JFrame(), true);
diff --git a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java
index 7e10bf51ff..633e84a9e1 100644
--- a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java
+++ b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java
@@ -11,6 +11,7 @@ import mage.client.dialog.PreferencesDialog;
 import mage.client.plugins.MagePlugins;
 import mage.client.plugins.adapters.MageActionCallback;
 import mage.client.util.Config;
+import mage.client.util.SettingsManager;
 import mage.constants.Constants;
 import mage.interfaces.PluginException;
 import mage.interfaces.plugin.CardPlugin;
@@ -26,10 +27,7 @@ import javax.swing.*;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
 
 
 public class Plugins implements MagePlugins {
@@ -42,6 +40,7 @@ public class Plugins implements MagePlugins {
 	private CardPlugin cardPlugin = null;
 	private CounterPlugin counterPlugin = null;
 	private static final MageActionCallback mageActionCallback = new MageActionCallback();
+	private Map<String, String> sortingOptions = new HashMap<String, String>();
 	
 	public static MagePlugins getInstance() {
 		return fINSTANCE;
@@ -104,7 +103,8 @@ public class Plugins implements MagePlugins {
 
 	@Override
 	public void sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> permanents) {
-		if (this.cardPlugin != null) this.cardPlugin.sortPermanents(ui, permanents);
+		sortingOptions.put("nonLandPermanentsInOnePile", PreferencesDialog.getCachedValue("nonLandPermanentsInOnePile", "false"));
+		if (this.cardPlugin != null) this.cardPlugin.sortPermanents(ui, permanents, sortingOptions);
 	}
 
 	@Override
diff --git a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java
index 36369a9865..7aa2985b9c 100644
--- a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java
+++ b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java
@@ -19,7 +19,8 @@ import net.xeoh.plugins.base.Plugin;
 
 /**
  * Interface for card plugins
- * 
+ *
+ * @version 0.6 17,07.2011 added options to #sortPermanents
  * @version 0.3 21.11.2010 #getMageCard
  * @version 0.2 07.11.2010 #downloadImages
  * @version 0.1 31.10.2010 #getMagePermanent, #sortPermanents
@@ -28,7 +29,7 @@ import net.xeoh.plugins.base.Plugin;
 public interface CardPlugin extends Plugin {
 	MagePermanent getMagePermanent(PermanentView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage);
 	MagePermanent getMageCard(CardView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage);
-	void sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> cards);
+	void sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> cards, Map<String, String> options);
 
     /**
      * Download images.
diff --git a/Mage.Plugins/Mage.Card.Plugin/pom.xml b/Mage.Plugins/Mage.Card.Plugin/pom.xml
index 97c5e369a3..e905c82823 100644
--- a/Mage.Plugins/Mage.Card.Plugin/pom.xml
+++ b/Mage.Plugins/Mage.Card.Plugin/pom.xml
@@ -76,7 +76,7 @@
     </build>
 
     <properties>
-        <plugin-version>0.5</plugin-version>
+        <plugin-version>0.6</plugin-version>
         <jspf-version>0.9.1</jspf-version>
     </properties>
 </project>
diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java
index aa851df5e0..2c11513da2 100644
--- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java
+++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java
@@ -38,6 +38,7 @@ import java.util.List;
  *
  * @author nantuko
  * @version 0.1 01.11.2010 Mage permanents. Sorting card layout.
+ * @version 0.6 17,07.2011 #sortPermanents got option to display non-land permanents in one pile
  */
 @PluginImplementation
 @Author(name = "nantuko")
@@ -75,7 +76,7 @@ public class CardPluginImpl implements CardPlugin {
 
     @Override
     public String toString() {
-        return "[Card plugin, version 0.5]";
+        return "[Card plugin, version 0.6]";
     }
 
     @Override
@@ -99,8 +100,12 @@ public class CardPluginImpl implements CardPlugin {
     }
 
     @Override
-    public void sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> permanents) {
-        if (ui == null)
+    public void sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> permanents, Map<String, String> options) {
+        //TODO: add caching
+		//requires to find out is position have been changed that includes:
+		//adding/removing permanents, type change
+
+		if (ui == null)
             throw new RuntimeException("Error: no components");
         JComponent component = ui.get("jScrollPane");
         JComponent component2 = ui.get("battlefieldPanel");
@@ -157,6 +162,16 @@ public class CardPluginImpl implements CardPlugin {
         Row allCreatures = new Row(permanents, RowType.creature);
         Row allOthers = new Row(permanents, RowType.other);
 
+		boolean othersOnTheRight = true;
+		if (options != null && options.containsKey("nonLandPermanentsInOnePile")) {
+			if (options.get("nonLandPermanentsInOnePile").equals("true")) {
+				System.out.println("in one pile");
+				othersOnTheRight = false;
+			   	allCreatures.addAll(allOthers);
+				allOthers.clear();
+			}
+		}
+
         cardWidth = cardWidthMax;
         Rectangle rect = jScrollPane.getVisibleRect();
         playAreaWidth = rect.width;
@@ -198,6 +213,7 @@ public class CardPluginImpl implements CardPlugin {
             if (creatures.isEmpty() && lands.isEmpty() && others.isEmpty())
                 break;
             //cardWidth = (int)(cardWidth / 1.2);
+			//FIXME: -1 is too slow. why not binary search?
             cardWidth--;
         }
 
@@ -227,7 +243,7 @@ public class CardPluginImpl implements CardPlugin {
             for (int stackIndex = 0, stackCount = row.size(); stackIndex < stackCount; stackIndex++) {
                 Stack stack = row.get(stackIndex);
                 // Align others to the right.
-                if (RowType.other.isType(stack.get(0))) {
+                if (othersOnTheRight && RowType.other.isType(stack.get(0))) {
                     x = playAreaWidth - GUTTER_X + extraCardSpacingX;
                     for (int i = stackIndex, n = row.size(); i < n; i++)
                         x -= row.get(i).getWidth();
@@ -340,8 +356,9 @@ public class CardPluginImpl implements CardPlugin {
 
         private void addAll(Collection<MagePermanent> permanents, RowType type) {
             for (MagePermanent panel : permanents) {
-                if (!type.isType(panel))
+                if (!type.isType(panel)) {
                     continue;
+				}
                 Stack stack = new Stack();
                 stack.add(panel);
                 add(stack);