diff --git a/go/src/hearts/img/uistate/uistate.go b/go/src/hearts/img/uistate/uistate.go
index 5d084a1..a4b7617 100644
--- a/go/src/hearts/img/uistate/uistate.go
+++ b/go/src/hearts/img/uistate/uistate.go
@@ -32,6 +32,7 @@
 	Table   View = "Table"
 	Play    View = "Play"
 	Score   View = "Score"
+	Split   View = "Split"
 )
 
 const (
diff --git a/go/src/hearts/img/view/view.go b/go/src/hearts/img/view/view.go
index 1d97c8b..c56a5c3 100644
--- a/go/src/hearts/img/view/view.go
+++ b/go/src/hearts/img/view/view.go
@@ -119,7 +119,7 @@
 		u.Cards = append(u.Cards, dropCard)
 	}
 	// adding 4 player icons, text, and device icons
-	playerIconImage := u.CurTable.GetPlayers()[0].GetImage()
+	playerIconImage := u.CurTable.GetPlayers()[0].GetIconImage()
 	playerIconX := (u.WindowSize.X - u.PlayerIconDim.X) / 2
 	playerIconY := u.WindowSize.Y - u.TableCardDim.Y - u.BottomPadding - u.Padding - u.PlayerIconDim.Y
 	playerIconPos := coords.MakeVec(playerIconX, playerIconY)
@@ -137,13 +137,13 @@
 		u.BackgroundImgs = append(u.BackgroundImgs, img)
 	}
 	// player 0's device icon
-	deviceIconImage := u.Texs["phoneIcon.png"]
+	deviceIconImage := u.CurTable.GetPlayers()[0].GetDeviceImage()
 	deviceIconDim := u.PlayerIconDim.DividedBy(2)
 	deviceIconPos := coords.MakeVec(playerIconPos.X+u.PlayerIconDim.X, playerIconPos.Y)
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeImgWithoutAlt(deviceIconImage, deviceIconPos, deviceIconDim, u.Eng, u.Scene))
 	// player 1's icon
-	playerIconImage = u.CurTable.GetPlayers()[1].GetImage()
+	playerIconImage = u.CurTable.GetPlayers()[1].GetIconImage()
 	playerIconX = u.BottomPadding
 	playerIconY = (u.WindowSize.Y+2*u.BottomPadding+u.PlayerIconDim.Y-
 		(float32(len(u.CurTable.GetPlayers()[1].GetHand()))*
@@ -164,12 +164,12 @@
 		u.BackgroundImgs = append(u.BackgroundImgs, img)
 	}
 	// player 1's device icon
-	deviceIconImage = u.Texs["tabletIcon.png"]
+	deviceIconImage = u.CurTable.GetPlayers()[1].GetDeviceImage()
 	deviceIconPos = coords.MakeVec(playerIconPos.X+u.PlayerIconDim.X, playerIconPos.Y+u.PlayerIconDim.Y-deviceIconDim.Y)
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeImgWithoutAlt(deviceIconImage, deviceIconPos, deviceIconDim, u.Eng, u.Scene))
 	// player 2's icon
-	playerIconImage = u.CurTable.GetPlayers()[2].GetImage()
+	playerIconImage = u.CurTable.GetPlayers()[2].GetIconImage()
 	playerIconX = (u.WindowSize.X - u.PlayerIconDim.X) / 2
 	playerIconY = u.TopPadding + u.TableCardDim.Y + u.Padding
 	playerIconPos = coords.MakeVec(playerIconX, playerIconY)
@@ -187,12 +187,12 @@
 		u.BackgroundImgs = append(u.BackgroundImgs, img)
 	}
 	// player 2's device icon
-	deviceIconImage = u.Texs["watchIcon.png"]
+	deviceIconImage = u.CurTable.GetPlayers()[2].GetDeviceImage()
 	deviceIconPos = coords.MakeVec(playerIconPos.X+u.PlayerIconDim.X, playerIconPos.Y+u.PlayerIconDim.Y-deviceIconDim.Y)
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeImgWithoutAlt(deviceIconImage, deviceIconPos, deviceIconDim, u.Eng, u.Scene))
 	// player 3's icon
