diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.form b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.form
index f61cee7816..22eae59ae3 100644
--- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.form
+++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.form
@@ -34,7 +34,7 @@
       <Group type="103" groupAlignment="0" attributes="0">
           <Component id="jPanel1" alignment="0" max="32767" attributes="0"/>
           <Group type="102" alignment="1" attributes="0">
-              <Component id="draftPicks" pref="123" max="32767" attributes="0"/>
+              <Component id="draftPicks" pref="103" max="32767" attributes="0"/>
               <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
               <Component id="draftBooster" min="-2" max="-2" attributes="0"/>
           </Group>
@@ -55,12 +55,71 @@
         <DimensionLayout dim="0">
           <Group type="103" groupAlignment="0" attributes="0">
               <Component id="bigCard" min="-2" max="-2" attributes="0"/>
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Component id="lblCardNo" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <Group type="102" alignment="0" attributes="0">
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="1" max="-2" attributes="0">
+                      <Group type="102" alignment="0" attributes="1">
+                          <Component id="lblPack2" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="txtPack2" max="32767" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="lblPack1" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Component id="txtPack1" min="-2" pref="112" max="-2" attributes="0"/>
+                      </Group>
+                      <Group type="102" alignment="0" attributes="0">
+                          <Component id="lblPack3" min="-2" max="-2" attributes="0"/>
+                          <EmptySpace max="-2" attributes="0"/>
+                          <Group type="103" groupAlignment="0" attributes="0">
+                              <Component id="txtCardNo" alignment="0" pref="112" max="32767" attributes="0"/>
+                              <Component id="txtPack3" alignment="0" max="32767" attributes="0"/>
+                              <Component id="txtTimeRemaining" alignment="0" pref="112" max="32767" attributes="0"/>
+                          </Group>
+                      </Group>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="0" attributes="0">
+                      <Component id="chkPack3" min="-2" max="-2" attributes="0"/>
+                      <Component id="chkPack2" min="-2" max="-2" attributes="0"/>
+                      <Component id="chkPack1" alignment="0" min="-2" max="-2" attributes="0"/>
+                  </Group>
+              </Group>
           </Group>
         </DimensionLayout>
         <DimensionLayout dim="1">
           <Group type="103" groupAlignment="0" attributes="0">
               <Group type="102" alignment="1" attributes="0">
-                  <EmptySpace pref="186" max="32767" attributes="0"/>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="lblPack1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="txtPack1" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="chkPack1" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="lblPack2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="txtPack2" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="chkPack2" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="lblPack3" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="txtPack3" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="chkPack3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace max="-2" attributes="0"/>
+                  <Group type="103" groupAlignment="3" attributes="0">
+                      <Component id="lblCardNo" alignment="3" min="-2" max="-2" attributes="0"/>
+                      <Component id="txtCardNo" alignment="3" min="-2" max="-2" attributes="0"/>
+                  </Group>
+                  <EmptySpace type="separate" max="-2" attributes="0"/>
+                  <Component id="txtTimeRemaining" min="-2" max="-2" attributes="0"/>
+                  <EmptySpace pref="41" max="32767" attributes="0"/>
                   <Component id="bigCard" min="-2" max="-2" attributes="0"/>
               </Group>
           </Group>
@@ -69,6 +128,82 @@
       <SubComponents>
         <Component class="mage.client.cards.BigCard" name="bigCard">
         </Component>
