diff --git a/Mage.Client/config/config.properties b/Mage.Client/config/config.properties
new file mode 100644
index 0000000000..b550d59982
--- /dev/null
+++ b/Mage.Client/config/config.properties
@@ -0,0 +1,7 @@
+server-name=localhost
+port=17171
+remote-server=mage-server
+cards-resource-path=resources/images/cards/
+symbols-resource-path=resources/images/symbols/
+resource-path=resources/images/
+card-scaling-factor=0.4
\ No newline at end of file
diff --git a/Mage.Client/nbproject/project.properties b/Mage.Client/nbproject/project.properties
index 742f8356bd..afa4656b9d 100644
--- a/Mage.Client/nbproject/project.properties
+++ b/Mage.Client/nbproject/project.properties
@@ -73,4 +73,4 @@ run.test.classpath=\
 source.encoding=UTF-8
 src.dir=src
 test.src.dir=test
-app.version=0.2
+app.version=0.3
diff --git a/Mage.Client/release/config/config.properties b/Mage.Client/release/config/config.properties
index 7c8e6bc7d4..b550d59982 100644
--- a/Mage.Client/release/config/config.properties
+++ b/Mage.Client/release/config/config.properties
@@ -3,4 +3,5 @@ port=17171
 remote-server=mage-server
 cards-resource-path=resources/images/cards/
 symbols-resource-path=resources/images/symbols/
-resource-path=resources/images/
\ No newline at end of file
+resource-path=resources/images/
+card-scaling-factor=0.4
\ No newline at end of file
diff --git a/Mage.Client/src/mage/client/MageFrame.form b/Mage.Client/src/mage/client/MageFrame.form
index 1a0cbca8ac..26949b171a 100644
--- a/Mage.Client/src/mage/client/MageFrame.form
+++ b/Mage.Client/src/mage/client/MageFrame.form
@@ -52,7 +52,7 @@
 
       <Layout class="org.netbeans.modules.form.compat2.layouts.support.JLayeredPaneSupportLayout"/>
       <SubComponents>
-        <Component class="mage.client.TablesPane" name="tablesPane">
+        <Component class="mage.client.table.TablesPane" name="tablesPane">
           <Properties>
             <Property name="maximum" type="boolean" value="true"/>
           </Properties>
diff --git a/Mage.Client/src/mage/client/MageFrame.java b/Mage.Client/src/mage/client/MageFrame.java
index cf49ad99fb..a41b86ac17 100644
--- a/Mage.Client/src/mage/client/MageFrame.java
+++ b/Mage.Client/src/mage/client/MageFrame.java
@@ -36,17 +36,14 @@ package mage.client;
 
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.util.UUID;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.Box;
-import javax.swing.BoxLayout;
 import javax.swing.JDesktopPane;
+import javax.swing.JLayeredPane;
 import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
-import mage.cards.decks.Deck;
 import mage.client.dialog.AboutDialog;
 import mage.client.dialog.ConnectDialog;
 import mage.client.remote.Session;
@@ -99,7 +96,8 @@ public class MageFrame extends javax.swing.JFrame {
 
 		session = new Session(this);
 		connectDialog = new ConnectDialog(session);
-		desktopPane.add(connectDialog);
+		desktopPane.add(connectDialog, JLayeredPane.POPUP_LAYER);
+//		connectDialog.setLocation(50, 50);
 		disableButtons();
     }
 
@@ -134,7 +132,7 @@ public class MageFrame extends javax.swing.JFrame {
     private void initComponents() {
 
         desktopPane = new javax.swing.JDesktopPane();
-        tablesPane = new mage.client.TablesPane();
+        tablesPane = new mage.client.table.TablesPane();
         gamePane = new mage.client.game.GamePane();
         deckEditorPane = new mage.client.deckeditor.DeckEditorPane();
         mageToolbar = new javax.swing.JToolBar();
@@ -344,7 +342,7 @@ public class MageFrame extends javax.swing.JFrame {
     private javax.swing.JToolBar.Separator jSeparator4;
     private javax.swing.JLabel lblStatus;
     private javax.swing.JToolBar mageToolbar;
-    private mage.client.TablesPane tablesPane;
+    private mage.client.table.TablesPane tablesPane;
     // End of variables declaration//GEN-END:variables
 
 	public void setStatusText(String status) {
diff --git a/Mage.Client/src/mage/client/cards/Card.form b/Mage.Client/src/mage/client/cards/Card.form
index a0c7c7edbf..9bfc695442 100644
--- a/Mage.Client/src/mage/client/cards/Card.form
+++ b/Mage.Client/src/mage/client/cards/Card.form
@@ -7,7 +7,7 @@
     </Property>
     <Property name="opaque" type="boolean" value="false"/>
     <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
-      <Connection code="new Dimension(FRAME_WIDTH, FRAME_HEIGHT)" type="code"/>
+      <Connection code="new Dimension(dimension.frameWidth, dimension.frameHeight)" type="code"/>
     </Property>
   </Properties>
   <AuxValues>
@@ -37,7 +37,7 @@
         <Property name="opaque" type="boolean" value="false"/>
       </Properties>
       <AuxValues>
-        <AuxValue name="JavaCodeGenerator_allCodePost" type="java.lang.String" value="jScrollPane1.setBounds(new Rectangle(CONTENT_XOFFSET, TEXT_YOFFSET, TEXT_WIDTH, TEXT_HEIGHT));"/>
+        <AuxValue name="JavaCodeGenerator_allCodePost" type="java.lang.String" value="jScrollPane1.setBounds(new Rectangle(dimension.contentXOffset, dimension.textYOffset, dimension.textWidth, dimension.textHeight));"/>
         <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
       </AuxValues>
       <Constraints>
diff --git a/Mage.Client/src/mage/client/cards/Card.java b/Mage.Client/src/mage/client/cards/Card.java
index a6c3b17c2d..46686e4994 100644
--- a/Mage.Client/src/mage/client/cards/Card.java
+++ b/Mage.Client/src/mage/client/cards/Card.java
@@ -63,6 +63,7 @@ import javax.swing.text.StyledDocument;
 import mage.Constants.CardType;
 import mage.client.MageFrame;
 import mage.client.remote.Session;
+
 import mage.client.util.ImageHelper;
 import mage.view.CardView;
 import static mage.client.util.Constants.*;
@@ -76,6 +77,7 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 	protected static Session session = MageFrame.getSession();
 
 	protected Point p;
+	protected CardDimensions dimension;
 
 	protected UUID gameId;
 	protected BigCard bigCard;
@@ -85,15 +87,17 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 	protected TextPopup popupText = new TextPopup();
 	protected BufferedImage background;
 	protected BufferedImage image = new BufferedImage(FRAME_MAX_WIDTH, FRAME_MAX_HEIGHT, BufferedImage.TYPE_INT_RGB);
-	protected BufferedImage small = new BufferedImage(FRAME_WIDTH, FRAME_HEIGHT, BufferedImage.TYPE_INT_RGB);
+	protected BufferedImage small;
 
     /** Creates new form Card */
-    public Card(CardView card, BigCard bigCard, UUID gameId) {
+    public Card(CardView card, BigCard bigCard, CardDimensions dimension, UUID gameId) {
+		this.dimension = dimension;
         initComponents();
 
 		this.gameId = gameId;
 		this.card = card;
 		this.bigCard = bigCard;
+		small = new BufferedImage(dimension.frameWidth, dimension.frameHeight, BufferedImage.TYPE_INT_RGB);
 		background = ImageHelper.getBackground(card);
 		
 		StyledDocument doc = text.getStyledDocument();
@@ -132,15 +136,15 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 
 	    gSmall.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		gSmall.setColor(Color.BLACK);
-	    gSmall.drawImage(ImageHelper.ScaleImage(image, FRAME_WIDTH, FRAME_HEIGHT), 0, 0, this);
+	    gSmall.drawImage(ImageHelper.ScaleImage(image, dimension.frameWidth, dimension.frameHeight), 0, 0, this);
 
 		gImage.setFont(new Font("Arial", Font.PLAIN, NAME_FONT_MAX_SIZE));
 		gImage.drawString(card.getName(), CONTENT_MAX_XOFFSET, NAME_MAX_YOFFSET);
 		if (card.getCardTypes().contains(CardType.CREATURE)) {
-			gImage.drawString(card.getPower() + "/" + card.getToughness(), POWBOX_MAX_LEFT + 10, POWBOX_MAX_TOP + 15);
+			gImage.drawString(card.getPower() + "/" + card.getToughness(), POWBOX_TEXT_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
 		}
 		else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
-			gImage.drawString(card.getLoyalty(), POWBOX_MAX_LEFT + 10, POWBOX_MAX_TOP + 15);
+			gImage.drawString(card.getLoyalty(), POWBOX_TEXT_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
 		}
 
 		if (card.getCardTypes().size() > 0)
@@ -148,17 +152,17 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 
 		gImage.dispose();
 
-		gSmall.setFont(new Font("Arial", Font.PLAIN, NAME_FONT_SIZE));
-		gSmall.drawString(card.getName(), CONTENT_XOFFSET, NAME_YOFFSET+1);
+		gSmall.setFont(new Font("Arial", Font.PLAIN, dimension.nameFontSize));
+		gSmall.drawString(card.getName(), dimension.contentXOffset, dimension.nameYOffset);
 		if (card.getCardTypes().contains(CardType.CREATURE)) {
-			gSmall.drawString(card.getPower() + "/" + card.getToughness(), POWBOX_LEFT + 5, POWBOX_TOP + 8);
+			gSmall.drawString(card.getPower() + "/" + card.getToughness(), dimension.powBoxTextLeft, dimension.powBoxTextTop);
 		}
 		else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
-			gSmall.drawString(card.getLoyalty(), POWBOX_LEFT + 5, POWBOX_TOP + 8);
+			gSmall.drawString(card.getLoyalty(), dimension.powBoxTextLeft, dimension.powBoxTextTop);
 		}
 
 		if (card.getCardTypes().size() > 0)
-			gSmall.drawString(cardType, CONTENT_XOFFSET, TYPE_YOFFSET);
+			gSmall.drawString(cardType, dimension.contentXOffset, dimension.typeYOffset);
 		drawText();
 
 	    gSmall.dispose();
@@ -171,15 +175,17 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 			sb.append("\n").append(card.getManaCost());
 		}
 		sb.append("\n").append(cardType);
-		sb.append("\n").append(card.getColor().toString());
-		for (String rule: getRules()) {
-			sb.append("\n").append(rule);
+		if (card.getColor().hasColor()) {
+			sb.append("\n").append(card.getColor().toString());
 		}
 		if (card.getCardTypes().contains(CardType.CREATURE)) {
-			sb.append(card.getPower()).append("/").append(card.getToughness());
+			sb.append("\n").append(card.getPower()).append("/").append(card.getToughness());
 		}
 		else if (card.getCardTypes().contains(CardType.PLANESWALKER)) {
-			sb.append(card.getLoyalty());
+			sb.append("\n").append(card.getLoyalty());
+		}
+		for (String rule: getRules()) {
+			sb.append("\n").append(rule);
 		}
 		return sb.toString();
 	}
@@ -235,7 +241,7 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 
         setMinimumSize(getPreferredSize());
         setOpaque(false);
-        setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
+        setPreferredSize(new Dimension(dimension.frameWidth, dimension.frameHeight));
         setLayout(null);
 
         jScrollPane1.setBorder(null);
@@ -245,14 +251,14 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 
         text.setBorder(null);
         text.setEditable(false);
-        text.setFont(new java.awt.Font("Arial", 0, 9)); // NOI18N
+        text.setFont(new java.awt.Font("Arial", 0, 9));
         text.setFocusable(false);
         text.setOpaque(false);
         jScrollPane1.setViewportView(text);
 
         add(jScrollPane1);
         jScrollPane1.setBounds(20, 110, 130, 100);
-        jScrollPane1.setBounds(new Rectangle(CONTENT_XOFFSET, TEXT_YOFFSET, TEXT_WIDTH, TEXT_HEIGHT));
+        jScrollPane1.setBounds(new Rectangle(dimension.contentXOffset, dimension.textYOffset, dimension.textWidth, dimension.textHeight));
     }// </editor-fold>//GEN-END:initComponents
 
 	@Override
@@ -266,7 +272,7 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 		} else {
 			g2.setColor(Color.BLACK);
 		}
-		g2.drawRect(0, 0, FRAME_WIDTH - 1, FRAME_HEIGHT - 1);
+		g2.drawRect(0, 0, dimension.frameWidth - 1, dimension.frameHeight - 1);
 	}
 
 	@Override
@@ -298,11 +304,11 @@ public class Card extends javax.swing.JPanel implements MouseMotionListener, Mou
 		if (popup != null)
 			popup.hide();
 		PopupFactory factory = PopupFactory.getSharedInstance();
-		popup = factory.getPopup(this, popupText, (int) this.getLocationOnScreen().getX() + FRAME_WIDTH, (int) this.getLocationOnScreen().getY() + 40);
+		popup = factory.getPopup(this, popupText, (int) this.getLocationOnScreen().getX() + dimension.frameWidth, (int) this.getLocationOnScreen().getY() + 40);
 		popup.show();
 		//hack to get popup to resize to fit text
 		popup.hide();
-		popup = factory.getPopup(this, popupText, (int) this.getLocationOnScreen().getX() + FRAME_WIDTH, (int) this.getLocationOnScreen().getY() + 40);
+		popup = factory.getPopup(this, popupText, (int) this.getLocationOnScreen().getX() + dimension.frameWidth, (int) this.getLocationOnScreen().getY() + 40);
 		popup.show();
 	}
 
diff --git a/Mage.Client/src/mage/client/cards/CardDimensions.java b/Mage.Client/src/mage/client/cards/CardDimensions.java
new file mode 100644
index 0000000000..2a8c96af0c
--- /dev/null
+++ b/Mage.Client/src/mage/client/cards/CardDimensions.java
@@ -0,0 +1,69 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ * 
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ * 
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ * 
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ * 
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.client.cards;
+
+import static mage.client.util.Constants.*;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class CardDimensions {
+
+	public static int frameHeight;
+	public static int frameWidth;
+	public static int symbolHeight;
+	public static int symbolWidth;
+	public static int contentXOffset;
+	public static int nameYOffset;
+	public static int typeYOffset;
+	public static int textYOffset;
+	public static int textWidth;
+	public static int textHeight;
+	public static int powBoxTextTop;
+	public static int powBoxTextLeft;
+	public static int nameFontSize;
+
+	public CardDimensions(double scaleFactor) {
+		frameHeight = (int)(FRAME_MAX_HEIGHT * scaleFactor);
+		frameWidth = (int)(FRAME_MAX_WIDTH * scaleFactor);
+		symbolHeight = (int)(SYMBOL_MAX_HEIGHT * scaleFactor);
+		symbolWidth = (int)(SYMBOL_MAX_WIDTH * scaleFactor);
+		contentXOffset = (int)(CONTENT_MAX_XOFFSET * scaleFactor);
+		nameYOffset = (int)(NAME_MAX_YOFFSET * scaleFactor);
+		typeYOffset = (int)(TYPE_MAX_YOFFSET * scaleFactor);
+		textYOffset = (int)(TEXT_MAX_YOFFSET * scaleFactor);
+		textWidth = (int)(TEXT_MAX_WIDTH * scaleFactor);
+		textHeight = (int)(TEXT_MAX_HEIGHT * scaleFactor);
+		powBoxTextTop = (int)(POWBOX_MAX_TOP * scaleFactor);
+		powBoxTextLeft = (int)(POWBOX_MAX_LEFT * scaleFactor);
+		nameFontSize = Math.max(9, (int)(NAME_FONT_MAX_SIZE * scaleFactor));
+	}
+
+}
diff --git a/Mage.Client/src/mage/client/cards/CardEventSource.java b/Mage.Client/src/mage/client/cards/CardEventSource.java
index fed1bc0035..ffef6ad0f2 100644
--- a/Mage.Client/src/mage/client/cards/CardEventSource.java
+++ b/Mage.Client/src/mage/client/cards/CardEventSource.java
@@ -52,6 +52,7 @@ public class CardEventSource implements EventSource<Event>, Serializable {
 		dispatcher.fireEvent(new Event(cardId, message));
 	}
 
+	@Override
 	public void clearListeners() {
 		dispatcher.clearListeners();
 	}
diff --git a/Mage.Client/src/mage/client/cards/CardGrid.form b/Mage.Client/src/mage/client/cards/CardGrid.form
index 92525c8b11..0f2b598a52 100644
--- a/Mage.Client/src/mage/client/cards/CardGrid.form
+++ b/Mage.Client/src/mage/client/cards/CardGrid.form
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
-<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+<Form version="1.3" maxVersion="1.7">
   <AuxValues>
     <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
     <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
diff --git a/Mage.Client/src/mage/client/cards/CardGrid.java b/Mage.Client/src/mage/client/cards/CardGrid.java
index 23958dab59..bee2d23ed8 100644
--- a/Mage.Client/src/mage/client/cards/CardGrid.java
+++ b/Mage.Client/src/mage/client/cards/CardGrid.java
@@ -44,11 +44,11 @@ import java.awt.event.MouseListener;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
+import mage.client.util.Config;
 import mage.client.util.Event;
 import mage.client.util.Listener;
 import mage.view.CardView;
 import mage.view.CardsView;
-import static mage.client.util.Constants.*;
 
 /**
  *
@@ -64,7 +64,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
     public CardGrid() {
         initComponents();
 		addComponentListener(this);
-		setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
+		setPreferredSize(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight));
     }
 
 	public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) {
@@ -72,7 +72,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
 		this.gameId = gameId;
 		cards.clear();
 		for (CardView card: showCards) {
-			Card cardImg = new Card(card, bigCard, gameId);
+			Card cardImg = new Card(card, bigCard, Config.dimensions, gameId);
 			cardImg.update(card);
 			cardImg.addMouseListener(this);
 			cards.add(cardImg);
@@ -84,13 +84,13 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
 	public void drawCards() {
 		removeAll();
 		int maxWidth = this.getParent().getWidth();
-		int numColumns = maxWidth / FRAME_WIDTH;
+		int numColumns = maxWidth / Config.dimensions.frameWidth;
 		int curColumn = 0;
 		int curRow = 0;
 		if (cards.size() > 0) {
-			Rectangle rectangle = new Rectangle(FRAME_WIDTH, FRAME_HEIGHT);
+			Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
 			for (Card cardImg: cards) {
-				rectangle.setLocation(curColumn * FRAME_WIDTH, curRow * 20);
+				rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20);
 				cardImg.setBounds(rectangle);
 				add(cardImg);
 				moveToFront(cardImg);
diff --git a/Mage.Client/src/mage/client/cards/Cards.java b/Mage.Client/src/mage/client/cards/Cards.java
index 66727ed99a..cd3e04e18c 100644
--- a/Mage.Client/src/mage/client/cards/Cards.java
+++ b/Mage.Client/src/mage/client/cards/Cards.java
@@ -36,6 +36,7 @@ package mage.client.cards;
 
 import java.awt.Dimension;
 import java.util.UUID;
+import mage.client.util.Config;
 import mage.view.CardView;
 import mage.view.CardsView;
 import static mage.client.util.Constants.*;
@@ -49,17 +50,17 @@ public class Cards extends javax.swing.JPanel {
     /** Creates new form Cards */
     public Cards() {
         initComponents();
-		cardArea.setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
+		cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight));
     }
 
 	public void loadCards(CardsView cards, BigCard bigCard, UUID gameId) {
 		cardArea.removeAll();
 		for (CardView card: cards) {
-			Card cardImg = new Card(card, bigCard, gameId);
+			Card cardImg = new Card(card, bigCard, Config.dimensions, gameId);
 			cardArea.add(cardImg);
 			cardImg.update(card);
 		}
-		cardArea.setPreferredSize(new Dimension(cards.size() * FRAME_WIDTH, FRAME_HEIGHT));
+		cardArea.setPreferredSize(new Dimension(cards.size() * Config.dimensions.frameWidth, Config.dimensions.frameHeight));
 		cardArea.revalidate();
 		cardArea.repaint();
 		this.revalidate();
diff --git a/Mage.Client/src/mage/client/cards/CardsList.java b/Mage.Client/src/mage/client/cards/CardsList.java
index afd92c088b..28fe44b5cd 100644
--- a/Mage.Client/src/mage/client/cards/CardsList.java
+++ b/Mage.Client/src/mage/client/cards/CardsList.java
@@ -39,6 +39,7 @@ import java.awt.Rectangle;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.util.UUID;
+import mage.client.util.Config;
 import mage.client.util.Event;
 import mage.client.util.Listener;
 import mage.view.CardView;
@@ -56,23 +57,23 @@ public class CardsList extends javax.swing.JPanel implements MouseListener {
     /** Creates new form Cards */
     public CardsList() {
         initComponents();
-		cardArea.setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
+		cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight));
     }
 
 	public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) {
 		cardArea.removeAll();
 		if (showCards != null && showCards.size() > 0) {
-			Rectangle rectangle = new Rectangle(FRAME_WIDTH, FRAME_HEIGHT);
+			Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
 			int count = 0;
 			for (CardView card: showCards) {
-				Card cardImg = new Card(card, bigCard, gameId);
+				Card cardImg = new Card(card, bigCard, Config.dimensions, gameId);
 				cardImg.setBounds(rectangle);
 				cardArea.add(cardImg);
 				cardArea.moveToFront(cardImg);
 				cardImg.update(card);
 				cardImg.addMouseListener(this);
 				if (count >= 10) {
-					rectangle.translate(FRAME_WIDTH, -200);
+					rectangle.translate(Config.dimensions.frameWidth, -200);
 					count = 0;
 				} else {
 					rectangle.translate(0, 20);
@@ -80,7 +81,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener {
 				}
 			}
 		}
-		cardArea.setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT + 200));
+		cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight + 200));
 		cardArea.revalidate();
 		this.revalidate();
 		this.repaint();