-	playerIconImage = u.CurTable.GetPlayers()[3].GetImage()
+	playerIconImage = u.CurTable.GetPlayers()[3].GetIconImage()
 	playerIconX = u.WindowSize.X - u.BottomPadding - u.PlayerIconDim.X
 	playerIconY = (u.WindowSize.Y+2*u.BottomPadding+u.PlayerIconDim.Y-
 		(float32(len(u.CurTable.GetPlayers()[3].GetHand()))*
@@ -213,7 +213,7 @@
 		u.BackgroundImgs = append(u.BackgroundImgs, img)
 	}
 	// player 3's device icon
-	deviceIconImage = u.Texs["laptopIcon.png"]
+	deviceIconImage = u.CurTable.GetPlayers()[3].GetDeviceImage()
 	deviceIconPos = coords.MakeVec(playerIconPos.X-deviceIconDim.X, playerIconPos.Y+u.PlayerIconDim.Y-deviceIconDim.Y)
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeImgWithoutAlt(deviceIconImage, deviceIconPos, deviceIconDim, u.Eng, u.Scene))
@@ -254,12 +254,7 @@
 	addHeader(u)
 	addScoreViewHeaderText(u)
 	addPlayerScores(roundScores, u)
-	if len(winners) > 0 {
-		addScoreButton(true, u)
-	} else {
-		addScoreButton(false, u)
-	}
-
+	addScoreButton(len(winners) > 0, u)
 }
 
 // Pass View: Shows player's hand and allows them to pass cards
@@ -299,17 +294,7 @@
 	resetScene(u)
 	addPlaySlot(u)
 	addHand(u)
-	var turnText string
-	playerTurnNum := u.CurTable.WhoseTurn()
-	if playerTurnNum == -1 || !u.CurTable.AllDonePassing() {
-		turnText = "Waiting for other players"
-	} else if playerTurnNum == u.CurPlayerIndex {
-		turnText = "Your turn"
-	} else {
-		name := u.CurTable.GetPlayers()[playerTurnNum].GetName()
-		turnText = name + "'s turn"
-	}
-	addPlayHeader(turnText, u)
+	addPlayHeader(getTurnText(u), u)
 	if u.Debug {
 		addDebugBar(u)
 	}
@@ -319,6 +304,18 @@
 	}
 }
 
+func LoadSplitView(u *uistate.UIState) {
+	u.CurView = uistate.Split
+	resetImgs(u)
+	resetScene(u)
+	addHand(u)
+	addPlayHeader(getTurnText(u), u)
+	addSplitViewPlayerIcons(u)
+	if u.Debug {
+		addDebugBar(u)
+	}
+}
+
 func ChangePlayMessage(message string, u *uistate.UIState) {
 	// remove text and replace with message
 	var emptyTex sprite.SubTex
@@ -331,6 +328,98 @@
 	addPlayHeader(message, u)
 }
 