+        <Component class="javax.swing.JLabel" name="lblCardNo">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Card #:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="lblPack1">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Pack 1:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="lblPack2">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Pack 2:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JLabel" name="lblPack3">
+          <Properties>
+            <Property name="text" type="java.lang.String" value="Pack 3:"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="txtPack1">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="txtPack1ActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JTextField" name="txtPack2">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+        </Component>
+        <Component class="javax.swing.JTextField" name="txtPack3">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="txtPack3ActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JTextField" name="txtCardNo">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="enabled" type="boolean" value="false"/>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="txtCardNoActionPerformed"/>
+          </Events>
+        </Component>
+        <Component class="javax.swing.JCheckBox" name="chkPack1">
+        </Component>
+        <Component class="javax.swing.JCheckBox" name="chkPack2">
+        </Component>
+        <Component class="javax.swing.JCheckBox" name="chkPack3">
+        </Component>
+        <Component class="javax.swing.JTextField" name="txtTimeRemaining">
+          <Properties>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
+              <Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/>
+            </Property>
+            <Property name="horizontalAlignment" type="int" value="0"/>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.BevelBorderInfo">
+                <BevelBorder/>
+              </Border>
+            </Property>
+          </Properties>
+          <Events>
+            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="txtTimeRemainingActionPerformed"/>
+          </Events>
+        </Component>
       </SubComponents>
     </Container>
     <Container class="mage.client.cards.DraftGrid" name="draftBooster">
@@ -88,7 +223,7 @@
         </DimensionLayout>
         <DimensionLayout dim="1">
           <Group type="103" groupAlignment="0" attributes="0">
-              <EmptySpace min="0" pref="432" max="32767" attributes="0"/>
+              <EmptySpace min="0" pref="452" max="32767" attributes="0"/>
           </Group>
         </DimensionLayout>
       </Layout>
diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java
index 394c1e4bdd..195b0aba35 100644
--- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java
+++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java
@@ -34,12 +34,16 @@
 
 package mage.client.draft;
 
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.UUID;
+import javax.swing.Timer;
 import mage.client.MageFrame;
 import mage.client.remote.Session;
 import mage.client.util.Event;
 import mage.client.util.Listener;
 import mage.view.DraftPickView;