@@ -122,6 +123,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener {
     private javax.swing.JScrollPane jScrollPane1;
     // End of variables declaration//GEN-END:variables
 
+	@Override
 	public void mouseClicked(MouseEvent e) {
 		if (e.getClickCount() == 2 && !e.isConsumed()) {
 			e.consume();
diff --git a/Mage.Client/src/mage/client/cards/Permanent.java b/Mage.Client/src/mage/client/cards/Permanent.java
index a2e1adf7ee..a1346875e4 100644
--- a/Mage.Client/src/mage/client/cards/Permanent.java
+++ b/Mage.Client/src/mage/client/cards/Permanent.java
@@ -46,8 +46,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import javax.swing.PopupFactory;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.StyledDocument;
 import mage.client.util.ImageHelper;
 import mage.view.CounterView;
 import mage.view.PermanentView;
@@ -63,14 +61,15 @@ public class Permanent extends Card {
 
 	protected List<Permanent> links = new ArrayList<Permanent>();
 	protected boolean linked;
-	protected BufferedImage tappedImage = new BufferedImage(FRAME_HEIGHT, FRAME_WIDTH, BufferedImage.TYPE_INT_RGB);
+	protected BufferedImage tappedImage;
 	protected BufferedImage flippedImage;
 
     /** Creates new form Permanent */
-	public Permanent(PermanentView permanent, BigCard bigCard, UUID gameId) {
-		super(permanent, bigCard, gameId);
+	public Permanent(PermanentView permanent, BigCard bigCard, CardDimensions dimensions, UUID gameId) {
+		super(permanent, bigCard, dimensions, gameId);
 		this.setSize(this.getPreferredSize());
 		this.permanent = permanent;
+		tappedImage = new BufferedImage(dimension.frameHeight, dimension.frameWidth, BufferedImage.TYPE_INT_RGB);
 	}
 
 	public UUID getPermanentId() {
@@ -154,10 +153,10 @@ public class Permanent extends Card {
 	      g2.setColor(Color.BLACK);
 	    }
 	    if (permanent.isTapped()) {
-	    	g2.drawRect(0, 0, FRAME_HEIGHT - 1, FRAME_WIDTH - 1);
+	    	g2.drawRect(0, 0, dimension.frameHeight - 1, dimension.frameWidth - 1);
 	    }
 	    else {
-	    	g2.drawRect(0, 0, FRAME_WIDTH - 1, FRAME_HEIGHT - 1);
+	    	g2.drawRect(0, 0, dimension.frameWidth - 1, dimension.frameHeight - 1);
 	    }
 
 	}
@@ -166,7 +165,7 @@ public class Permanent extends Card {
 		Graphics2D g = (Graphics2D) tappedImage.getGraphics();
 		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
-		g.drawImage(this.createImage(ImageHelper.rotate(small)), 0, 0, this);
+		g.drawImage(this.createImage(ImageHelper.rotate(small, dimension)), 0, 0, this);
 
 		g.dispose();
 	}
@@ -177,7 +176,7 @@ public class Permanent extends Card {
 		if (permanent.getDamage() > 0) {
 			Graphics2D g = image.createGraphics();
 			g.setColor(Color.RED);
-			g.drawString(Integer.toString(permanent.getDamage()), DAMAGE_MAX_LEFT, POWBOX_MAX_TOP + 15);
+			g.drawString(Integer.toString(permanent.getDamage()), DAMAGE_MAX_LEFT, POWBOX_TEXT_MAX_TOP);
 			g.dispose();
 		}
 		generateTappedImage();
@@ -186,10 +185,10 @@ public class Permanent extends Card {
 	@Override
 	public Dimension getPreferredSize() {
 	    if (permanent != null && permanent.isTapped()) {
-	    	return new Dimension(FRAME_HEIGHT, FRAME_WIDTH);
+	    	return new Dimension(dimension.frameHeight, dimension.frameWidth);
 	    }
 	    else {
-	    	return new Dimension(FRAME_WIDTH, FRAME_HEIGHT);
+	    	return new Dimension(dimension.frameWidth, dimension.frameHeight);
 	    }
 	}
 
@@ -207,7 +206,7 @@ public class Permanent extends Card {
 		if (popup != null)
 			popup.hide();
 		PopupFactory factory = PopupFactory.getSharedInstance();
-		int x = (int) this.getLocationOnScreen().getX() + (permanent.isTapped()?FRAME_HEIGHT:FRAME_WIDTH);
+		int x = (int) this.getLocationOnScreen().getX() + (permanent.isTapped()?dimension.frameHeight:dimension.frameWidth);
 		int y = (int) this.getLocationOnScreen().getY() + 40;
 		popup = factory.getPopup(this, popupText, x, y);
 		popup.show();
diff --git a/Mage.Client/src/mage/client/dialog/AboutDialog.form b/Mage.Client/src/mage/client/dialog/AboutDialog.form
index 37ee256666..97a9f75100 100644
--- a/Mage.Client/src/mage/client/dialog/AboutDialog.form
+++ b/Mage.Client/src/mage/client/dialog/AboutDialog.form
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+  <Properties>
+    <Property name="title" type="java.lang.String" value="About MAGE"/>
+  </Properties>
   <SyntheticProperties>
     <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
   </SyntheticProperties>
@@ -55,7 +58,7 @@
               <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
               <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="19" max="32767" attributes="0"/>
+              <EmptySpace pref="23" max="32767" attributes="0"/>
               <Component id="btnOk" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
diff --git a/Mage.Client/src/mage/client/dialog/AboutDialog.java b/Mage.Client/src/mage/client/dialog/AboutDialog.java
index c04aee5775..bb06f62082 100644
--- a/Mage.Client/src/mage/client/dialog/AboutDialog.java
+++ b/Mage.Client/src/mage/client/dialog/AboutDialog.java
@@ -48,6 +48,7 @@ public class AboutDialog extends MageDialog {
 
 	public void showDialog() {
 		this.lblVersion.setText(MageDialog.class.getPackage().getImplementationVersion());
+		this.setLocation(100, 100);
 		this.setVisible(true);
 	}
 
@@ -66,6 +67,8 @@ public class AboutDialog extends MageDialog {
         jLabel2 = new javax.swing.JLabel();
         jLabel3 = new javax.swing.JLabel();
 
+        setTitle("About MAGE");
+
         btnOk.setText("OK");
         btnOk.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -115,7 +118,7 @@ public class AboutDialog extends MageDialog {
                 .addComponent(jLabel2)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addComponent(jLabel3)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
                 .addComponent(btnOk)
                 .addContainerGap())
         );
diff --git a/Mage.Client/src/mage/client/dialog/CombatDialog.form b/Mage.Client/src/mage/client/dialog/CombatDialog.form
index 805769116d..d455016e3f 100644
--- a/Mage.Client/src/mage/client/dialog/CombatDialog.form
+++ b/Mage.Client/src/mage/client/dialog/CombatDialog.form
@@ -3,6 +3,7 @@
 <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
   <Properties>
     <Property name="resizable" type="boolean" value="true"/>
+    <Property name="title" type="java.lang.String" value="Combat"/>
     <Property name="normalBounds" type="java.awt.Rectangle" editor="org.netbeans.beaninfo.editors.RectangleEditor">
       <Rectangle value="[400, 200, 410, 307]"/>
     </Property>
diff --git a/Mage.Client/src/mage/client/dialog/CombatDialog.java b/Mage.Client/src/mage/client/dialog/CombatDialog.java
index a9824f2185..3bce5de71e 100644
--- a/Mage.Client/src/mage/client/dialog/CombatDialog.java
+++ b/Mage.Client/src/mage/client/dialog/CombatDialog.java
@@ -108,6 +108,7 @@ public class CombatDialog extends MageDialog {
         combatArea = new javax.swing.JPanel();
 
         setResizable(true);
+        setTitle("Combat");
         setNormalBounds(new java.awt.Rectangle(400, 200, 410, 307));
         setVisible(true);
         getContentPane().setLayout(new java.awt.BorderLayout());
diff --git a/Mage.Client/src/mage/client/dialog/ConnectDialog.form b/Mage.Client/src/mage/client/dialog/ConnectDialog.form
index 7352893398..dc85cea637 100644
--- a/Mage.Client/src/mage/client/dialog/ConnectDialog.form
+++ b/Mage.Client/src/mage/client/dialog/ConnectDialog.form
@@ -1,6 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+  <Properties>
+    <Property name="title" type="java.lang.String" value="Connect"/>
+    <Property name="normalBounds" type="java.awt.Rectangle" editor="org.netbeans.beaninfo.editors.RectangleEditor">
+      <Rectangle value="[100, 100, 410, 307]"/>
+    </Property>
+  </Properties>
   <SyntheticProperties>
     <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
   </SyntheticProperties>
@@ -22,12 +28,7 @@
           <Group type="102" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="1" attributes="0">
-                      <Component id="btnConnect" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="btnCancel" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="1" attributes="0">
+                  <Group type="102" attributes="0">
                       <Group type="103" groupAlignment="1" attributes="0">
                           <Component id="lblPort" alignment="1" min="-2" max="-2" attributes="0"/>
                           <Component id="lblServer" min="-2" max="-2" attributes="0"/>
@@ -39,10 +40,15 @@
                               <Component id="txtPort" min="-2" pref="71" max="-2" attributes="0"/>
                               <EmptySpace min="-2" pref="131" max="-2" attributes="0"/>
                           </Group>
-                          <Component id="txtServer" pref="268" max="32767" attributes="0"/>
-                          <Component id="txtUserName" alignment="0" pref="268" max="32767" attributes="0"/>
+                          <Component id="txtServer" pref="236" max="32767" attributes="0"/>
+                          <Component id="txtUserName" alignment="0" pref="236" max="32767" attributes="0"/>
                       </Group>
                   </Group>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="btnConnect" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="btnCancel" min="-2" max="-2" attributes="0"/>
+                  </Group>
               </Group>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
@@ -50,7 +56,7 @@
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" alignment="1" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="lblServer" alignment="3" min="-2" max="-2" attributes="0"/>
@@ -66,7 +72,7 @@
                   <Component id="txtUserName" min="-2" max="-2" attributes="0"/>
                   <Component id="lblUserName" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace pref="43" max="32767" attributes="0"/>
+              <EmptySpace pref="17" max="32767" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="btnCancel" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="btnConnect" alignment="3" min="-2" max="-2" attributes="0"/>
diff --git a/Mage.Client/src/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/mage/client/dialog/ConnectDialog.java
index cdc9dea368..f0fd39510c 100644
--- a/Mage.Client/src/mage/client/dialog/ConnectDialog.java
+++ b/Mage.Client/src/mage/client/dialog/ConnectDialog.java
@@ -67,6 +67,7 @@ public class ConnectDialog extends MageDialog {
 		this.txtPort.setText(prefs.get("serverPort", Integer.toString(Config.port)));
 		this.txtUserName.setText(prefs.get("userName", ""));
 		this.setModal(true);
+		this.setLocation(50, 50);
 		this.setVisible(true);
 	}
 	
@@ -88,6 +89,9 @@ public class ConnectDialog extends MageDialog {
         btnConnect = new javax.swing.JButton();
         btnCancel = new javax.swing.JButton();
 
+        setTitle("Connect");
+        setNormalBounds(new java.awt.Rectangle(100, 100, 410, 307));
+
         lblServer.setLabelFor(txtServer);
         lblServer.setText("Server:");
 
@@ -124,11 +128,7 @@ public class ConnectDialog extends MageDialog {
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
-                        .addComponent(btnConnect)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(btnCancel))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                    .addGroup(layout.createSequentialGroup()
                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                             .addComponent(lblPort)
                             .addComponent(lblServer)
@@ -138,13 +138,17 @@ public class ConnectDialog extends MageDialog {
                             .addGroup(layout.createSequentialGroup()
                                 .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
                                 .addGap(131, 131, 131))
-                            .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)
-                            .addComponent(txtUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE))))
+                            .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE)
+                            .addComponent(txtUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE)))
+                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                        .addComponent(btnConnect)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(btnCancel)))
                 .addContainerGap())
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+            .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(lblServer)
@@ -157,7 +161,7 @@ public class ConnectDialog extends MageDialog {
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(txtUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(lblUserName))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 17, Short.MAX_VALUE)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(btnCancel)
                     .addComponent(btnConnect))
diff --git a/Mage.Client/src/mage/client/dialog/ExileZoneDialog.java b/Mage.Client/src/mage/client/dialog/ExileZoneDialog.java
index 6526a57a69..bb793f21ae 100644
--- a/Mage.Client/src/mage/client/dialog/ExileZoneDialog.java
+++ b/Mage.Client/src/mage/client/dialog/ExileZoneDialog.java
@@ -61,11 +61,11 @@ public class ExileZoneDialog extends MageDialog {
 			cards.loadCards(exile, bigCard, gameId);
 			if (getParent() != MageFrame.getDesktop() || this.isClosed)
 				MageFrame.getDesktop().add(this, JLayeredPane.POPUP_LAYER);
-			try {
-				this.setIcon(false);
-			} catch (PropertyVetoException ex) {
-				Logger.getLogger(ShowCardsDialog.class.getName()).log(Level.SEVERE, null, ex);
-			}
+//			try {
+//				this.setIcon(false);
+//			} catch (PropertyVetoException ex) {
+//				Logger.getLogger(ShowCardsDialog.class.getName()).log(Level.SEVERE, null, ex);
+//			}
 		}
 		this.setVisible(exile.size() > 0);
 	}
diff --git a/Mage.Client/src/mage/client/dialog/JoinTableDialog.form b/Mage.Client/src/mage/client/dialog/JoinTableDialog.form
index 7a276799fd..70e8af4083 100644
--- a/Mage.Client/src/mage/client/dialog/JoinTableDialog.form
+++ b/Mage.Client/src/mage/client/dialog/JoinTableDialog.form
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+  <Properties>
+    <Property name="title" type="java.lang.String" value="Join Table"/>
+  </Properties>
   <SyntheticProperties>
     <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
   </SyntheticProperties>
@@ -33,7 +36,7 @@
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="1" attributes="0">
               <Component id="newPlayerPanel" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="22" max="32767" attributes="0"/>
+              <EmptySpace max="32767" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="btnCancel" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="btnOK" alignment="3" min="-2" max="-2" attributes="0"/>
@@ -60,7 +63,7 @@
         <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnOKActionPerformed"/>
       </Events>
     </Component>
-    <Component class="mage.client.NewPlayerPanel" name="newPlayerPanel">
+    <Component class="mage.client.table.NewPlayerPanel" name="newPlayerPanel">
     </Component>
   </SubComponents>
 </Form>
diff --git a/Mage.Client/src/mage/client/dialog/JoinTableDialog.java b/Mage.Client/src/mage/client/dialog/JoinTableDialog.java
index 85e3db7c77..031dbb764f 100644
--- a/Mage.Client/src/mage/client/dialog/JoinTableDialog.java
+++ b/Mage.Client/src/mage/client/dialog/JoinTableDialog.java
@@ -65,6 +65,7 @@ public class JoinTableDialog extends MageDialog {
 		this.roomId = roomId;
 		this.tableId = tableId;
 		this.setModal(true);
+		this.setLocation(100, 100);
 		this.setVisible(true);
 	}
 
@@ -80,7 +81,9 @@ public class JoinTableDialog extends MageDialog {
 
         btnCancel = new javax.swing.JButton();
         btnOK = new javax.swing.JButton();
-        newPlayerPanel = new mage.client.NewPlayerPanel();
+        newPlayerPanel = new mage.client.table.NewPlayerPanel();
+
+        setTitle("Join Table");
 
         btnCancel.setText("Cancel");
         btnCancel.addActionListener(new java.awt.event.ActionListener() {
@@ -112,7 +115,7 @@ public class JoinTableDialog extends MageDialog {
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                 .addComponent(newPlayerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 14, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(btnCancel)
                     .addComponent(btnOK))
@@ -153,7 +156,7 @@ public class JoinTableDialog extends MageDialog {
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btnCancel;
     private javax.swing.JButton btnOK;
-    private mage.client.NewPlayerPanel newPlayerPanel;
+    private mage.client.table.NewPlayerPanel newPlayerPanel;
     // End of variables declaration//GEN-END:variables
 
 }
diff --git a/Mage.Client/src/mage/client/dialog/MageDialog.form b/Mage.Client/src/mage/client/dialog/MageDialog.form
index ee50ddc2d7..871b94ca20 100644
--- a/Mage.Client/src/mage/client/dialog/MageDialog.form
+++ b/Mage.Client/src/mage/client/dialog/MageDialog.form
@@ -24,7 +24,7 @@
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
-          <EmptySpace min="0" pref="298" max="32767" attributes="0"/>
+          <EmptySpace min="0" pref="302" max="32767" attributes="0"/>
       </Group>
     </DimensionLayout>
   </Layout>
diff --git a/Mage.Client/src/mage/client/dialog/MageDialog.java b/Mage.Client/src/mage/client/dialog/MageDialog.java
index ea718e3c2c..b8e5933351 100644
--- a/Mage.Client/src/mage/client/dialog/MageDialog.java
+++ b/Mage.Client/src/mage/client/dialog/MageDialog.java
@@ -63,7 +63,6 @@ public class MageDialog extends javax.swing.JInternalFrame {
 
     @Override
     public void show() {
-		this.setLocation(200, 200);
         super.show();
         if (this.modal) {
             startModal();
diff --git a/Mage.Client/src/mage/client/dialog/NewTableDialog.form b/Mage.Client/src/mage/client/dialog/NewTableDialog.form
index 965376265a..2d483f7a68 100644
--- a/Mage.Client/src/mage/client/dialog/NewTableDialog.form
+++ b/Mage.Client/src/mage/client/dialog/NewTableDialog.form
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
 <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+  <Properties>
+    <Property name="title" type="java.lang.String" value="New Table"/>
+  </Properties>
   <SyntheticProperties>
     <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
   </SyntheticProperties>
@@ -19,42 +22,75 @@
   <Layout>
     <DimensionLayout dim="0">
       <Group type="103" groupAlignment="0" attributes="0">
-          <Group type="102" attributes="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace min="-2" pref="25" max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="1" attributes="0">
-                          <Component id="lblGameType" alignment="1" min="-2" max="-2" attributes="0"/>
-                          <Component id="lbDeckType" alignment="1" min="-2" max="-2" attributes="0"/>
-                      </Group>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
-                          <Component id="cbDeckType" alignment="0" max="32767" attributes="1"/>
-                          <Component id="cbGameType" alignment="0" min="-2" pref="241" max="-2" attributes="1"/>
-                      </Group>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="lbPlayer2Type" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace type="unrelated" max="-2" attributes="0"/>
-                      <Component id="cbPlayer2Type" min="-2" pref="241" max="-2" attributes="1"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="player1Panel" pref="468" max="32767" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="player2Panel" pref="468" max="32767" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="1" attributes="0">
-                      <EmptySpace pref="360" max="32767" attributes="0"/>
-                      <Component id="btnOK" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="btnCancel" min="-2" max="-2" attributes="0"/>
-                  </Group>
-              </Group>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace pref="358" max="32767" attributes="0"/>
+              <Component id="btnOK" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="btnCancel" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
+              <Component id="lbDeckType" min="-2" max="-2" attributes="0"/>
+              <EmptySpace pref="426" max="32767" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                  <Component id="cbGameType" alignment="0" max="32767" attributes="1"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="lblNumPlayers" min="-2" max="-2" attributes="0"/>
+                          <Component id="spnNumPlayers" min="-2" pref="90" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="lblRange" min="-2" max="-2" attributes="1"/>
+                          <Component id="cbRange" min="-2" pref="141" max="-2" attributes="1"/>
+                      </Group>
+                      <EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="lblAttack" min="-2" max="-2" attributes="0"/>
+                          <Component id="cbAttackOption" alignment="0" min="-2" pref="199" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Component id="lblGameType" alignment="0" min="-2" max="-2" attributes="0"/>
+                  <Component id="cbDeckType" alignment="0" max="32767" attributes="1"/>
+              </Group>
+              <EmptySpace max="32767" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="1" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jSeparator2" pref="466" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace pref="396" max="32767" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="player1Panel" pref="466" max="32767" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+              <EmptySpace pref="399" max="32767" attributes="0"/>
+          </Group>
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jSeparator1" pref="466" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+          <Component id="pnlOtherPlayers" alignment="0" min="-2" pref="486" max="-2" attributes="0"/>
+          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="jSeparator3" pref="466" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+              </Group>
           </Group>
       </Group>
     </DimensionLayout>
@@ -62,30 +98,56 @@
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="0" attributes="0">
               <EmptySpace max="-2" attributes="0"/>
-              <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="cbGameType" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="lblGameType" alignment="3" min="-2" max="-2" attributes="0"/>
-              </Group>
+              <Component id="lbDeckType" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+              <Component id="cbDeckType" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="lblGameType" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+              <Component id="cbGameType" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="cbDeckType" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="lbDeckType" alignment="3" min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="1" attributes="0">
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="lblAttack" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+                      <Component id="cbAttackOption" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" alignment="1" attributes="0">
+                      <Component id="lblNumPlayers" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+                      <Component id="spnNumPlayers" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <Group type="102" attributes="0">
+                      <Component id="lblRange" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+                      <Component id="cbRange" min="-2" max="-2" attributes="0"/>
+                  </Group>
               </Group>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
+              <Component id="jSeparator2" min="-2" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
+              <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
               <Component id="player1Panel" min="-2" max="-2" attributes="0"/>
-              <EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
-              <Group type="103" groupAlignment="3" attributes="0">
-                  <Component id="lbPlayer2Type" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="cbPlayer2Type" alignment="3" min="-2" max="-2" attributes="0"/>
-              </Group>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="pnlOtherPlayers" pref="83" max="32767" attributes="0"/>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="jSeparator1" pref="4" max="32767" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
-              <Component id="player2Panel" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="26" max="32767" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="btnCancel" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="btnOK" alignment="3" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
+          </Group>
+          <Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace min="-2" pref="223" max="-2" attributes="0"/>
+                  <Component id="jSeparator3" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace pref="149" max="32767" attributes="0"/>
+              </Group>
           </Group>
       </Group>
     </DimensionLayout>
@@ -93,28 +155,21 @@
   <SubComponents>
     <Component class="javax.swing.JLabel" name="lblGameType">
       <Properties>
-        <Property name="text" type="java.lang.String" value="Game Type:"/>
+        <Property name="text" type="java.lang.String" value="Game Type"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JComboBox" name="cbGameType">
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbGameTypeActionPerformed"/>
+      </Events>
     </Component>
     <Component class="javax.swing.JLabel" name="lbDeckType">
       <Properties>
-        <Property name="text" type="java.lang.String" value="Deck Type:"/>
+        <Property name="text" type="java.lang.String" value="Deck Type"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JComboBox" name="cbDeckType">
     </Component>
-    <Component class="javax.swing.JLabel" name="lbPlayer2Type">
-      <Properties>
-        <Property name="text" type="java.lang.String" value="Player 2 Type:"/>
-      </Properties>
-    </Component>
-    <Component class="javax.swing.JComboBox" name="cbPlayer2Type">
-      <Events>
-        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbPlayer2TypeActionPerformed"/>
-      </Events>
-    </Component>
     <Component class="javax.swing.JButton" name="btnOK">
       <Properties>
         <Property name="text" type="java.lang.String" value="OK"/>
@@ -131,9 +186,79 @@
         <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnCancelActionPerformed"/>
       </Events>
     </Component>
-    <Component class="mage.client.NewPlayerPanel" name="player2Panel">
+    <Component class="mage.client.table.NewPlayerPanel" name="player1Panel">
     </Component>
-    <Component class="mage.client.NewPlayerPanel" name="player1Panel">
+    <Component class="javax.swing.JSpinner" name="spnNumPlayers">
+      <Events>
+        <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="numPlayersChanged"/>
+      </Events>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblNumPlayers">
+      <Properties>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="spnNumPlayers"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Players"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cbRange">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblRange">
+      <Properties>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="cbRange"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Range of Influence"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblAttack">
+      <Properties>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="cbAttackOption"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Attack Option"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cbAttackOption">
+      <Properties>
+        <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+          <StringArray count="0"/>
+        </Property>
+      </Properties>
+    </Component>
+    <Container class="javax.swing.JPanel" name="pnlOtherPlayers">
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+        <Property name="columns" type="int" value="1"/>
+        <Property name="rows" type="int" value="0"/>
+      </Layout>
+    </Container>
+    <Component class="javax.swing.JSeparator" name="jSeparator1">
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator2">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel1">
+      <Properties>
+        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+          <Font name="Tahoma" size="11" style="1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Player 1 (You)"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JSeparator" name="jSeparator3">
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+          <Font name="Tahoma" size="11" style="1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Other Players"/>
+      </Properties>
     </Component>
   </SubComponents>
 </Form>
diff --git a/Mage.Client/src/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/mage/client/dialog/NewTableDialog.java
index 846b804a42..2f429acc14 100644
--- a/Mage.Client/src/mage/client/dialog/NewTableDialog.java
+++ b/Mage.Client/src/mage/client/dialog/NewTableDialog.java
@@ -34,6 +34,8 @@
 
 package mage.client.dialog;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
 import mage.client.*;
 import java.util.ArrayList;
 import java.util.List;
@@ -42,9 +44,16 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JOptionPane;
+import javax.swing.SpinnerNumberModel;
+import mage.Constants.MultiplayerAttackOption;
+import mage.Constants.RangeOfInfluence;
 import mage.cards.decks.DeckCardLists;
 import mage.client.remote.Session;
+import mage.client.table.TablePlayerPanel;
+import mage.client.util.Event;
+import mage.client.util.Listener;
 import mage.util.Logging;
+import mage.view.GameTypeView;
 import mage.view.TableView;
 
 /**
@@ -59,12 +68,11 @@ public class NewTableDialog extends MageDialog {
 	private UUID playerId;
 	private UUID roomId;
 	private Session session;
+	private List<TablePlayerPanel> players = new ArrayList<TablePlayerPanel>();
 	
     /** Creates new form NewTableDialog */
     public NewTableDialog() {
         initComponents();
-		this.player2Panel.setVisible(false);
-
     }
 
     /** This method is called from within the constructor to
@@ -80,25 +88,34 @@ public class NewTableDialog extends MageDialog {
         cbGameType = new javax.swing.JComboBox();
         lbDeckType = new javax.swing.JLabel();
         cbDeckType = new javax.swing.JComboBox();
-        lbPlayer2Type = new javax.swing.JLabel();
-        cbPlayer2Type = new javax.swing.JComboBox();
         btnOK = new javax.swing.JButton();
         btnCancel = new javax.swing.JButton();
-        player2Panel = new mage.client.NewPlayerPanel();
-        player1Panel = new mage.client.NewPlayerPanel();
+        player1Panel = new mage.client.table.NewPlayerPanel();
+        spnNumPlayers = new javax.swing.JSpinner();
+        lblNumPlayers = new javax.swing.JLabel();
+        cbRange = new javax.swing.JComboBox();
+        lblRange = new javax.swing.JLabel();
+        lblAttack = new javax.swing.JLabel();
+        cbAttackOption = new javax.swing.JComboBox();
+        pnlOtherPlayers = new javax.swing.JPanel();
+        jSeparator1 = new javax.swing.JSeparator();
+        jSeparator2 = new javax.swing.JSeparator();
+        jLabel1 = new javax.swing.JLabel();
+        jSeparator3 = new javax.swing.JSeparator();
+        jLabel2 = new javax.swing.JLabel();
 
-        lblGameType.setText("Game Type:");
+        setTitle("New Table");
 
-        lbDeckType.setText("Deck Type:");
+        lblGameType.setText("Game Type");
 
-        lbPlayer2Type.setText("Player 2 Type:");
-
-        cbPlayer2Type.addActionListener(new java.awt.event.ActionListener() {
+        cbGameType.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
-                cbPlayer2TypeActionPerformed(evt);
+                cbGameTypeActionPerformed(evt);
             }
         });
 
+        lbDeckType.setText("Deck Type");
+
         btnOK.setText("OK");
         btnOK.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
@@ -113,63 +130,136 @@ public class NewTableDialog extends MageDialog {
             }
         });
 
+        spnNumPlayers.addChangeListener(new javax.swing.event.ChangeListener() {
+            public void stateChanged(javax.swing.event.ChangeEvent evt) {
+                numPlayersChanged(evt);
+            }
+        });
+
+        lblNumPlayers.setLabelFor(spnNumPlayers);
+        lblNumPlayers.setText("Players");
+
+        lblRange.setLabelFor(cbRange);
+        lblRange.setText("Range of Influence");
+
+        lblAttack.setLabelFor(cbAttackOption);
+        lblAttack.setText("Attack Option");
+
+        pnlOtherPlayers.setLayout(new java.awt.GridLayout(0, 1));
+
+        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
+        jLabel1.setText("Player 1 (You)");
+
+        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11));
+        jLabel2.setText("Other Players");
+
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGroup(layout.createSequentialGroup()
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addGroup(layout.createSequentialGroup()
-                        .addGap(25, 25, 25)
-                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
-                            .addComponent(lblGameType)
-                            .addComponent(lbDeckType))
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                            .addComponent(cbDeckType, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                            .addComponent(cbGameType, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE)))
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addComponent(lbPlayer2Type)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                        .addComponent(cbPlayer2Type, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE))
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addComponent(player1Panel, javax.swing.GroupLayout.DEFAULT_SIZE, 468, Short.MAX_VALUE))
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addComponent(player2Panel, javax.swing.GroupLayout.DEFAULT_SIZE, 468, Short.MAX_VALUE))
-                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
-                        .addContainerGap(360, Short.MAX_VALUE)
-                        .addComponent(btnOK)
-                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                        .addComponent(btnCancel)))
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap(358, Short.MAX_VALUE)
+                .addComponent(btnOK)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(btnCancel)
                 .addContainerGap())
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(lbDeckType)
+                .addContainerGap(426, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                    .addComponent(cbGameType, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(lblNumPlayers)
+                            .addComponent(spnNumPlayers, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(18, 18, 18)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(lblRange)
+                            .addComponent(cbRange, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE))
+                        .addGap(18, 18, 18)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(lblAttack)
+                            .addComponent(cbAttackOption, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                    .addComponent(lblGameType)
+                    .addComponent(cbDeckType, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE)
+                .addContainerGap())
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jLabel1)
+                .addContainerGap(396, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(player1Panel, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE)
+                .addContainerGap())
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jLabel2)
+                .addContainerGap(399, Short.MAX_VALUE))
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE)
+                .addContainerGap())
+            .addComponent(pnlOtherPlayers, javax.swing.GroupLayout.PREFERRED_SIZE, 486, javax.swing.GroupLayout.PREFERRED_SIZE)
+            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                    .addContainerGap()
+                    .addComponent(jSeparator3, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE)
+                    .addContainerGap()))
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
                 .addContainerGap()
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbGameType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lblGameType))
+                .addComponent(lbDeckType)
+                .addGap(0, 0, 0)
+                .addComponent(cbDeckType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(cbDeckType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lbDeckType))
+                .addComponent(lblGameType)
+                .addGap(0, 0, 0)
+                .addComponent(cbGameType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblAttack)
+                        .addGap(0, 0, 0)
+                        .addComponent(cbAttackOption, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblNumPlayers)
+                        .addGap(0, 0, 0)
+                        .addComponent(spnNumPlayers, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblRange)
+                        .addGap(0, 0, 0)
+                        .addComponent(cbRange, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jLabel1)
+                .addGap(0, 0, 0)
                 .addComponent(player1Panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addGap(8, 8, 8)
-                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                    .addComponent(lbPlayer2Type)
-                    .addComponent(cbPlayer2Type, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(jLabel2)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(pnlOtherPlayers, javax.swing.GroupLayout.DEFAULT_SIZE, 83, Short.MAX_VALUE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 4, Short.MAX_VALUE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(player2Panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(btnCancel)
                     .addComponent(btnOK))
-                .addContainerGap())
+                .addGap(0, 0, 0))
+            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                .addGroup(layout.createSequentialGroup()
+                    .addGap(223, 223, 223)
+                    .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addContainerGap(149, Short.MAX_VALUE)))
         );
 
         pack();
@@ -181,45 +271,100 @@ public class NewTableDialog extends MageDialog {
 		this.setVisible(false);
 	}//GEN-LAST:event_btnCancelActionPerformed
 
-	private void cbPlayer2TypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbPlayer2TypeActionPerformed
-		if (!this.cbPlayer2Type.getSelectedItem().equals("Human")) {
-			this.player2Panel.setVisible(true);
+	private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed
+		GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem();
+		List<String> playerTypes = new ArrayList<String>();
+		playerTypes.add("Human");
+		for (TablePlayerPanel player: players) {
+			playerTypes.add(player.getPlayerType());
 		}
-		else {
-			this.player2Panel.setVisible(false);
+		table = session.createTable(
+				roomId,
+				gameType.getName(),
+				(String)this.cbDeckType.getSelectedItem(),
+				playerTypes,
+				(MultiplayerAttackOption)this.cbAttackOption.getSelectedItem(), 
+				(RangeOfInfluence)this.cbRange.getSelectedItem());
+		try {
+			if (session.joinTable(roomId, table.getTableId(), 0, this.player1Panel.getPlayerName(), DeckCardLists.load(this.player1Panel.getDeckFile()))) {
+				int seatNum = 1;
+				for (TablePlayerPanel player: players) {
+					if (!player.getPlayerType().equals("Human")) {
+						if (!player.joinTable(roomId, table.getTableId(), seatNum)) {
+							JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE);
+							session.removeTable(roomId, table.getTableId());
+							table = null;
+							return;
+						}
+					}
+					seatNum++;
+				}
+				this.setVisible(false);
+				return;
+			}
+		} catch (FileNotFoundException ex) {
+			handleError(ex);
+		} catch (IOException ex) {
+			handleError(ex);
+		} catch (ClassNotFoundException ex) {
+			handleError(ex);
+		}
+		JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE);
+		session.removeTable(roomId, table.getTableId());
+		table = null;
+	}//GEN-LAST:event_btnOKActionPerformed
+
+	private void cbGameTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbGameTypeActionPerformed
+		setGameOptions();
+	}//GEN-LAST:event_cbGameTypeActionPerformed
+
+	private void numPlayersChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_numPlayersChanged
+		int numPlayers = (Integer)this.spnNumPlayers.getValue() - 1;
+		createPlayers(numPlayers);
+	}//GEN-LAST:event_numPlayersChanged
+
+	private void setGameOptions() {
+		GameTypeView gameType = (GameTypeView) cbGameType.getSelectedItem();
+		this.spnNumPlayers.setModel(new SpinnerNumberModel(gameType.getMinPlayers(), gameType.getMinPlayers(), gameType.getMaxPlayers(), 1));
+		this.spnNumPlayers.setEnabled(gameType.getMinPlayers() != gameType.getMaxPlayers());
+		this.cbAttackOption.setEnabled(gameType.isUseAttackOption());
+		this.cbRange.setEnabled(gameType.isUseRange());
+		createPlayers(gameType.getMinPlayers() - 1);
+	}
+
+	private void createPlayers(int numPlayers) {
+		if (numPlayers > players.size()) {
+			while (players.size() != numPlayers) {
+				TablePlayerPanel playerPanel = new TablePlayerPanel();
+				playerPanel.init(players.size() + 2);
+				players.add(playerPanel);
+				playerPanel.addPlayerTypeEventListener(
+					new Listener<Event> () {
+						@Override
+						public void event(Event event) {
+							drawPlayers();
+						}
+					}
+				);
+			}
+		}
+		else if (numPlayers < players.size()) {
+			while (players.size() != numPlayers) {
+				players.remove(players.size() - 1);
+			}
+		}
+		drawPlayers();
+	}
+
+	private void drawPlayers() {
+		this.pnlOtherPlayers.removeAll();
+		for (TablePlayerPanel panel: players) {
+			this.pnlOtherPlayers.add(panel);
 		}
 		this.pack();
 		this.revalidate();
 		this.repaint();
-		
-	}//GEN-LAST:event_cbPlayer2TypeActionPerformed
-
-	private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed
-		try {
-			List<String> playerTypes = new ArrayList<String>();
-			playerTypes.add("Human");
-			playerTypes.add((String) this.cbPlayer2Type.getSelectedItem());
-			table = session.createTable(roomId,	(String)this.cbGameType.getSelectedItem(), (String)this.cbDeckType.getSelectedItem(), playerTypes);
-			if (session.joinTable(roomId, table.getTableId(), 0, this.player1Panel.getPlayerName(), DeckCardLists.load(this.player1Panel.getDeckFile()))) {
-				if (!this.cbPlayer2Type.getSelectedItem().equals("Human")) {
-					if (session.joinTable(roomId, table.getTableId(), 1, this.player2Panel.getPlayerName(), DeckCardLists.load(this.player2Panel.getDeckFile()))) {
-						this.setVisible(false);
-						return;
-					}
-					JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE);
-				}
-				else {
-					this.setVisible(false);
-					return;
-				}
-				JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Error joining table.", "Error", JOptionPane.ERROR_MESSAGE);
-			}
-		} catch (Exception ex) {
-			handleError(ex);
-		}
-		session.removeTable(roomId, table.getTableId());
-		table = null;
-	}//GEN-LAST:event_btnOKActionPerformed
+	}
 
 	private void handleError(Exception ex) {
 		logger.log(Level.SEVERE, "Error loading deck", ex);
@@ -229,14 +374,14 @@ public class NewTableDialog extends MageDialog {
 	public void showDialog(UUID roomId) {
 		session = MageFrame.getSession();
 		this.player1Panel.setPlayerName(session.getUserName());
-		cbGameType.setModel(new DefaultComboBoxModel(session.getGameTypes()));
+		cbGameType.setModel(new DefaultComboBoxModel(session.getGameTypes().toArray()));
 		cbDeckType.setModel(new DefaultComboBoxModel(session.getDeckTypes()));
-		cbPlayer2Type.setModel(new DefaultComboBoxModel(session.getPlayerTypes()));
+		cbRange.setModel(new DefaultComboBoxModel(RangeOfInfluence.values()));
+		cbAttackOption.setModel(new DefaultComboBoxModel(MultiplayerAttackOption.values()));
 		this.roomId = roomId;
 		this.setModal(true);
-		this.pack();
-		this.revalidate();
-		this.repaint();
+		setGameOptions();
+		this.setLocation(150, 100);
 		this.setVisible(true);
 	}
 
@@ -251,14 +396,23 @@ public class NewTableDialog extends MageDialog {
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btnCancel;
     private javax.swing.JButton btnOK;
+    private javax.swing.JComboBox cbAttackOption;
     private javax.swing.JComboBox cbDeckType;
     private javax.swing.JComboBox cbGameType;
-    private javax.swing.JComboBox cbPlayer2Type;
+    private javax.swing.JComboBox cbRange;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JSeparator jSeparator2;
+    private javax.swing.JSeparator jSeparator3;
     private javax.swing.JLabel lbDeckType;
-    private javax.swing.JLabel lbPlayer2Type;
+    private javax.swing.JLabel lblAttack;
     private javax.swing.JLabel lblGameType;
-    private mage.client.NewPlayerPanel player1Panel;
-    private mage.client.NewPlayerPanel player2Panel;
+    private javax.swing.JLabel lblNumPlayers;
+    private javax.swing.JLabel lblRange;
+    private mage.client.table.NewPlayerPanel player1Panel;
+    private javax.swing.JPanel pnlOtherPlayers;
+    private javax.swing.JSpinner spnNumPlayers;
     // End of variables declaration//GEN-END:variables
 
 }
diff --git a/Mage.Client/src/mage/client/dialog/ShowCardsDialog.java b/Mage.Client/src/mage/client/dialog/ShowCardsDialog.java
index 0ec4f18101..ffb20e8ead 100644
--- a/Mage.Client/src/mage/client/dialog/ShowCardsDialog.java
+++ b/Mage.Client/src/mage/client/dialog/ShowCardsDialog.java
@@ -43,6 +43,8 @@ import javax.swing.JLayeredPane;
 import mage.client.MageFrame;
 import mage.client.cards.BigCard;
 import mage.client.cards.Card;
+import mage.client.cards.CardDimensions;
+import mage.client.util.Config;
 import mage.view.CardView;
 import mage.view.CardsView;
 import static mage.client.util.Constants.*;
@@ -59,13 +61,13 @@ public class ShowCardsDialog extends MageDialog implements MouseListener {
 		this.setModal(false);
     }
 
-	public void loadCards(String name, CardsView showCards, BigCard bigCard, UUID gameId) {
+	public void loadCards(String name, CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId) {
 		this.title = name;
 		cardArea.removeAll();
 		if (showCards != null && showCards.size() < 10)
-			loadCardsFew(showCards, bigCard, gameId);
+			loadCardsFew(showCards, bigCard, dimension, gameId);
 		else
-			loadCardsMany(showCards, bigCard, gameId);
+			loadCardsMany(showCards, bigCard, dimension, gameId);
 		cardArea.revalidate();
 		if (getParent() != MageFrame.getDesktop() || this.isClosed)
 			MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER);
@@ -75,34 +77,34 @@ public class ShowCardsDialog extends MageDialog implements MouseListener {
 		this.setVisible(true);
 	}
 
-	private void loadCardsFew(CardsView showCards, BigCard bigCard, UUID gameId) {
-		Rectangle rectangle = new Rectangle(FRAME_WIDTH, FRAME_HEIGHT);
+	private void loadCardsFew(CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId) {
+		Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
 		for (CardView card: showCards) {
-			Card cardImg = new Card(card, bigCard, gameId);
+			Card cardImg = new Card(card, bigCard, dimension, gameId);
 			cardImg.setBounds(rectangle);
 			cardArea.add(cardImg);
 			cardArea.moveToFront(cardImg);
 			cardImg.update(card);
 			cardImg.addMouseListener(this);
-			rectangle.translate(FRAME_WIDTH, 0);
+			rectangle.translate(Config.dimensions.frameWidth, 0);
 		}
-		cardArea.setPreferredSize(new Dimension(FRAME_WIDTH * showCards.size(), FRAME_HEIGHT));
+		cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth * showCards.size(), Config.dimensions.frameHeight));
 	}
 
-	private void loadCardsMany(CardsView showCards, BigCard bigCard, UUID gameId) {
+	private void loadCardsMany(CardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId) {
 		int columns = 1;
 		if (showCards != null && showCards.size() > 0) {
-			Rectangle rectangle = new Rectangle(FRAME_WIDTH, FRAME_HEIGHT);
+			Rectangle rectangle = new Rectangle(Config.dimensions.frameWidth, Config.dimensions.frameHeight);
 			int count = 0;
 			for (CardView card: showCards) {
-				Card cardImg = new Card(card, bigCard, gameId);
+				Card cardImg = new Card(card, bigCard, dimension, gameId);
 				cardImg.setBounds(rectangle);
 				cardArea.add(cardImg);
 				cardArea.moveToFront(cardImg);
 				cardImg.update(card);
 				cardImg.addMouseListener(this);
 				if (count >= 20) {
-					rectangle.translate(FRAME_WIDTH, -400);
+					rectangle.translate(Config.dimensions.frameWidth, -400);
 					columns++;
 					count = 0;
 				} else {
@@ -111,7 +113,7 @@ public class ShowCardsDialog extends MageDialog implements MouseListener {
 				}
 			}
 		}
-		cardArea.setPreferredSize(new Dimension(FRAME_WIDTH * columns, FRAME_HEIGHT + 400));
+		cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth * columns, Config.dimensions.frameHeight + 400));
 	}
 
     /** This method is called from within the constructor to
diff --git a/Mage.Client/src/mage/client/dialog/TableWaitingDialog.form b/Mage.Client/src/mage/client/dialog/TableWaitingDialog.form
index e69d79a930..b2b9e434c8 100644
--- a/Mage.Client/src/mage/client/dialog/TableWaitingDialog.form
+++ b/Mage.Client/src/mage/client/dialog/TableWaitingDialog.form
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
-<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+<Form version="1.6" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
+  <Properties>
+    <Property name="title" type="java.lang.String" value="Waiting for players"/>
+  </Properties>
   <SyntheticProperties>
     <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
   </SyntheticProperties>
@@ -36,7 +39,7 @@
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" attributes="0">
-              <Component id="jSplitPane1" pref="231" max="32767" attributes="0"/>
+              <Component id="jSplitPane1" pref="247" max="32767" attributes="0"/>
               <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="btnMoveDown" alignment="3" min="-2" max="-2" attributes="0"/>
@@ -53,12 +56,20 @@
     <Component class="javax.swing.JButton" name="btnMoveUp">
       <Properties>
         <Property name="text" type="java.lang.String" value="Move Up"/>
+        <Property name="enabled" type="boolean" value="false"/>
       </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnMoveUpActionPerformed"/>
+      </Events>
     </Component>
     <Component class="javax.swing.JButton" name="btnMoveDown">
       <Properties>
         <Property name="text" type="java.lang.String" value="Move Down"/>
+        <Property name="enabled" type="boolean" value="false"/>
       </Properties>
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnMoveDownActionPerformed"/>
+      </Events>
     </Component>
     <Component class="javax.swing.JButton" name="btnCancel">
       <Properties>
@@ -71,6 +82,7 @@
     <Component class="javax.swing.JButton" name="btnStart">
       <Properties>
         <Property name="text" type="java.lang.String" value="Start"/>
+        <Property name="enabled" type="boolean" value="false"/>
       </Properties>
       <Events>
         <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnStartActionPerformed"/>
@@ -102,6 +114,9 @@
                 <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
                   <Connection code="tableWaitModel" type="code"/>
                 </Property>
+                <Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
+                  <JTableSelectionModel selectionMode="0"/>
+                </Property>
               </Properties>
             </Component>
           </SubComponents>
diff --git a/Mage.Client/src/mage/client/dialog/TableWaitingDialog.java b/Mage.Client/src/mage/client/dialog/TableWaitingDialog.java
index f39dc83c34..b1bed5811e 100644
--- a/Mage.Client/src/mage/client/dialog/TableWaitingDialog.java
+++ b/Mage.Client/src/mage/client/dialog/TableWaitingDialog.java
@@ -74,16 +74,23 @@ public class TableWaitingDialog extends MageDialog implements Observer {
 		tableSeats.createDefaultColumnsFromModel();
     }
 
+	@Override
 	public void update(Observable arg0, Object arg1) {
 		TableView table = session.getTable(roomId, tableId);
 		if (table != null) {
 			if (table.getTableState() == TableState.STARTING) {
 				this.btnStart.setEnabled(true);
+				this.btnMoveDown.setEnabled(true);
+				this.btnMoveUp.setEnabled(true);
 			} else {
 				this.btnStart.setEnabled(false);
+				this.btnMoveDown.setEnabled(false);
+				this.btnMoveUp.setEnabled(false);
 			}
+			int row = this.tableSeats.getSelectedRow();
 			tableWaitModel.loadData(table);
 			this.tableSeats.repaint();
+			this.tableSeats.getSelectionModel().setSelectionInterval(row, row);
 		}
 		else {
 			closeDialog();
@@ -108,6 +115,7 @@ public class TableWaitingDialog extends MageDialog implements Observer {
 			this.chatPanel.connect(chatId);
 			seatsWatchdog.addObserver(this);
 			this.setModal(true);
+			this.setLocation(100, 100);
 			this.setVisible(true);
 		}
 		else {
@@ -141,9 +149,23 @@ public class TableWaitingDialog extends MageDialog implements Observer {
         tableSeats = new javax.swing.JTable();
         chatPanel = new mage.client.chat.ChatPanel();
 
+        setTitle("Waiting for players");
+
         btnMoveUp.setText("Move Up");
+        btnMoveUp.setEnabled(false);
+        btnMoveUp.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                btnMoveUpActionPerformed(evt);
+            }
+        });
 
         btnMoveDown.setText("Move Down");
+        btnMoveDown.setEnabled(false);
+        btnMoveDown.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                btnMoveDownActionPerformed(evt);
+            }
+        });
 
         btnCancel.setText("Cancel");
         btnCancel.addActionListener(new java.awt.event.ActionListener() {
@@ -153,6 +175,7 @@ public class TableWaitingDialog extends MageDialog implements Observer {
         });
 
         btnStart.setText("Start");
+        btnStart.setEnabled(false);
         btnStart.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 btnStartActionPerformed(evt);
@@ -164,6 +187,7 @@ public class TableWaitingDialog extends MageDialog implements Observer {
         jSplitPane1.setResizeWeight(1.0);
 
         tableSeats.setModel(tableWaitModel);
+        tableSeats.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
         jScrollPane1.setViewportView(tableSeats);
 
         jSplitPane1.setLeftComponent(jScrollPane1);
@@ -188,7 +212,7 @@ public class TableWaitingDialog extends MageDialog implements Observer {
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
-                .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 223, Short.MAX_VALUE)
+                .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(btnMoveDown)
@@ -215,6 +239,23 @@ public class TableWaitingDialog extends MageDialog implements Observer {
 		closeDialog();
 	}//GEN-LAST:event_btnCancelActionPerformed
 
+	private void btnMoveDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoveDownActionPerformed
+		int row = this.tableSeats.getSelectedRow();
+		if (row < this.tableSeats.getRowCount() - 1) {
+			session.swapSeats(roomId, tableId, row, row + 1);
+			this.tableSeats.getSelectionModel().setSelectionInterval(row + 1, row + 1);
+		}
+
+	}//GEN-LAST:event_btnMoveDownActionPerformed
+
+	private void btnMoveUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoveUpActionPerformed
+		int row = this.tableSeats.getSelectedRow();
+		if (row > 0) {
+			session.swapSeats(roomId, tableId, row, row - 1);
+			this.tableSeats.getSelectionModel().setSelectionInterval(row - 1, row - 1);
+		}
+	}//GEN-LAST:event_btnMoveUpActionPerformed
+
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btnCancel;
@@ -233,7 +274,6 @@ class TableWaitModel extends AbstractTableModel {
     private String[] columnNames = new String[]{"Seat Num", "Player Id", "Name", "Player Type"};
 	private SeatView[] seats = new SeatView[0];
 
-
 	public void loadData(TableView table) {
 		seats = table.getSeats().toArray(new SeatView[0]);
 		this.fireTableDataChanged();
@@ -303,6 +343,7 @@ class SeatsWatchdog extends Observable implements ActionListener {
 		t.start();
 	}
 
+	@Override
 	public void actionPerformed(ActionEvent arg0) {
 		setChanged();
 		notifyObservers();
diff --git a/Mage.Client/src/mage/client/game/BattlefieldPanel.form b/Mage.Client/src/mage/client/game/BattlefieldPanel.form
index 40a01094ae..af4ec8bf37 100644
--- a/Mage.Client/src/mage/client/game/BattlefieldPanel.form
+++ b/Mage.Client/src/mage/client/game/BattlefieldPanel.form
@@ -11,7 +11,7 @@
     <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
     <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
     <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
-    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-68,0,0,1,-115"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-68,0,0,0,-105"/>
   </AuxValues>
 
   <Layout class="org.netbeans.modules.form.compat2.layouts.support.JLayeredPaneSupportLayout"/>
diff --git a/Mage.Client/src/mage/client/game/BattlefieldPanel.java b/Mage.Client/src/mage/client/game/BattlefieldPanel.java
index 6d5e898d93..f094197fd3 100644
--- a/Mage.Client/src/mage/client/game/BattlefieldPanel.java
+++ b/Mage.Client/src/mage/client/game/BattlefieldPanel.java
@@ -46,6 +46,7 @@ import java.util.Map.Entry;
 import java.util.UUID;
 import mage.client.cards.BigCard;
 import mage.client.cards.Permanent;
+import mage.client.util.Config;
 import mage.view.PermanentView;
 import static mage.client.util.Constants.*;
 
@@ -93,9 +94,9 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane implements Compon
 	}
 
 	private void addPermanent(PermanentView permanent) {
-		Permanent perm = new Permanent(permanent, bigCard, gameId);
+		Permanent perm = new Permanent(permanent, bigCard, Config.dimensions, gameId);
 		perm.addComponentListener(this);
-		perm.setBounds(findEmptySpace(new Dimension(FRAME_WIDTH, FRAME_HEIGHT)));
+		perm.setBounds(findEmptySpace(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight)));
 		permanents.put(permanent.getId(), perm);
 		this.add(perm);
 		moveToFront(perm);
@@ -162,8 +163,6 @@ public class BattlefieldPanel extends javax.swing.JLayeredPane implements Compon
     @SuppressWarnings("unchecked")
     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
     private void initComponents() {
-
-        setLayout(null);
     }// </editor-fold>//GEN-END:initComponents
 
 	@Override
diff --git a/Mage.Client/src/mage/client/game/CombatGroup.java b/Mage.Client/src/mage/client/game/CombatGroup.java
index da76b1fe7f..58f454237c 100644
--- a/Mage.Client/src/mage/client/game/CombatGroup.java
+++ b/Mage.Client/src/mage/client/game/CombatGroup.java
@@ -37,6 +37,7 @@ package mage.client.game;
 import java.awt.Dimension;
 import java.util.UUID;
 import mage.client.cards.BigCard;
+import mage.client.util.Config;
 import mage.view.CombatGroupView;
 import static mage.client.util.Constants.*;
 
@@ -63,9 +64,9 @@ public class CombatGroup extends javax.swing.JPanel {
 	public void update(CombatGroupView combatGroup) {
 		this.lblDefender.setText(combatGroup.getDefenderName());
 		this.attackers.loadCards(combatGroup.getAttackers(), bigCard, gameId);
-		attackers.setPreferredSize(new Dimension(FRAME_WIDTH + 6, FRAME_HEIGHT + 6));
+		attackers.setPreferredSize(new Dimension(Config.dimensions.frameWidth + 6, Config.dimensions.frameHeight + 6));
 		this.blockers.loadCards(combatGroup.getBlockers(), bigCard, gameId);
-		blockers.setPreferredSize(new Dimension(FRAME_WIDTH + 6, FRAME_HEIGHT + 6));
+		blockers.setPreferredSize(new Dimension(Config.dimensions.frameWidth + 6, Config.dimensions.frameHeight + 6));
 		this.attackers.setVisible(true);
 		this.blockers.setVisible(true);
 	}
diff --git a/Mage.Client/src/mage/client/game/GamePanel.form b/Mage.Client/src/mage/client/game/GamePanel.form
index c2d2f7744a..6ab5b9e4d2 100644
--- a/Mage.Client/src/mage/client/game/GamePanel.form
+++ b/Mage.Client/src/mage/client/game/GamePanel.form
@@ -394,6 +394,9 @@
                     <EtchetBorder/>
                   </Border>
                 </Property>
+                <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+                  <Connection code="new java.awt.Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight + 25)" type="code"/>
+                </Property>
               </Properties>
 
               <Layout>
@@ -410,15 +413,17 @@
               </Layout>
               <SubComponents>
                 <Component class="mage.client.cards.Cards" name="hand">
+                  <Properties>
+                    <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+                      <Connection code="new java.awt.Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight)" type="code"/>
+                    </Property>
+                  </Properties>
                 </Component>
               </SubComponents>
             </Container>
             <Container class="javax.swing.JPanel" name="pnlBattlefield">
 
-              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
-                <Property name="columns" type="int" value="1"/>
-                <Property name="rows" type="int" value="0"/>
-              </Layout>
+              <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
             </Container>
           </SubComponents>
         </Container>
diff --git a/Mage.Client/src/mage/client/game/GamePanel.java b/Mage.Client/src/mage/client/game/GamePanel.java
index f34b641432..ae9d756bf9 100644
--- a/Mage.Client/src/mage/client/game/GamePanel.java
+++ b/Mage.Client/src/mage/client/game/GamePanel.java
@@ -34,6 +34,7 @@
 
 package mage.client.game;
 
+import java.awt.GridBagConstraints;
 import java.util.logging.Level;
 import mage.client.*;
 import java.util.HashMap;
@@ -51,6 +52,7 @@ import mage.client.dialog.PickNumberDialog;
 import mage.client.dialog.ShowCardsDialog;
 import mage.client.game.FeedbackPanel.FeedbackMode;
 import mage.client.remote.Session;
+import mage.client.util.Config;
 import mage.util.Logging;
 import mage.view.AbilityPickerView;
 import mage.view.CardsView;
@@ -144,19 +146,60 @@ public class GamePanel extends javax.swing.JPanel {
 		combat.setLocation(500, 300);
 		this.players.clear();
 		this.pnlBattlefield.removeAll();
-		PlayAreaPanel sessionPlayer = null;
+		//arrange players in a circle with the session player at the bottom left
+		int numSeats = game.getPlayers().size();
+		int numColumns = (numSeats + 1) / 2;
+		boolean oddNumber = (numColumns > 1 && numSeats % 2 == 1);
+		int col = 0;
+		int row = 1;
+		int playerSeat = 0;
 		for (PlayerView player: game.getPlayers()) {
+			if (playerId.equals(player.getPlayerId()))
+				break;
+			playerSeat++;
+		}
+		PlayerView player = game.getPlayers().get(playerSeat);
+		PlayAreaPanel sessionPlayer = new PlayAreaPanel(player, bigCard, gameId);
+		players.put(player.getPlayerId(), sessionPlayer);
+		GridBagConstraints c = new GridBagConstraints();
+		c.fill = GridBagConstraints.BOTH;
+		c.weightx = 0.5;
+		c.weighty = 0.5;
+		if (oddNumber)
+			c.gridwidth = 2;
+		c.gridx = col;
+		c.gridy = row;
+		this.pnlBattlefield.add(sessionPlayer, c);
+		sessionPlayer.setVisible(true);
+		if (oddNumber)
+			col++;
+		int playerNum = playerSeat + 1;
+		while (true) {
+			if (row == 1)
+				col++;
+			else
+				col--;
+			if (col >= numColumns) {
+				row = 0;
+				col = numColumns - 1;
+			}
+			player = game.getPlayers().get(playerNum);
 			PlayAreaPanel playerPanel = new PlayAreaPanel(player, bigCard, gameId);
 			players.put(player.getPlayerId(), playerPanel);
-			if (playerId.equals(player.getPlayerId()))
-				sessionPlayer = playerPanel;
-			else
-				this.pnlBattlefield.add(playerPanel);
+			c = new GridBagConstraints();
+			c.fill = GridBagConstraints.BOTH;
+			c.weightx = 0.5;
+			c.weighty = 0.5;
+			c.gridx = col;
+			c.gridy = row;
+			this.pnlBattlefield.add(playerPanel, c);
 			playerPanel.setVisible(true);
+			playerNum++;
+			if (playerNum >= numSeats)
+				playerNum = 0;
+			if (playerNum == playerSeat)
+				break;
 		}
-		// add PlayAreaPanel that belongs to the client last so that is will appear at the bottom
-		if (sessionPlayer != null)
-			this.pnlBattlefield.add(sessionPlayer);
 		updateGame(game);
 	}
 
@@ -167,8 +210,12 @@ public class GamePanel extends javax.swing.JPanel {
 			this.hand.loadCards(game.getHand(), bigCard, gameId);
 		if (game.getPhase() != null)
 			this.txtPhase.setText(game.getPhase().toString());
+		else
+			this.txtPhase.setText("");
 		if (game.getStep() != null)
 			this.txtStep.setText(game.getStep().toString());
+		else
+			this.txtStep.setText("");
 		this.txtActivePlayer.setText(game.getActivePlayerName());
 		this.txtPriority.setText(game.getPriorityPlayerName());
 		this.txtTurn.setText(Integer.toString(game.getTurn()));
@@ -251,12 +298,12 @@ public class GamePanel extends javax.swing.JPanel {
 	public void revealCards(String name, CardsView cards) {
 		ShowCardsDialog showCards = new ShowCardsDialog();
 		MageFrame.getDesktop().add(showCards);
-		showCards.loadCards(name, cards, bigCard, gameId);
+		showCards.loadCards(name, cards, bigCard, Config.dimensions, gameId);
 	}
 
 	private void showCards(String title, CardsView cards) {
 		ShowCardsDialog showCards = new ShowCardsDialog();
-		showCards.loadCards(title, cards, bigCard, gameId);
+		showCards.loadCards(title, cards, bigCard, Config.dimensions, gameId);
 	}
 
 	public void getAmount(int min, int max) {
@@ -493,19 +540,22 @@ public class GamePanel extends javax.swing.JPanel {
         );
 
         pnlHand.setBorder(javax.swing.BorderFactory.createEtchedBorder());
+        pnlHand.setPreferredSize(new java.awt.Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight + 25));
+
+        hand.setPreferredSize(new java.awt.Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight));
 
         javax.swing.GroupLayout pnlHandLayout = new javax.swing.GroupLayout(pnlHand);
         pnlHand.setLayout(pnlHandLayout);
         pnlHandLayout.setHorizontalGroup(
             pnlHandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addComponent(hand, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 661, Short.MAX_VALUE)
+            .addComponent(hand, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 711, Short.MAX_VALUE)
         );
         pnlHandLayout.setVerticalGroup(
             pnlHandLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addComponent(hand, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
         );
 
-        pnlBattlefield.setLayout(new java.awt.GridLayout(0, 1));
+        pnlBattlefield.setLayout(new java.awt.GridBagLayout());
 
         javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
         jPanel3.setLayout(jPanel3Layout);
@@ -516,7 +566,7 @@ public class GamePanel extends javax.swing.JPanel {
                 .addGap(0, 0, 0)
                 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(pnlHand, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                    .addComponent(pnlBattlefield, javax.swing.GroupLayout.DEFAULT_SIZE, 665, Short.MAX_VALUE)))
+                    .addComponent(pnlBattlefield, javax.swing.GroupLayout.DEFAULT_SIZE, 715, Short.MAX_VALUE)))
         );
         jPanel3Layout.setVerticalGroup(
             jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
diff --git a/Mage.Client/src/mage/client/game/PlayAreaPanel.form b/Mage.Client/src/mage/client/game/PlayAreaPanel.form
index 7c38b0f3db..445030f17a 100644
--- a/Mage.Client/src/mage/client/game/PlayAreaPanel.form
+++ b/Mage.Client/src/mage/client/game/PlayAreaPanel.form
@@ -19,14 +19,14 @@
           <Group type="102" alignment="0" attributes="0">
               <Component id="jPanel1" min="-2" max="-2" attributes="0"/>
               <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
-              <Component id="jScrollPane1" pref="524" max="32767" attributes="0"/>
+              <Component id="jScrollPane1" pref="357" max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
           <Component id="jPanel1" alignment="0" max="32767" attributes="0"/>
-          <Component id="jScrollPane1" alignment="0" pref="302" max="32767" attributes="0"/>
+          <Component id="jScrollPane1" alignment="1" pref="252" max="32767" attributes="0"/>
       </Group>
     </DimensionLayout>
   </Layout>
@@ -53,7 +53,7 @@
                   <Component id="playerPanel" min="-2" max="-2" attributes="0"/>
                   <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
                   <Component id="manaPool" min="-2" max="-2" attributes="0"/>
-                  <EmptySpace pref="64" max="32767" attributes="0"/>
+                  <EmptySpace pref="14" max="32767" attributes="0"/>
               </Group>
           </Group>
         </DimensionLayout>
@@ -71,18 +71,7 @@
       <SubComponents>
         <Container class="mage.client.game.BattlefieldPanel" name="battlefieldPanel">
 
-          <Layout>
-            <DimensionLayout dim="0">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <EmptySpace min="0" pref="522" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-            <DimensionLayout dim="1">
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <EmptySpace min="0" pref="300" max="32767" attributes="0"/>
-              </Group>
-            </DimensionLayout>
-          </Layout>
+          <Layout class="org.netbeans.modules.form.compat2.layouts.support.JLayeredPaneSupportLayout"/>
         </Container>
       </SubComponents>
     </Container>
diff --git a/Mage.Client/src/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/mage/client/game/PlayAreaPanel.java
index ffc6db906a..8ed3b5c493 100644
--- a/Mage.Client/src/mage/client/game/PlayAreaPanel.java
+++ b/Mage.Client/src/mage/client/game/PlayAreaPanel.java
@@ -98,18 +98,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
                 .addComponent(playerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addGap(0, 0, 0)
                 .addComponent(manaPool, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap(64, Short.MAX_VALUE))
-        );
-
-        javax.swing.GroupLayout battlefieldPanelLayout = new javax.swing.GroupLayout(battlefieldPanel);
-        battlefieldPanel.setLayout(battlefieldPanelLayout);
-        battlefieldPanelLayout.setHorizontalGroup(
-            battlefieldPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 522, Short.MAX_VALUE)
-        );
-        battlefieldPanelLayout.setVerticalGroup(
-            battlefieldPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 300, Short.MAX_VALUE)
+                .addContainerGap(14, Short.MAX_VALUE))
         );
 
         jScrollPane1.setViewportView(battlefieldPanel);
@@ -121,12 +110,12 @@ public class PlayAreaPanel extends javax.swing.JPanel {
             .addGroup(layout.createSequentialGroup()
                 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addGap(0, 0, 0)
-                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 524, Short.MAX_VALUE))
+                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 357, Short.MAX_VALUE))
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)
+            .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
         );
     }// </editor-fold>//GEN-END:initComponents
 
diff --git a/Mage.Client/src/mage/client/game/PlayerPanel.java b/Mage.Client/src/mage/client/game/PlayerPanel.java
index 23aacef53d..5cccc37324 100644
--- a/Mage.Client/src/mage/client/game/PlayerPanel.java
+++ b/Mage.Client/src/mage/client/game/PlayerPanel.java
@@ -34,11 +34,13 @@
 
 package mage.client.game;
 
+import java.awt.Color;
 import java.util.UUID;
 import mage.client.MageFrame;
 import mage.client.cards.BigCard;
 import mage.client.dialog.ShowCardsDialog;
 import mage.client.remote.Session;
+import mage.client.util.Config;
 import mage.view.PlayerView;
 
 /**
@@ -74,6 +76,15 @@ public class PlayerPanel extends javax.swing.JPanel {
 		this.txtLibrary.setText(Integer.toString(player.getLibraryCount()));
 		this.btnGrave.setText(Integer.toString(player.getGraveyard().size()));
 		this.btnPlayerName.setText(player.getName());
+		if (player.isActive()) {
+			this.btnPlayerName.setBackground(Color.DARK_GRAY);
+		}
+		else if (player.hasLeft()) {
+			this.btnPlayerName.setBackground(Color.RED);
+		}
+		else {
+			this.btnPlayerName.setBackground(Color.LIGHT_GRAY);
+		}
 	}
 
     /** This method is called from within the constructor to
@@ -189,7 +200,7 @@ public class PlayerPanel extends javax.swing.JPanel {
 		if (graveyard == null) {
 			graveyard = new ShowCardsDialog();
 		}
-		graveyard.loadCards(player.getName() + " graveyard", player.getGraveyard(), bigCard, gameId);
+		graveyard.loadCards(player.getName() + " graveyard", player.getGraveyard(), bigCard, Config.dimensions, gameId);
 	}//GEN-LAST:event_btnGraveActionPerformed
 
 
diff --git a/Mage.Client/src/mage/client/remote/Session.java b/Mage.Client/src/mage/client/remote/Session.java
index fe9e6388b0..e292055669 100644
--- a/Mage.Client/src/mage/client/remote/Session.java
+++ b/Mage.Client/src/mage/client/remote/Session.java
@@ -40,6 +40,8 @@ import java.util.UUID;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.swing.JOptionPane;
+import mage.Constants.MultiplayerAttackOption;
+import mage.Constants.RangeOfInfluence;
 import mage.cards.decks.DeckCardLists;
 import mage.client.MageFrame;
 import mage.client.chat.ChatPanel;
@@ -50,6 +52,7 @@ import mage.interfaces.MageException;
 import mage.interfaces.Server;
 import mage.interfaces.callback.CallbackClientDaemon;
 import mage.util.Logging;
+import mage.view.GameTypeView;
 import mage.view.TableView;
 
 /**
@@ -66,7 +69,7 @@ public class Session {
 	private String userName;
 	private MageFrame frame;
 	private String[] playerTypes;
-	private String[] gameTypes;
+	private List<GameTypeView> gameTypes;
 	private String[] deckTypes;
 	private Map<UUID, ChatPanel> chats = new HashMap<UUID, ChatPanel>();
 	private GamePanel game;
@@ -127,7 +130,7 @@ public class Session {
 		return playerTypes;
 	}
 
-	public String[] getGameTypes() {
+	public List<GameTypeView> getGameTypes() {
 		return gameTypes;
 	}
 
@@ -373,9 +376,9 @@ public class Session {
 		return false;
 	}
 
-	public TableView createTable(UUID roomId, String gameType, String deckType, List<String> playerTypes) {
+	public TableView createTable(UUID roomId, String gameType, String deckType, List<String> playerTypes, MultiplayerAttackOption attackOption, RangeOfInfluence range) {
 		try {
-			return server.createTable(sessionId, roomId, gameType, deckType, playerTypes);
+			return server.createTable(sessionId, roomId, gameType, deckType, playerTypes, attackOption, range);
 		} catch (RemoteException ex) {
 			handleRemoteException(ex);
 		} catch (MageException ex) {
@@ -407,6 +410,18 @@ public class Session {
 		return false;
 	}
 
+	public boolean swapSeats(UUID roomId, UUID tableId, int seatNum1, int seatNum2) {
+		try {
+			server.swapSeats(sessionId, roomId, tableId, seatNum1, seatNum2);
+			return true;
+		} catch (RemoteException ex) {
+			handleRemoteException(ex);
+		} catch (MageException ex) {
+			handleMageException(ex);
+		}
+		return false;
+	}
+
 	public boolean leaveTable(UUID roomId, UUID tableId) {
 		try {
 			server.leaveTable(sessionId, roomId, tableId);
diff --git a/Mage.Client/src/mage/client/NewPlayerPanel.form b/Mage.Client/src/mage/client/table/NewPlayerPanel.form
similarity index 74%
rename from Mage.Client/src/mage/client/NewPlayerPanel.form
rename to Mage.Client/src/mage/client/table/NewPlayerPanel.form
index 995c12a22f..7f540a394e 100644
--- a/Mage.Client/src/mage/client/NewPlayerPanel.form
+++ b/Mage.Client/src/mage/client/table/NewPlayerPanel.form
@@ -18,56 +18,56 @@
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="0" attributes="0">
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Group type="102" attributes="0">
-                      <EmptySpace min="-2" pref="14" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
                       <Component id="lblPlayerDeck" min="-2" max="-2" attributes="0"/>
                   </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="lblPlayer2Name" min="-2" max="-2" attributes="0"/>
-                  </Group>
+                  <Component id="lblPlayerName" alignment="0" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="txtPlayerName" alignment="0" pref="314" max="32767" attributes="1"/>
-                  <Component id="txtPlayerDeck" alignment="0" pref="314" max="32767" attributes="1"/>
+                  <Component id="txtPlayerName" alignment="0" pref="405" max="32767" attributes="1"/>
+                  <Component id="txtPlayerDeck" alignment="0" pref="405" max="32767" attributes="1"/>
               </Group>
-              <EmptySpace max="-2" attributes="0"/>
+              <EmptySpace min="-2" max="-2" attributes="0"/>
               <Component id="btnPlayerDeck" min="-2" pref="24" max="-2" attributes="0"/>
-              <EmptySpace max="-2" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
     <DimensionLayout dim="1">
       <Group type="103" groupAlignment="0" attributes="0">
           <Group type="102" alignment="0" attributes="0">
-              <EmptySpace max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="txtPlayerName" alignment="3" min="-2" max="-2" attributes="0"/>
-                  <Component id="lblPlayer2Name" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lblPlayerName" alignment="3" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace max="-2" attributes="0"/>
+              <EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="3" attributes="0">
                   <Component id="lblPlayerDeck" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="txtPlayerDeck" alignment="3" min="-2" max="-2" attributes="0"/>
                   <Component id="btnPlayerDeck" alignment="3" min="-2" pref="19" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace max="32767" attributes="0"/>
           </Group>
       </Group>
     </DimensionLayout>
   </Layout>
   <SubComponents>
-    <Component class="javax.swing.JLabel" name="lblPlayer2Name">
+    <Component class="javax.swing.JLabel" name="lblPlayerName">
       <Properties>
-        <Property name="text" type="java.lang.String" value="Player Name:"/>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="txtPlayerName"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Name:"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JTextField" name="txtPlayerName">
     </Component>
     <Component class="javax.swing.JLabel" name="lblPlayerDeck">
       <Properties>
-        <Property name="text" type="java.lang.String" value="Player Deck:"/>
+        <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
+          <ComponentRef name="txtPlayerDeck"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Deck:"/>
       </Properties>
     </Component>
     <Component class="javax.swing.JTextField" name="txtPlayerDeck">
diff --git a/Mage.Client/src/mage/client/NewPlayerPanel.java b/Mage.Client/src/mage/client/table/NewPlayerPanel.java
similarity index 86%
rename from Mage.Client/src/mage/client/NewPlayerPanel.java
rename to Mage.Client/src/mage/client/table/NewPlayerPanel.java
index 20f162e559..119ff6f704 100644
--- a/Mage.Client/src/mage/client/NewPlayerPanel.java
+++ b/Mage.Client/src/mage/client/table/NewPlayerPanel.java
@@ -32,12 +32,10 @@
  * Created on 15-Dec-2009, 10:09:46 PM
  */
 
-package mage.client;
+package mage.client.table;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import java.util.prefs.Preferences;
 import javax.swing.JFileChooser;
 import javax.swing.filechooser.FileFilter;
@@ -89,14 +87,6 @@ public class NewPlayerPanel extends javax.swing.JPanel {
 		return this.txtPlayerDeck.getText();
 	}
 
-//	public void setPlayerName(String playerName) {
-//		this.txtPlayerName.setText(playerName);
-//	}
-//
-//	public void setDeckFile(String deckFile) {
-//		this.txtPlayerDeck.setText(deckFile);
-//	}
-
     /** This method is called from within the constructor to
      * initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is
@@ -106,15 +96,17 @@ public class NewPlayerPanel extends javax.swing.JPanel {
     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
     private void initComponents() {
 
-        lblPlayer2Name = new javax.swing.JLabel();
+        lblPlayerName = new javax.swing.JLabel();
         txtPlayerName = new javax.swing.JTextField();
         lblPlayerDeck = new javax.swing.JLabel();
         txtPlayerDeck = new javax.swing.JTextField();
         btnPlayerDeck = new javax.swing.JButton();
 
-        lblPlayer2Name.setText("Player Name:");
+        lblPlayerName.setLabelFor(txtPlayerName);
+        lblPlayerName.setText("Name:");
 
-        lblPlayerDeck.setText("Player Deck:");
+        lblPlayerDeck.setLabelFor(txtPlayerDeck);
+        lblPlayerDeck.setText("Deck:");
 
         btnPlayerDeck.setText("...");
         btnPlayerDeck.addActionListener(new java.awt.event.ActionListener() {
@@ -130,32 +122,27 @@ public class NewPlayerPanel extends javax.swing.JPanel {
             .addGroup(layout.createSequentialGroup()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(layout.createSequentialGroup()
-                        .addGap(14, 14, 14)
+                        .addGap(4, 4, 4)
                         .addComponent(lblPlayerDeck))
-                    .addGroup(layout.createSequentialGroup()
-                        .addContainerGap()
-                        .addComponent(lblPlayer2Name)))
+                    .addComponent(lblPlayerName))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                    .addComponent(txtPlayerName, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
-                    .addComponent(txtPlayerDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE))
+                    .addComponent(txtPlayerName, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
+                    .addComponent(txtPlayerDeck, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE))
                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                .addComponent(btnPlayerDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
-                .addContainerGap())
+                .addComponent(btnPlayerDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
         layout.setVerticalGroup(
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(layout.createSequentialGroup()
-                .addContainerGap()
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(txtPlayerName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(lblPlayer2Name))
-                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                    .addComponent(lblPlayerName))
+                .addGap(3, 3, 3)
                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                     .addComponent(lblPlayerDeck)
                     .addComponent(txtPlayerDeck, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                    .addComponent(btnPlayerDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE))
-                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                    .addComponent(btnPlayerDeck, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)))
         );
     }// </editor-fold>//GEN-END:initComponents
 
@@ -166,8 +153,8 @@ public class NewPlayerPanel extends javax.swing.JPanel {
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton btnPlayerDeck;
-    private javax.swing.JLabel lblPlayer2Name;
     private javax.swing.JLabel lblPlayerDeck;
+    private javax.swing.JLabel lblPlayerName;
     private javax.swing.JTextField txtPlayerDeck;
     private javax.swing.JTextField txtPlayerName;
     // End of variables declaration//GEN-END:variables
diff --git a/Mage.Client/src/mage/client/table/PlayerTypeEventSource.java b/Mage.Client/src/mage/client/table/PlayerTypeEventSource.java
new file mode 100644
index 0000000000..76361cc30c
--- /dev/null
+++ b/Mage.Client/src/mage/client/table/PlayerTypeEventSource.java
@@ -0,0 +1,61 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ * 
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ * 
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ * 
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ * 
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+
+package mage.client.table;
+
+import java.io.Serializable;
+import java.util.UUID;
+import mage.client.util.Event;
+import mage.client.util.EventDispatcher;
+import mage.client.util.EventSource;
+import mage.client.util.Listener;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class PlayerTypeEventSource implements EventSource<Event>, Serializable {
+
+	protected final EventDispatcher<Event> dispatcher = new EventDispatcher<Event>() {};
+
+	@Override
+	public void addListener(Listener<Event> listener) {
+		dispatcher.addListener(listener);
+	}
+
+	public void playerTypeChanged() {
+		dispatcher.fireEvent(new Event(null, "playerTypeChanged"));
+	}
+
+	@Override
+	public void clearListeners() {
+		dispatcher.clearListeners();
+	}
+
+}
+
diff --git a/Mage.Client/src/mage/client/table/TablePlayerPanel.form b/Mage.Client/src/mage/client/table/TablePlayerPanel.form
new file mode 100644
index 0000000000..a6d7e3602e
--- /dev/null
+++ b/Mage.Client/src/mage/client/table/TablePlayerPanel.form
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+  </AuxValues>
+
+  <Layout>
+    <DimensionLayout dim="0">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" alignment="0" attributes="0">
+              <EmptySpace max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Component id="lblPlayerNum" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="lbPlayerType" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="cbPlayerType" min="-2" pref="166" max="-2" attributes="1"/>
+                  </Group>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+              <Component id="newPlayerPanel" pref="318" max="32767" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+    <DimensionLayout dim="1">
+      <Group type="103" groupAlignment="0" attributes="0">
+          <Group type="102" attributes="0">
+              <Group type="103" groupAlignment="0" attributes="0">
+                  <Group type="102" alignment="0" attributes="0">
+                      <Component id="lblPlayerNum" min="-2" max="-2" attributes="0"/>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="3" attributes="0">
+                          <Component id="cbPlayerType" alignment="3" min="-2" max="-2" attributes="0"/>
+                          <Component id="lbPlayerType" alignment="3" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
+                  <Component id="newPlayerPanel" alignment="0" pref="43" max="32767" attributes="0"/>
+              </Group>
+              <EmptySpace max="-2" attributes="0"/>
+          </Group>
+      </Group>
+    </DimensionLayout>
+  </Layout>
+  <SubComponents>
+    <Component class="javax.swing.JLabel" name="lbPlayerType">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Type:"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JComboBox" name="cbPlayerType">
+      <Events>
+        <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cbPlayerTypeActionPerformed"/>
+      </Events>
+    </Component>
+    <Component class="mage.client.table.NewPlayerPanel" name="newPlayerPanel">
+    </Component>
+    <Component class="javax.swing.JLabel" name="lblPlayerNum">
+      <Properties>
+        <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
+          <Font name="Tahoma" size="11" style="1"/>
+        </Property>
+        <Property name="text" type="java.lang.String" value="Player #"/>
+      </Properties>
+    </Component>
+  </SubComponents>
+</Form>
diff --git a/Mage.Client/src/mage/client/table/TablePlayerPanel.java b/Mage.Client/src/mage/client/table/TablePlayerPanel.java
new file mode 100644
index 0000000000..83d74f6628
--- /dev/null
+++ b/Mage.Client/src/mage/client/table/TablePlayerPanel.java
@@ -0,0 +1,170 @@
+/*
+ *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ * 
+ *  Redistribution and use in source and binary forms, with or without modification, are
+ *  permitted provided that the following conditions are met:
+ * 
+ *     1. Redistributions of source code must retain the above copyright notice, this list of
+ *        conditions and the following disclaimer.
+ * 
+ *     2. Redistributions in binary form must reproduce the above copyright notice, this list
+ *        of conditions and the following disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ * 
+ *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ *  The views and conclusions contained in the software and documentation are those of the
+ *  authors and should not be interpreted as representing official policies, either expressed
+ *  or implied, of BetaSteward_at_googlemail.com.
+ */
+
+/*
+ * TablePlayerPanel.java
+ *
+ * Created on 9-May-2010, 11:43:03 AM
+ */
+
+package mage.client.table;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JOptionPane;
+import mage.cards.decks.DeckCardLists;
+import mage.client.MageFrame;
+import mage.client.remote.Session;
+import mage.client.util.Event;
+import mage.client.util.Listener;
+import mage.util.Logging;
+
+/**
+ *
+ * @author BetaSteward_at_googlemail.com
+ */
+public class TablePlayerPanel extends javax.swing.JPanel {
+
+	private final static Logger logger = Logging.getLogger(TablePlayerPanel.class.getName());
+
+	protected PlayerTypeEventSource playerTypeEventSource = new PlayerTypeEventSource();
+
+	private Session session;
+
+    /** Creates new form TablePlayerPanel */
+    public TablePlayerPanel() {
+        initComponents();
+		this.newPlayerPanel.setVisible(false);
+    }
+
+	public void init(int playerNum) {
+		session = MageFrame.getSession();
+		cbPlayerType.setModel(new DefaultComboBoxModel(session.getPlayerTypes()));
+		this.lblPlayerNum.setText("Player " + playerNum);
+	}
+
+	public boolean joinTable(UUID roomId, UUID tableId, int seatNum) throws FileNotFoundException, IOException, ClassNotFoundException {
+		if (!this.cbPlayerType.getSelectedItem().equals("Human")) {
+			return session.joinTable(roomId, tableId, seatNum, this.newPlayerPanel.getPlayerName(), DeckCardLists.load(this.newPlayerPanel.getDeckFile()));
+ 		}
+		return true;
+	}
+
+	public String getPlayerType() {
+		return (String) this.cbPlayerType.getSelectedItem();
+	}
+
+	public void addPlayerTypeEventListener(Listener<Event> listener) {
+		playerTypeEventSource.addListener(listener);
+	}
+
+	public void clearPlayerTypeEventListeners() {
+		playerTypeEventSource.clearListeners();
+	}
+
+
+    /** This method is called from within the constructor to
+     * initialize the form.
+     * WARNING: Do NOT modify this code. The content of this method is
+     * always regenerated by the Form Editor.
+     */
+    @SuppressWarnings("unchecked")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        lbPlayerType = new javax.swing.JLabel();
+        cbPlayerType = new javax.swing.JComboBox();
+        newPlayerPanel = new mage.client.table.NewPlayerPanel();
+        lblPlayerNum = new javax.swing.JLabel();
+
+        lbPlayerType.setText("Type:");
+
+        cbPlayerType.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                cbPlayerTypeActionPerformed(evt);
+            }
+        });
+
+        lblPlayerNum.setFont(new java.awt.Font("Tahoma", 1, 11));
+        lblPlayerNum.setText("Player #");
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(lblPlayerNum)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lbPlayerType)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(cbPlayerType, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(lblPlayerNum)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                            .addComponent(cbPlayerType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                            .addComponent(lbPlayerType)))
+                    .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 43, Short.MAX_VALUE))
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+	private void cbPlayerTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbPlayerTypeActionPerformed
+		if (!this.cbPlayerType.getSelectedItem().equals("Human")) {
+			this.newPlayerPanel.setVisible(true);
+		}
+		else {
+			this.newPlayerPanel.setVisible(false);
+		}
+		this.revalidate();
+		this.repaint();
+		this.playerTypeEventSource.playerTypeChanged();
+	}//GEN-LAST:event_cbPlayerTypeActionPerformed
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JComboBox cbPlayerType;
+    private javax.swing.JLabel lbPlayerType;
+    private javax.swing.JLabel lblPlayerNum;
+    private mage.client.table.NewPlayerPanel newPlayerPanel;
+    // End of variables declaration//GEN-END:variables
+
+}
diff --git a/Mage.Client/src/mage/client/TablesPane.form b/Mage.Client/src/mage/client/table/TablesPane.form
similarity index 95%
rename from Mage.Client/src/mage/client/TablesPane.form
rename to Mage.Client/src/mage/client/table/TablesPane.form
index 0eafeec3e8..1eb86b6ca3 100644
--- a/Mage.Client/src/mage/client/TablesPane.form
+++ b/Mage.Client/src/mage/client/table/TablesPane.form
@@ -29,7 +29,7 @@
     </DimensionLayout>
   </Layout>
   <SubComponents>
-    <Component class="mage.client.TablesPanel" name="tablesPanel">
+    <Component class="mage.client.table.TablesPanel" name="tablesPanel">
     </Component>
   </SubComponents>
-</Form>
+</Form>
\ No newline at end of file
diff --git a/Mage.Client/src/mage/client/TablesPane.java b/Mage.Client/src/mage/client/table/TablesPane.java
similarity index 94%
rename from Mage.Client/src/mage/client/TablesPane.java
rename to Mage.Client/src/mage/client/table/TablesPane.java
index c5f466e0f1..010fb427a3 100644
--- a/Mage.Client/src/mage/client/TablesPane.java
+++ b/Mage.Client/src/mage/client/table/TablesPane.java
@@ -32,9 +32,11 @@
  * Created on Dec 17, 2009, 9:21:42 AM
  */
 
-package mage.client;
+package mage.client.table;
 
 import java.util.UUID;
+import mage.client.MageFrame;
+import mage.client.MagePane;
 
 /**
  *
@@ -69,7 +71,7 @@ public class TablesPane extends MagePane {
     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
     private void initComponents() {
 
-        tablesPanel = new mage.client.TablesPanel();
+        tablesPanel = new mage.client.table.TablesPanel();
 
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
@@ -87,7 +89,7 @@ public class TablesPane extends MagePane {
 
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
-    private mage.client.TablesPanel tablesPanel;
+    private mage.client.table.TablesPanel tablesPanel;
     // End of variables declaration//GEN-END:variables
 
 }
diff --git a/Mage.Client/src/mage/client/TablesPanel.form b/Mage.Client/src/mage/client/table/TablesPanel.form
similarity index 100%
rename from Mage.Client/src/mage/client/TablesPanel.form
rename to Mage.Client/src/mage/client/table/TablesPanel.form
diff --git a/Mage.Client/src/mage/client/TablesPanel.java b/Mage.Client/src/mage/client/table/TablesPanel.java
similarity index 99%
rename from Mage.Client/src/mage/client/TablesPanel.java
rename to Mage.Client/src/mage/client/table/TablesPanel.java
index a3de1763bf..3c610bc2e3 100644
--- a/Mage.Client/src/mage/client/TablesPanel.java
+++ b/Mage.Client/src/mage/client/table/TablesPanel.java
@@ -32,7 +32,7 @@
  * Created on 15-Dec-2009, 10:54:01 PM
  */
 
-package mage.client;
+package mage.client.table;
 
 import mage.client.dialog.NewTableDialog;
 import mage.client.dialog.JoinTableDialog;
@@ -51,8 +51,8 @@ import javax.swing.Action;
 import javax.swing.JOptionPane;
 import javax.swing.Timer;
 import javax.swing.table.AbstractTableModel;
-import mage.Constants;
 import mage.cards.decks.DeckCardLists;
+import mage.client.MageFrame;
 import mage.client.remote.MageRemoteException;
 import mage.client.remote.Session;
 import mage.client.util.ButtonColumn;
@@ -260,7 +260,8 @@ public class TablesPanel extends javax.swing.JPanel implements Observer {
 					roomId,
 					"Two Player Duel",
 					"Constructed",
-					playerTypes
+					playerTypes,
+					null, null
 			);
 			session.joinTable(
 					roomId,
diff --git a/Mage.Client/src/mage/client/util/Config.java b/Mage.Client/src/mage/client/util/Config.java
index 5c59065db3..c5b48cc73c 100644
--- a/Mage.Client/src/mage/client/util/Config.java
+++ b/Mage.Client/src/mage/client/util/Config.java
@@ -34,6 +34,7 @@ import java.io.IOException;
 import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import mage.client.cards.CardDimensions;
 import mage.util.Logging;
 
 /**
@@ -53,7 +54,9 @@ public class Config {
 	public static final String cardArtResourcePath;
 	public static final String symbolsResourcePath;
 	public static final String resourcePath;
+	public static final double cardScalingFactor;
 	public static final boolean useResource;
+	public static final CardDimensions dimensions;
 
 	static {
 		Properties p = new Properties();
@@ -67,6 +70,8 @@ public class Config {
 		remoteServer = p.getProperty("remote-server");
 		cardsResourcePath = p.getProperty("cards-resource-path");
 		resourcePath = p.getProperty("resource-path");
+		cardScalingFactor = Double.valueOf(p.getProperty("card-scaling-factor"));
+		dimensions = new CardDimensions(cardScalingFactor);
 		File test = new File(cardsResourcePath);
 		if (test.isDirectory()) {
 			useResource = false;
diff --git a/Mage.Client/src/mage/client/util/Constants.java b/Mage.Client/src/mage/client/util/Constants.java
index 2d32aab0f3..23802fe72f 100644
--- a/Mage.Client/src/mage/client/util/Constants.java
+++ b/Mage.Client/src/mage/client/util/Constants.java
@@ -41,48 +41,50 @@ public final class Constants {
 	public static final int FRAME_MAX_WIDTH = 256;
 	public static final int ART_MAX_HEIGHT = 168;
 	public static final int ART_MAX_WIDTH = 227;
-	public static final int SYMBOL_MAX_HEIGHT = 28;
-	public static final int SYMBOL_MAX_WIDTH = 28;
+	public static final int SYMBOL_MAX_HEIGHT = 14;
+	public static final int SYMBOL_MAX_WIDTH = 14;
 	public static final int SYMBOL_MAX_XOFFSET = 27;
 	public static final int SYMBOL_MAX_YOFFSET = 15;
-	public static final int SYMBOL_MAX_SPACE = 28;
+	public static final int SYMBOL_MAX_SPACE = 14;
 	public static final int CONTENT_MAX_XOFFSET = 15;
 	public static final int ART_MAX_YOFFSET = 37;
-	public static final int NAME_MAX_YOFFSET = 27;
+	public static final int NAME_MAX_YOFFSET = 28;
 	public static final int TYPE_MAX_YOFFSET = 223;
 	public static final int TEXT_MAX_YOFFSET = 232;
 	public static final int TEXT_MAX_WIDTH = 227;
 	public static final int TEXT_MAX_HEIGHT = 105;
 	public static final int NAME_FONT_MAX_SIZE = 13;
 	public static final int TEXT_FONT_MAX_SIZE = 11;
-	public static final int PARAGRAPH_MAX_SPACING = 4;
+//	public static final int PARAGRAPH_MAX_SPACING = 4;
 	public static final int POWBOX_MAX_TOP = 336;
 	public static final int POWBOX_MAX_LEFT = 202;
+	public static final int POWBOX_TEXT_MAX_TOP = 352;
+	public static final int POWBOX_TEXT_MAX_LEFT = 212;
 	public static final int DAMAGE_MAX_LEFT = 180;
 
 	public static final double SCALE_FACTOR = 0.5;
 
-	public static final int FRAME_HEIGHT = (int)(FRAME_MAX_HEIGHT * SCALE_FACTOR);
-	public static final int FRAME_WIDTH = (int)(FRAME_MAX_WIDTH * SCALE_FACTOR);
-	public static final int ART_HEIGHT = (int)(ART_MAX_HEIGHT * SCALE_FACTOR);
-	public static final int ART_WIDTH = (int)(ART_MAX_WIDTH * SCALE_FACTOR);
-	public static final int SYMBOL_HEIGHT = (int)(SYMBOL_MAX_HEIGHT * SCALE_FACTOR);
-	public static final int SYMBOL_WIDTH = (int)(SYMBOL_MAX_WIDTH * SCALE_FACTOR);
-	public static final int SYMBOL_XOFFSET = (int)(SYMBOL_MAX_XOFFSET * SCALE_FACTOR);
-	public static final int SYMBOL_YOFFSET = (int)(SYMBOL_MAX_YOFFSET * SCALE_FACTOR);
-	public static final int SYMBOL_SPACE = (int)(SYMBOL_MAX_SPACE * SCALE_FACTOR);
-	public static final int CONTENT_XOFFSET = (int)(CONTENT_MAX_XOFFSET * SCALE_FACTOR);
-	public static final int ART_YOFFSET = (int)(ART_MAX_YOFFSET * SCALE_FACTOR);
-	public static final int NAME_YOFFSET = (int)(NAME_MAX_YOFFSET * SCALE_FACTOR);
-	public static final int TYPE_YOFFSET = (int)(TYPE_MAX_YOFFSET * SCALE_FACTOR);
-	public static final int TEXT_YOFFSET = (int)(TEXT_MAX_YOFFSET * SCALE_FACTOR);
-	public static final int TEXT_WIDTH = (int)(TEXT_MAX_WIDTH * SCALE_FACTOR);
-	public static final int TEXT_HEIGHT = (int)(TEXT_MAX_HEIGHT * SCALE_FACTOR);
-	public static final int POWBOX_TOP = (int)(POWBOX_MAX_TOP * SCALE_FACTOR);
-	public static final int POWBOX_LEFT = (int)(POWBOX_MAX_LEFT * SCALE_FACTOR);
-	public static final int DAMAGE_LEFT = (int)(DAMAGE_MAX_LEFT * SCALE_FACTOR);
-	public static final int NAME_FONT_SIZE = Math.max(9, (int)(NAME_FONT_MAX_SIZE * SCALE_FACTOR));
-	public static final int TEXT_FONT_SIZE = Math.max(9, (int)(TEXT_FONT_MAX_SIZE * SCALE_FACTOR));
-	public static final int PARAGRAPH_SPACING = (int)(PARAGRAPH_MAX_SPACING * SCALE_FACTOR);
+//	public static final int FRAME_HEIGHT = (int)(FRAME_MAX_HEIGHT * SCALE_FACTOR);
+//	public static final int FRAME_WIDTH = (int)(FRAME_MAX_WIDTH * SCALE_FACTOR);
+////	public static final int ART_HEIGHT = (int)(ART_MAX_HEIGHT * SCALE_FACTOR);
+////	public static final int ART_WIDTH = (int)(ART_MAX_WIDTH * SCALE_FACTOR);
+//	public static final int SYMBOL_HEIGHT = (int)(SYMBOL_MAX_HEIGHT * SCALE_FACTOR);
+//	public static final int SYMBOL_WIDTH = (int)(SYMBOL_MAX_WIDTH * SCALE_FACTOR);
+////	public static final int SYMBOL_XOFFSET = (int)(SYMBOL_MAX_XOFFSET * SCALE_FACTOR);
+////	public static final int SYMBOL_YOFFSET = (int)(SYMBOL_MAX_YOFFSET * SCALE_FACTOR);
+////	public static final int SYMBOL_SPACE = (int)(SYMBOL_MAX_SPACE * SCALE_FACTOR);
+//	public static final int CONTENT_XOFFSET = (int)(CONTENT_MAX_XOFFSET * SCALE_FACTOR);
+////	public static final int ART_YOFFSET = (int)(ART_MAX_YOFFSET * SCALE_FACTOR);
+//	public static final int NAME_YOFFSET = (int)(NAME_MAX_YOFFSET * SCALE_FACTOR);
+//	public static final int TYPE_YOFFSET = (int)(TYPE_MAX_YOFFSET * SCALE_FACTOR);
+//	public static final int TEXT_YOFFSET = (int)(TEXT_MAX_YOFFSET * SCALE_FACTOR);
+//	public static final int TEXT_WIDTH = (int)(TEXT_MAX_WIDTH * SCALE_FACTOR);
+//	public static final int TEXT_HEIGHT = (int)(TEXT_MAX_HEIGHT * SCALE_FACTOR);
+//	public static final int POWBOX_TEXT_TOP = (int)(POWBOX_TEXT_MAX_TOP * SCALE_FACTOR);
+//	public static final int POWBOX_TEXT_LEFT = (int)(POWBOX_TEXT_MAX_LEFT * SCALE_FACTOR);
+////	public static final int DAMAGE_LEFT = (int)(DAMAGE_MAX_LEFT * SCALE_FACTOR);
+//	public static final int NAME_FONT_SIZE = Math.max(9, (int)(NAME_FONT_MAX_SIZE * SCALE_FACTOR));
+////	public static final int TEXT_FONT_SIZE = Math.max(9, (int)(TEXT_FONT_MAX_SIZE * SCALE_FACTOR));
+////	public static final int PARAGRAPH_SPACING = (int)(PARAGRAPH_MAX_SPACING * SCALE_FACTOR);
 	
 }
diff --git a/Mage.Client/src/mage/client/util/ImageHelper.java b/Mage.Client/src/mage/client/util/ImageHelper.java
index 92ee8ec3dd..806e570182 100644
--- a/Mage.Client/src/mage/client/util/ImageHelper.java
+++ b/Mage.Client/src/mage/client/util/ImageHelper.java
@@ -41,6 +41,7 @@ import java.util.HashMap;
 import java.util.List;
 import javax.imageio.ImageIO;
 import mage.Constants.CardType;
+import mage.client.cards.CardDimensions;
 import mage.view.AbilityView;
 import mage.view.CardView;
 import mage.view.StackAbilityView;
@@ -202,23 +203,23 @@ public class ImageHelper {
 		return image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
 	}
 
-	public static MemoryImageSource rotate(Image image) {
-		int buffer[] = new int[FRAME_WIDTH * FRAME_HEIGHT];
-		int rotate[] = new int[FRAME_HEIGHT * FRAME_WIDTH];
-		PixelGrabber grabber = new PixelGrabber(image, 0, 0, FRAME_WIDTH, FRAME_HEIGHT, buffer, 0, FRAME_WIDTH);
+	public static MemoryImageSource rotate(Image image, CardDimensions dimensions) {
+		int buffer[] = new int[dimensions.frameWidth * dimensions.frameHeight];
+		int rotate[] = new int[dimensions.frameHeight * dimensions.frameWidth];
+		PixelGrabber grabber = new PixelGrabber(image, 0, 0, dimensions.frameWidth, dimensions.frameHeight, buffer, 0, dimensions.frameWidth);
 		try {
 			grabber.grabPixels();
 		}
 		catch(InterruptedException e) {
 			e.printStackTrace();
 		}
-		for(int y = 0; y < FRAME_HEIGHT; y++) {
-			for(int x = 0; x < FRAME_WIDTH; x++) {
-				rotate[((FRAME_WIDTH - x - 1) *FRAME_HEIGHT)+y] = buffer[(y*FRAME_WIDTH)+x];
+		for(int y = 0; y < dimensions.frameHeight; y++) {
+			for(int x = 0; x < dimensions.frameWidth; x++) {
+				rotate[((dimensions.frameWidth - x - 1) *dimensions.frameHeight)+y] = buffer[(y*dimensions.frameWidth)+x];
 			}
 		}
 
-		return new MemoryImageSource(FRAME_HEIGHT, FRAME_WIDTH, rotate, 0, FRAME_HEIGHT);
+		return new MemoryImageSource(dimensions.frameHeight, dimensions.frameWidth, rotate, 0, dimensions.frameHeight);
 
 	}
 
@@ -230,11 +231,11 @@ public class ImageHelper {
 				Image image = Symbols.getSymbol(symbol);
 				if (image != null) {
 					g.drawImage(image, costLeft, yOffset, o);
-					costLeft -= SYMBOL_SPACE;
+					costLeft -= SYMBOL_MAX_SPACE;
 				}
 				else {
-					g.drawString(symbol, costLeft, yOffset + SYMBOL_SPACE);
-					costLeft -= SYMBOL_SPACE + 4;
+					g.drawString(symbol, costLeft, yOffset + SYMBOL_MAX_SPACE);
+					costLeft -= SYMBOL_MAX_SPACE + 4;
 				}
 			}
 		}
diff --git a/Mage.Client/src/mage/client/util/Symbols.java b/Mage.Client/src/mage/client/util/Symbols.java
index 79024dfb9e..1d2b6268e2 100644
--- a/Mage.Client/src/mage/client/util/Symbols.java
+++ b/Mage.Client/src/mage/client/util/Symbols.java
@@ -42,47 +42,47 @@ public class Symbols {
 	public static Map<String, Image> symbols = new HashMap<String, Image>();
 
 	static {
-		symbols.put("{B}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_black.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{U}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_blue.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{G}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_green.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{R}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_red.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{W}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_white.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
+		symbols.put("{B}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_black.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{U}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_blue.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{G}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_green.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{R}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_red.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{W}", ImageHelper.loadImage(Config.symbolsResourcePath + "mana_white.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
 
-		symbols.put("{0}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_0.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{1}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_1.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{2}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_2.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{3}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_3.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{4}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_4.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{5}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_5.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{6}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_6.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{7}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_7.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{8}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_8.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{9}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_9.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{10}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_10.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{11}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_11.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{12}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_12.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{13}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_13.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{14}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_14.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{15}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_15.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{16}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_16.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{X}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_x.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
+		symbols.put("{0}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_0.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{1}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_1.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{2}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_2.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{3}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_3.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{4}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_4.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{5}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_5.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{6}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_6.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{7}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_7.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{8}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_8.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{9}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_9.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{10}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_10.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{11}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_11.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{12}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_12.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{13}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_13.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{14}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_14.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{15}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_15.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{16}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_16.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{X}", ImageHelper.loadImage(Config.symbolsResourcePath + "colorless_x.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
 
-		symbols.put("{B/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "black_green.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{B/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "black_red.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{U/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "blue_black.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{U/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "blue_red.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{G/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "green_blue.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{G/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "green_white.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{R/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "red_green.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{R/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "red_white.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{W/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "white_black.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{W/U}", ImageHelper.loadImage(Config.symbolsResourcePath + "white_blue.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
+		symbols.put("{B/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "black_green.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{B/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "black_red.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{U/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "blue_black.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{U/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "blue_red.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{G/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "green_blue.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{G/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "green_white.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{R/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "red_green.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{R/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "red_white.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{W/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "white_black.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{W/U}", ImageHelper.loadImage(Config.symbolsResourcePath + "white_blue.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
 
-		symbols.put("{2/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_black.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{2/U}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_blue.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{2/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_green.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{2/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_red.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
-		symbols.put("{2/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_white.png", SYMBOL_WIDTH, SYMBOL_HEIGHT));
+		symbols.put("{2/B}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_black.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{2/U}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_blue.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{2/G}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_green.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{2/R}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_red.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
+		symbols.put("{2/W}", ImageHelper.loadImage(Config.symbolsResourcePath + "two_white.png", SYMBOL_MAX_WIDTH, SYMBOL_MAX_HEIGHT));
 
 	}
 
diff --git a/Mage.Client/src/mage/client/util/resources/config.properties b/Mage.Client/src/mage/client/util/resources/config.properties
index 7c8e6bc7d4..b550d59982 100644
--- a/Mage.Client/src/mage/client/util/resources/config.properties
+++ b/Mage.Client/src/mage/client/util/resources/config.properties
@@ -3,4 +3,5 @@ port=17171
 remote-server=mage-server
 cards-resource-path=resources/images/cards/
 symbols-resource-path=resources/images/symbols/
-resource-path=resources/images/
\ No newline at end of file
+resource-path=resources/images/
+card-scaling-factor=0.4
\ No newline at end of file