+func addSplitViewPlayerIcons(u *uistate.UIState) {
+	topOfBanner := u.WindowSize.Y - 4*u.CardDim.Y - 5*u.Padding - u.BottomPadding - 40
+	splitWindowSize := coords.MakeVec(u.WindowSize.X, topOfBanner+u.TopPadding)
+	dropTargetImage := u.Texs["trickDrop.png"]
+	dropTargetAlt := u.Texs["trickDropBlue.png"]
+	dropTargetDimensions := u.CardDim
+	playerIconDimensions := u.CardDim.Minus(2)
+	// first drop target
+	dropTargetX := (splitWindowSize.X - u.CardDim.X) / 2
+	dropTargetY := splitWindowSize.Y/2 + u.Padding
+	dropTargetPos := coords.MakeVec(dropTargetX, dropTargetY)
+	u.DropTargets = append(u.DropTargets,
+		texture.MakeImgWithAlt(dropTargetImage, dropTargetAlt, dropTargetPos, dropTargetDimensions, true, u.Eng, u.Scene))
+	// first player icon
+	playerIconImage := u.CurTable.GetPlayers()[u.CurPlayerIndex].GetIconImage()
+	u.BackgroundImgs = append(u.BackgroundImgs,
+		texture.MakeImgWithoutAlt(playerIconImage, dropTargetPos.Plus(1), playerIconDimensions, u.Eng, u.Scene))
+	// card on top of first drop target
+	dropCard := u.CurTable.GetTrick()[u.CurPlayerIndex]
+	if dropCard != nil {
+		texture.PopulateCardImage(dropCard, u.Texs, u.Eng, u.Scene)
+		dropCard.Move(dropTargetPos, dropTargetDimensions, u.Eng)
+		u.TableCards = append(u.TableCards, dropCard)
+	}
+	// second drop target
+	dropTargetY = (splitWindowSize.Y - u.CardDim.Y) / 2
+	dropTargetX = splitWindowSize.X/2 - 3*u.CardDim.X/2 - u.Padding
+	dropTargetPos = coords.MakeVec(dropTargetX, dropTargetY)
+	u.DropTargets = append(u.DropTargets,
+		texture.MakeImgWithAlt(dropTargetImage, dropTargetAlt, dropTargetPos, dropTargetDimensions, true, u.Eng, u.Scene))
+	// second player icon
+	playerIconImage = u.CurTable.GetPlayers()[(u.CurPlayerIndex+1)%len(u.CurTable.GetPlayers())].GetIconImage()
+	u.BackgroundImgs = append(u.BackgroundImgs,
+		texture.MakeImgWithoutAlt(playerIconImage, dropTargetPos.Plus(1), playerIconDimensions, u.Eng, u.Scene))
+	// card on top of second drop target
+	dropCard = u.CurTable.GetTrick()[(u.CurPlayerIndex+1)%len(u.CurTable.GetPlayers())]
+	if dropCard != nil {
+		texture.PopulateCardImage(dropCard, u.Texs, u.Eng, u.Scene)
+		dropCard.Move(dropTargetPos, dropTargetDimensions, u.Eng)
+		u.TableCards = append(u.TableCards, dropCard)
+	}
+	// third drop target
+	dropTargetX = (splitWindowSize.X - u.CardDim.X) / 2
+	dropTargetY = splitWindowSize.Y/2 - u.Padding - u.CardDim.Y
+	dropTargetPos = coords.MakeVec(dropTargetX, dropTargetY)
+	u.DropTargets = append(u.DropTargets,
+		texture.MakeImgWithAlt(dropTargetImage, dropTargetAlt, dropTargetPos, dropTargetDimensions, true, u.Eng, u.Scene))
+	// third player icon
+	playerIconImage = u.CurTable.GetPlayers()[(u.CurPlayerIndex+2)%len(u.CurTable.GetPlayers())].GetIconImage()
+	u.BackgroundImgs = append(u.BackgroundImgs,
+		texture.MakeImgWithoutAlt(playerIconImage, dropTargetPos.Plus(1), playerIconDimensions, u.Eng, u.Scene))
+	// card on top of third drop target
+	dropCard = u.CurTable.GetTrick()[(u.CurPlayerIndex+2)%len(u.CurTable.GetPlayers())]
+	if dropCard != nil {
+		texture.PopulateCardImage(dropCard, u.Texs, u.Eng, u.Scene)
+		dropCard.Move(dropTargetPos, dropTargetDimensions, u.Eng)
+		u.TableCards = append(u.TableCards, dropCard)
+	}
+	// fourth drop target
+	dropTargetY = (splitWindowSize.Y - u.CardDim.Y) / 2
+	dropTargetX = splitWindowSize.X/2 + u.CardDim.X/2 + u.Padding
+	dropTargetPos = coords.MakeVec(dropTargetX, dropTargetY)
+	u.DropTargets = append(u.DropTargets,
+		texture.MakeImgWithAlt(dropTargetImage, dropTargetAlt, dropTargetPos, dropTargetDimensions, true, u.Eng, u.Scene))
+	// fourth player icon
+	playerIconImage = u.CurTable.GetPlayers()[(u.CurPlayerIndex+3)%len(u.CurTable.GetPlayers())].GetIconImage()
+	u.BackgroundImgs = append(u.BackgroundImgs,
+		texture.MakeImgWithoutAlt(playerIconImage, dropTargetPos.Plus(1), playerIconDimensions, u.Eng, u.Scene))
+	// card on top of fourth drop target
+	dropCard = u.CurTable.GetTrick()[(u.CurPlayerIndex+3)%len(u.CurTable.GetPlayers())]
+	if dropCard != nil {
+		texture.PopulateCardImage(dropCard, u.Texs, u.Eng, u.Scene)
+		dropCard.Move(dropTargetPos, dropTargetDimensions, u.Eng)
+		u.TableCards = append(u.TableCards, dropCard)
+	}
+}
+
+// returns a string which says whose turn it is
+func getTurnText(u *uistate.UIState) string {
+	var turnText string
+	playerTurnNum := u.CurTable.WhoseTurn()
+	if playerTurnNum == -1 || !u.CurTable.AllDonePassing() {
+		turnText = "Waiting for other players"
+	} else if playerTurnNum == u.CurPlayerIndex {
+		turnText = "Your turn"
+	} else {
+		name := u.CurTable.GetPlayers()[playerTurnNum].GetName()
+		turnText = name + "'s turn"
+	}
+	return turnText
+}
+
 func addHeader(u *uistate.UIState) {
 	// adding blue banner
 	headerImage := u.Texs["RoundedRectangle-DBlue.png"]
@@ -343,20 +432,33 @@
 func addPlayHeader(message string, u *uistate.UIState) {
 	// adding blue banner
 	headerImage := u.Texs["Rectangle-DBlue.png"]
-	headerPos := coords.MakeVec(0, 0)
-	headerDimensions := coords.MakeVec(u.WindowSize.X, float32(50))
+	var headerDimensions *coords.Vec
+	var headerPos *coords.Vec
+	if u.CurView == uistate.Play {
+		headerDimensions = coords.MakeVec(u.WindowSize.X, float32(50))
+		headerPos = coords.MakeVec(0, 0)
+	} else {
+		headerDimensions = coords.MakeVec(u.WindowSize.X, float32(40))
+		topOfHand := u.WindowSize.Y - 4*(u.CardDim.Y+u.Padding) - u.BottomPadding
+		headerPos = coords.MakeVec(0, topOfHand-headerDimensions.Y-u.Padding)
+	}
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeImgWithoutAlt(headerImage, headerPos, headerDimensions, u.Eng, u.Scene))
 	// adding pull tab
 	pullTabImage := u.Texs["HorizontalPullTab.png"]
 	pullTabDim := u.CardDim.DividedBy(2)
-	pullTabPos := headerDimensions.MinusVec(pullTabDim).Minus(u.Padding)
+	pullTabPos := headerPos.PlusVec(headerDimensions).MinusVec(pullTabDim).Minus(u.Padding)
 	u.Buttons = append(u.Buttons,
 		texture.MakeImgWithoutAlt(pullTabImage, pullTabPos, pullTabDim, u.Eng, u.Scene))
 	// adding text
 	color := "DBlue"
 	scaler := float32(4)
-	center := coords.MakeVec(u.WindowSize.X/2, 20)
+	var center *coords.Vec
+	if u.CurView == uistate.Play {
+		center = coords.MakeVec(u.WindowSize.X/2, headerPos.Y+20)
+	} else {
+		center = coords.MakeVec(u.WindowSize.X/2, headerPos.Y+10)
+	}
 	maxWidth := u.WindowSize.X - pullTabDim.X*2 - u.Padding*4
 	u.BackgroundImgs = append(u.BackgroundImgs,
 		texture.MakeStringImgCenterAlign(message, color, color, true, center, scaler, maxWidth, u)...)
@@ -625,7 +727,7 @@
 		u.BackgroundImgs = append(u.BackgroundImgs,
 			texture.MakeImgWithoutAlt(dividerImage, dividerPos, dividerDim, u.Eng, u.Scene))
 		// player icon
-		playerIconImage := p.GetImage()
+		playerIconImage := p.GetIconImage()
 		playerIconDim := coords.MakeVec(rowHeight/2, rowHeight/2)
 		playerIconPos := coords.MakeVec(u.WindowSize.X/4-playerIconDim.X/2, top+(float32(i)+.5)*rowHeight+rowHeight/7)
 		u.BackgroundImgs = append(u.BackgroundImgs,
diff --git a/go/src/hearts/logic/player/player.go b/go/src/hearts/logic/player/player.go
index abaa220..4f61379 100644
--- a/go/src/hearts/logic/player/player.go
+++ b/go/src/hearts/logic/player/player.go
@@ -12,33 +12,35 @@
 )
 
 // Returns a player instance with playerIndex equal to index
-func NewPlayer(index int, name string, tex sprite.SubTex) *Player {
+func NewPlayer(index int, name string, iconTex, deviceTex sprite.SubTex) *Player {
 	return &Player{
-		hand:        nil,
-		tricks:      make([]*card.Card, 0),
-		score:       0,
-		playerIndex: index,
-		playerName:  name,
-		playerImage: tex,
-		donePassing: false,
-		doneTaking:  false,
-		doneScoring: false,
+		hand:              nil,
+		tricks:            make([]*card.Card, 0),
+		score:             0,
+		playerIndex:       index,
+		playerName:        name,
+		playerIconImage:   iconTex,
+		playerDeviceImage: deviceTex,
+		donePassing:       false,
+		doneTaking:        false,
+		doneScoring:       false,
 	}
 }
 
 type Player struct {
-	hand        []*card.Card
-	passedFrom  []*card.Card
-	passedTo    []*card.Card
-	tricks      []*card.Card
-	score       int
-	playerIndex int
-	playerName  string
-	playerImage sprite.SubTex
-	donePassing bool
-	doneTaking  bool
-	donePlaying bool
-	doneScoring bool
+	hand              []*card.Card
+	passedFrom        []*card.Card
+	passedTo          []*card.Card
+	tricks            []*card.Card
+	score             int
+	playerIndex       int
+	playerName        string
+	playerIconImage   sprite.SubTex
+	playerDeviceImage sprite.SubTex
+	donePassing       bool
+	doneTaking        bool
+	donePlaying       bool
+	doneScoring       bool
 }
 
 // Returns the hand of p
@@ -70,8 +72,12 @@
 	return p.playerName
 }
 
-func (p *Player) GetImage() sprite.SubTex {
-	return p.playerImage
+func (p *Player) GetIconImage() sprite.SubTex {
+	return p.playerIconImage
+}
+
+func (p *Player) GetDeviceImage() sprite.SubTex {
+	return p.playerDeviceImage
 }
 
 // Returns true if p has finished the pass phase of the current round
diff --git a/go/src/hearts/logic/table/table.go b/go/src/hearts/logic/table/table.go
index 073d2b4..74ed5ba 100644
--- a/go/src/hearts/logic/table/table.go
+++ b/go/src/hearts/logic/table/table.go
@@ -19,9 +19,10 @@
 func InitializeGame(numPlayers int, texs map[string]sprite.SubTex) *Table {
 	players := make([]*player.Player, 0)
 	names := []string{"YoungSeok", "Dan", "Emily", "Ross"}
-	images := []sprite.SubTex{texs["player0.jpeg"], texs["player1.jpeg"], texs["player2.jpeg"], texs["player3.jpeg"]}
+	iconImages := []sprite.SubTex{texs["player0.jpeg"], texs["player1.jpeg"], texs["player2.jpeg"], texs["player3.jpeg"]}
+	deviceImages := []sprite.SubTex{texs["laptopIcon.png"], texs["watchIcon.png"], texs["tabletIcon.png"], texs["phoneIcon.png"]}
 	for i := 0; i < numPlayers; i++ {
-		players = append(players, player.NewPlayer(i, names[i], images[i]))
+		players = append(players, player.NewPlayer(i, names[i], iconImages[i], deviceImages[i]))
 	}
 	t := makeTable(players)
 	t.GenerateClassicCards()
diff --git a/go/src/hearts/touchhandler/touchhandler.go b/go/src/hearts/touchhandler/touchhandler.go
index 645e3a0..89d63af 100644
--- a/go/src/hearts/touchhandler/touchhandler.go
+++ b/go/src/hearts/touchhandler/touchhandler.go
@@ -58,6 +58,15 @@
 		case "end":
 			endClickPlay(t, u)
 		}
+	case uistate.Split:
+		switch t.Type.String() {
+		case "begin":
+			beginClickSplit(t, u)
+		case "move":
+			moveClickSplit(t, u)
+		case "end":
+			endClickSplit(t, u)
+		}
 	case uistate.Score:
 		switch t.Type.String() {
 		case "begin":
@@ -261,6 +270,7 @@
 		if u.Debug {
 			if u.Buttons[0] == buttonList[0] {
 				u.CurImg = u.Buttons[0]
+				view.LoadSplitView(u)
 			} else if u.Buttons[1] == buttonList[0] {
 				view.LoadTableView(u)
 			} else if u.Buttons[2] == buttonList[0] {
@@ -298,6 +308,19 @@
 	u.CurCard = nil
 }
 
+func beginClickSplit(t touch.Event, u *uistate.UIState) {
+	buttonList := findClickedButton(t, u)
+	if len(buttonList) > 0 {
+		view.LoadPlayView(u)
+	}
+}
+
+func moveClickSplit(t touch.Event, u *uistate.UIState) {
+}
+
+func endClickSplit(t touch.Event, u *uistate.UIState) {
+}
+
 func beginClickScore(t touch.Event, u *uistate.UIState) {
 	buttonList := findClickedButton(t, u)
 	if len(buttonList) > 0 {