+import mage.view.DraftView;
 
 /**
  *
@@ -49,11 +53,26 @@ public class DraftPanel extends javax.swing.JPanel {
 
 	private UUID draftId;
 	private Session session;
+	private Timer countdown;
+	private int timeout;
 	
     /** Creates new form DraftPanel */
     public DraftPanel() {
         initComponents();
-
+		countdown = new Timer(1000,
+			new ActionListener() {
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					if (--timeout > 0) {
+						setTimeout(Integer.toString(timeout));
+					}
+					else {
+						setTimeout("0");
+						countdown.stop();
+					}
+				}
+			}
+		);
     }
 
 	public synchronized void showDraft(UUID draftId) {
@@ -64,6 +83,16 @@ public class DraftPanel extends javax.swing.JPanel {
 			hideDraft();
 	}
 	
+	public void updateDraft(DraftView draftView) {		
+		this.txtPack1.setText(draftView.getSets().get(0));
+		this.txtPack2.setText(draftView.getSets().get(1));
+		this.txtPack3.setText(draftView.getSets().get(2));
+		this.chkPack1.setSelected(draftView.getBoosterNum() > 0);
+		this.chkPack2.setSelected(draftView.getBoosterNum() > 1);
+		this.chkPack3.setSelected(draftView.getBoosterNum() > 2);
+		this.txtCardNo.setText(Integer.toString(draftView.getCardNum()));
+	}
+
 	public void loadBooster(DraftPickView draftPickView) {
 		draftBooster.loadBooster(draftPickView.getBooster(), bigCard);
 		draftPicks.loadCards(draftPickView.getPicks(), bigCard, null);
@@ -73,11 +102,21 @@ public class DraftPanel extends javax.swing.JPanel {
 				@Override
 				public void event(Event event) {
 					if (event.getEventName().equals("pick-a-card")) {
+						countdown.stop();
 						session.sendCardPick(draftId, (UUID)event.getSource());
 					}
 				}
 			}
 		);
+		this.timeout = draftPickView.getTimeout();
+		setTimeout(Integer.toString(timeout));
+		if (timeout != 0) {
+			countdown.start();
+		}
+	}
+
+	private void setTimeout(String text) {
+		this.txtTimeRemaining.setText(text);
 	}
 
 	public void hideDraft() {
@@ -96,21 +135,125 @@ public class DraftPanel extends javax.swing.JPanel {
         jSeparator1 = new javax.swing.JSeparator();
         jPanel1 = new javax.swing.JPanel();
         bigCard = new mage.client.cards.BigCard();
+        lblCardNo = new javax.swing.JLabel();
+        lblPack1 = new javax.swing.JLabel();
+        lblPack2 = new javax.swing.JLabel();
+        lblPack3 = new javax.swing.JLabel();
+        txtPack1 = new javax.swing.JTextField();
+        txtPack2 = new javax.swing.JTextField();
+        txtPack3 = new javax.swing.JTextField();
+        txtCardNo = new javax.swing.JTextField();
+        chkPack1 = new javax.swing.JCheckBox();
+        chkPack2 = new javax.swing.JCheckBox();
+        chkPack3 = new javax.swing.JCheckBox();
+        txtTimeRemaining = new javax.swing.JTextField();
         draftBooster = new mage.client.cards.DraftGrid();
         draftPicks = new mage.client.cards.CardGrid();
 
         jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
 
+        lblCardNo.setText("Card #:");
+
+        lblPack1.setText("Pack 1:");
+
+        lblPack2.setText("Pack 2:");
+
+        lblPack3.setText("Pack 3:");
+
+        txtPack1.setEditable(false);
+        txtPack1.setEnabled(false);
+        txtPack1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                txtPack1ActionPerformed(evt);
+            }
+        });
+
+        txtPack2.setEditable(false);
+        txtPack2.setEnabled(false);
+
+        txtPack3.setEditable(false);
+        txtPack3.setEnabled(false);
+        txtPack3.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                txtPack3ActionPerformed(evt);
+            }
+        });
+
+        txtCardNo.setEditable(false);
+        txtCardNo.setEnabled(false);
+        txtCardNo.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                txtCardNoActionPerformed(evt);
+            }
+        });
+
+        txtTimeRemaining.setEditable(false);
+        txtTimeRemaining.setForeground(java.awt.Color.red);
+        txtTimeRemaining.setHorizontalAlignment(javax.swing.JTextField.CENTER);
+        txtTimeRemaining.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
+        txtTimeRemaining.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                txtTimeRemainingActionPerformed(evt);
+            }
+        });
+
         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
         jPanel1.setLayout(jPanel1Layout);
         jPanel1Layout.setHorizontalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(lblCardNo))
+            .addGroup(jPanel1Layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
+                        .addComponent(lblPack2)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(txtPack2))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
+                        .addComponent(lblPack1)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(txtPack1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE))
+                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
+                        .addComponent(lblPack3)
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(txtCardNo, javax.swing.GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE)
+                            .addComponent(txtPack3)
+                            .addComponent(txtTimeRemaining, javax.swing.GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE))))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(chkPack3)
+                    .addComponent(chkPack2)
+                    .addComponent(chkPack1)))
         );
         jPanel1Layout.setVerticalGroup(
             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
-                .addContainerGap(186, Short.MAX_VALUE)
+                .addContainerGap()
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblPack1)
+                    .addComponent(txtPack1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(chkPack1))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblPack2)
+                    .addComponent(txtPack2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(chkPack2))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblPack3)
+                    .addComponent(txtPack3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(chkPack3))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(lblCardNo)
+                    .addComponent(txtCardNo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+                .addGap(18, 18, 18)
+                .addComponent(txtTimeRemaining, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                 .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
 
@@ -124,7 +267,7 @@ public class DraftPanel extends javax.swing.JPanel {
         );
         draftBoosterLayout.setVerticalGroup(
             draftBoosterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-            .addGap(0, 432, Short.MAX_VALUE)
+            .addGap(0, 452, Short.MAX_VALUE)
         );
 
         draftPicks.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
@@ -144,19 +287,47 @@ public class DraftPanel extends javax.swing.JPanel {
             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
-                .addComponent(draftPicks, javax.swing.GroupLayout.DEFAULT_SIZE, 123, Short.MAX_VALUE)
+                .addComponent(draftPicks, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)
                 .addGap(0, 0, 0)
                 .addComponent(draftBooster, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
         );
     }// </editor-fold>//GEN-END:initComponents
 
+	private void txtPack1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPack1ActionPerformed
+		// TODO add your handling code here:
+	}//GEN-LAST:event_txtPack1ActionPerformed
+
+	private void txtPack3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPack3ActionPerformed
+		// TODO add your handling code here:
+	}//GEN-LAST:event_txtPack3ActionPerformed
+
+	private void txtCardNoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCardNoActionPerformed
+		// TODO add your handling code here:
+	}//GEN-LAST:event_txtCardNoActionPerformed
+
+	private void txtTimeRemainingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtTimeRemainingActionPerformed
+		// TODO add your handling code here:
+	}//GEN-LAST:event_txtTimeRemainingActionPerformed
+
 
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private mage.client.cards.BigCard bigCard;
+    private javax.swing.JCheckBox chkPack1;
+    private javax.swing.JCheckBox chkPack2;
+    private javax.swing.JCheckBox chkPack3;
     private mage.client.cards.DraftGrid draftBooster;
     private mage.client.cards.CardGrid draftPicks;
     private javax.swing.JPanel jPanel1;
     private javax.swing.JSeparator jSeparator1;
+    private javax.swing.JLabel lblCardNo;
+    private javax.swing.JLabel lblPack1;
+    private javax.swing.JLabel lblPack2;
+    private javax.swing.JLabel lblPack3;
+    private javax.swing.JTextField txtCardNo;
+    private javax.swing.JTextField txtPack1;
+    private javax.swing.JTextField txtPack2;
+    private javax.swing.JTextField txtPack3;
+    private javax.swing.JTextField txtTimeRemaining;
     // End of variables declaration//GEN-END:variables
 
 }
diff --git a/Mage.Client/src/main/java/mage/client/remote/Client.java b/Mage.Client/src/main/java/mage/client/remote/Client.java
index 88ffa2bf7f..477fb7f6fe 100644
--- a/Mage.Client/src/main/java/mage/client/remote/Client.java
+++ b/Mage.Client/src/main/java/mage/client/remote/Client.java
@@ -45,6 +45,7 @@ import mage.util.Logging;
 import mage.view.AbilityPickerView;
 import mage.view.ChatMessage;
 import mage.view.DraftClientMessage;
+import mage.view.DraftView;
 import mage.view.GameClientMessage;
 import mage.view.GameView;
 import mage.view.TableClientMessage;
@@ -174,6 +175,9 @@ public class Client implements CallbackClient {
 				DraftClientMessage message = (DraftClientMessage) callback.getData();
 				session.getDraft().loadBooster(message.getDraftPickView());
 			}
+			else if (callback.getMethod().equals("draftUpdate")) {
+				session.getDraft().updateDraft((DraftView) callback.getData());
+			}
 			else if (callback.getMethod().equals("draftInform")) {
 				if (callback.getMessageId() > messageId) {
 					DraftClientMessage message = (DraftClientMessage) callback.getData();
diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
index 9516d6089a..4b1cf4945c 100644
--- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
+++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java
@@ -322,6 +322,7 @@ public class TablesPanel extends javax.swing.JPanel implements Observer {
 	private void btnNewDraftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNewDraftActionPerformed
 		DraftOptions options = new DraftOptions("testDraft");
 		options.setDraftType("8 Player Booster");
+		options.setTiming(DraftOptions.TimingOption.REGULAR);
 		options.getPlayerTypes().add("Human");
 		options.getPlayerTypes().add("Computer - default");
 		options.getPlayerTypes().add("Computer - default");
diff --git a/Mage.Common/src/mage/view/DraftPickView.java b/Mage.Common/src/mage/view/DraftPickView.java
index 5020154ddd..3b37e761dc 100644
--- a/Mage.Common/src/mage/view/DraftPickView.java
+++ b/Mage.Common/src/mage/view/DraftPickView.java
@@ -39,10 +39,12 @@ public class DraftPickView implements Serializable {
 
 	protected CardsView booster;
 	protected CardsView picks;
+	protected int timeout;
 
-	public DraftPickView(DraftPlayer player) {
+	public DraftPickView(DraftPlayer player, int timeout) {
 		this.booster = new CardsView(player.getBooster());
 		this.picks = new CardsView(player.getDeck().getSideboard());
+		this.timeout = timeout;
 	}
 
 	public CardsView getBooster() {
@@ -52,4 +54,8 @@ public class DraftPickView implements Serializable {
 	public CardsView getPicks() {
 		return picks;
 	}
+
+	public int getTimeout() {
+		return timeout;
+	}
 }
diff --git a/Mage.Common/src/mage/view/DraftView.java b/Mage.Common/src/mage/view/DraftView.java
index 4d5ee79ea5..adfbac3619 100644
--- a/Mage.Common/src/mage/view/DraftView.java
+++ b/Mage.Common/src/mage/view/DraftView.java
@@ -31,6 +31,7 @@ package mage.view;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import mage.cards.ExpansionSet;
 import mage.game.draft.Draft;
 
 /**
@@ -39,11 +40,27 @@ import mage.game.draft.Draft;
  */
 public class DraftView implements Serializable {
 
-	private List<TournamentPlayerView> players = new ArrayList<TournamentPlayerView>();
+	private List<String> sets = new ArrayList<String>();
+	private int boosterNum;
+	private int cardNum;
 
 	public DraftView(Draft draft) {
-
+		for (ExpansionSet set: draft.getSets()) {
+			sets.add(set.getName());
+		}
+		this.boosterNum = draft.getBoosterNum();
+		this.cardNum = draft.getCardNum();
 	}
 
+	public List<String> getSets() {
+		return sets;
+	}
 
+	public int getBoosterNum() {
+		return boosterNum;
+	}
+
+	public int getCardNum() {
+		return cardNum;
+	}
 }
diff --git a/Mage.Server/src/main/java/mage/server/game/DraftController.java b/Mage.Server/src/main/java/mage/server/game/DraftController.java
index d4ad64c301..0c8a177c2c 100644
--- a/Mage.Server/src/main/java/mage/server/game/DraftController.java
+++ b/Mage.Server/src/main/java/mage/server/game/DraftController.java
@@ -108,7 +108,7 @@ public class DraftController {
 
 	public void join(UUID sessionId) {
 		UUID playerId = sessionPlayerMap.get(sessionId);
-		DraftSession draftSession = new DraftSession(sessionId, draft.getId());
+		DraftSession draftSession = new DraftSession(draft, sessionId, playerId);
 		draftSessions.put(playerId, draftSession);
 		logger.info("player " + playerId + " has joined draft " + draft.getId());
 		ChatManager.getInstance().broadcast(chatId, "", draft.getPlayer(playerId).getPlayer().getName() + " has joined the draft", MessageColor.BLACK);
@@ -183,7 +183,7 @@ public class DraftController {
 	}
 
 	public void sendCardPick(UUID sessionId, UUID cardId) {
-		draft.addPick(sessionPlayerMap.get(sessionId), cardId);
+		draftSessions.get(sessionPlayerMap.get(sessionId)).sendCardPick(cardId);
 	}
 
 	private synchronized void updateDraft() {
@@ -194,15 +194,15 @@ public class DraftController {
 
 	private synchronized void pickCard(UUID playerId, int timeout) {
 		if (draftSessions.containsKey(playerId))
-			draftSessions.get(playerId).pickCard(getDraftPickView(playerId), timeout);
+			draftSessions.get(playerId).pickCard(getDraftPickView(playerId, timeout), timeout);
 	}
 
 	private DraftView getDraftView() {
 		return new DraftView(draft);
 	}
 
-	private DraftPickView getDraftPickView(UUID playerId) {
-		return new DraftPickView(draft.getPlayer(playerId));
+	private DraftPickView getDraftPickView(UUID playerId, int timeout) {
+		return new DraftPickView(draft.getPlayer(playerId), timeout);
 	}
 
 }
diff --git a/Mage.Server/src/main/java/mage/server/game/DraftSession.java b/Mage.Server/src/main/java/mage/server/game/DraftSession.java
index 385109b5fa..c8f5820ef4 100644
--- a/Mage.Server/src/main/java/mage/server/game/DraftSession.java
+++ b/Mage.Server/src/main/java/mage/server/game/DraftSession.java
@@ -35,6 +35,7 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import mage.game.draft.Draft;
 import mage.interfaces.callback.ClientCallback;
 import mage.server.Session;
 import mage.server.SessionManager;
@@ -54,15 +55,17 @@ public class DraftSession {
 	protected final static Logger logger = Logging.getLogger(GameWatcher.class.getName());
 
 	protected UUID sessionId;
-	protected UUID draftId;
+	protected UUID playerId;
+	protected Draft draft;
 	protected boolean killed = false;
 
 	private ScheduledFuture<?> futureTimeout;
 	protected static ScheduledExecutorService timeoutExecutor = ThreadExecutor.getInstance().getTimeoutExecutor();
 
-	public DraftSession(UUID sessionId, UUID draftId) {
+	public DraftSession(Draft draft, UUID sessionId, UUID playerId) {
 		this.sessionId = sessionId;
-		this.draftId = draftId;
+		this.draft = draft;
+		this.playerId = playerId;
 	}
 
 	public boolean init(final DraftView draftView) {
@@ -121,15 +124,17 @@ public class DraftSession {
 
 	private synchronized void setupTimeout(int seconds) {
 		cancelTimeout();
-		futureTimeout = timeoutExecutor.schedule(
-			new Runnable() {
-				@Override
-				public void run() {
-					DraftManager.getInstance().timeout(draftId, sessionId);
-				}
-			},
-			seconds, TimeUnit.SECONDS
-		);
+		if (seconds > 0) {
+			futureTimeout = timeoutExecutor.schedule(
+				new Runnable() {
+					@Override
+					public void run() {
+						DraftManager.getInstance().timeout(draft.getId(), sessionId);
+					}
+				},
+				seconds, TimeUnit.SECONDS
+			);
+		}
 	}
 
 	private synchronized void cancelTimeout() {
@@ -140,11 +145,16 @@ public class DraftSession {
 
 	protected void handleRemoteException(RemoteException ex) {
 		logger.log(Level.SEVERE, null, ex);
-		DraftManager.getInstance().kill(draftId, sessionId);
+		DraftManager.getInstance().kill(draft.getId(), sessionId);
 	}
 
 	public void setKilled() {
 		killed = true;
 	}
 
+	public void sendCardPick(UUID cardId) {
+		cancelTimeout();
+		draft.addPick(playerId, cardId);
+	}
+
 }
diff --git a/Mage/src/mage/game/draft/Draft.java b/Mage/src/mage/game/draft/Draft.java
index 39b2e3436c..fa3bcd44bf 100644
--- a/Mage/src/mage/game/draft/Draft.java
+++ b/Mage/src/mage/game/draft/Draft.java
@@ -30,8 +30,10 @@ package mage.game.draft;
 
 import java.io.Serializable;
 import java.util.Collection;
+import java.util.List;
 import java.util.UUID;
 import mage.MageItem;
+import mage.cards.ExpansionSet;
 import mage.game.events.Listener;
 import mage.game.events.PlayerQueryEvent;
 import mage.game.events.TableEvent;
@@ -46,6 +48,9 @@ public interface Draft extends MageItem, Serializable {
 	public void addPlayer(Player player);
 	public Collection<DraftPlayer> getPlayers();
 	public DraftPlayer getPlayer(UUID playerId);
+	public List<ExpansionSet> getSets();
+	public int getBoosterNum();
+	public int getCardNum();
 	public void addPick(UUID playerId, UUID cardId);
 	public void start();
 	public void leave(UUID playerId);
diff --git a/Mage/src/mage/game/draft/DraftImpl.java b/Mage/src/mage/game/draft/DraftImpl.java
index 7b5f374bfc..b27ec9a9e2 100644
--- a/Mage/src/mage/game/draft/DraftImpl.java
+++ b/Mage/src/mage/game/draft/DraftImpl.java
@@ -37,6 +37,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import mage.cards.Card;
 import mage.cards.ExpansionSet;
+import mage.game.draft.DraftOptions.TimingOption;
 import mage.game.events.Listener;
 import mage.game.events.PlayerQueryEvent;
 import mage.game.events.PlayerQueryEventSource;
@@ -57,6 +58,9 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 	protected PlayerList table = new PlayerList();
 	protected List<ExpansionSet> sets;
 	protected int boosterNum = 0;
+	protected int cardNum = 0;
+	protected TimingOption timing;
+	protected int[] times = {40, 40, 35, 30, 25, 25, 20, 20, 15, 10, 10, 5, 5, 5, 5};
 
 	protected transient TableEventSource tableEventSource = new TableEventSource();
 	protected transient PlayerQueryEventSource playerQueryEventSource = new PlayerQueryEventSource();
@@ -64,6 +68,7 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 	public DraftImpl(DraftOptions options) {
 		id = UUID.randomUUID();
 		this.sets = options.getSets();
+		this.timing = options.getTiming();
 	}
 
 	@Override
@@ -88,6 +93,21 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 		return players.get(playerId);
 	}
 
+	@Override
+	public List<ExpansionSet> getSets() {
+		return sets;
+	}
+
+	@Override
+	public int getBoosterNum() {
+		return boosterNum;
+	}
+
+	@Override
+	public int getCardNum() {
+		return cardNum;
+	}
+
 	@Override
 	public void leave(UUID playerId) {
 		//TODO: implement this
@@ -95,7 +115,7 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 
 	@Override
 	public void autoPick(UUID playerId) {
-		//TODO: implement this
+		this.addPick(playerId, players.get(playerId).getBooster().get(0).getId());
 	}
 
 	protected void passLeft() {
@@ -145,9 +165,12 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 			}
 		}
 		boosterNum++;
+		cardNum = 1;
+		fireUpdatePlayersEvent();
 	}
 
 	protected boolean pickCards() {
+		cardNum++;
 		for (DraftPlayer player: players.values()) {
 			if (player.getBooster().size() == 0)
 				return false;
@@ -195,7 +218,11 @@ public abstract class DraftImpl<T extends DraftImpl<T>> implements Draft {
 
 	@Override
 	public void firePickCardEvent(UUID playerId) {
-		playerQueryEventSource.pickCard(playerId, "Pick card", players.get(playerId).booster, 20);
+		DraftPlayer player = players.get(playerId);
+		if (cardNum > 15)
+			cardNum = 15;
+		int time = times[cardNum - 1] * timing.getFactor();
+		playerQueryEventSource.pickCard(playerId, "Pick card", player.getBooster(), time);
 	}
 
 	@Override
diff --git a/Mage/src/mage/game/draft/DraftOptions.java b/Mage/src/mage/game/draft/DraftOptions.java
index 9f62a4043c..269e6c35d1 100644
--- a/Mage/src/mage/game/draft/DraftOptions.java
+++ b/Mage/src/mage/game/draft/DraftOptions.java
@@ -46,7 +46,19 @@ public class DraftOptions implements Serializable {
 	protected TimingOption timing;
 
 	public enum TimingOption {
-		REGULAR, BEGINNER, NONE
+		REGULAR (1),
+		BEGINNER (2),
+		NONE (0);
+		
+		private int factor;
+
+		TimingOption(int factor) {
+			this.factor = factor;
+		}
+
+		public int getFactor() {
+			return this.factor;
+		}
 	}
 
 	public DraftOptions(String name) {