diff --git a/App.java b/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..7923b88e9e7cf46e07b14b4484925d04deac2430
--- /dev/null
+++ b/App.java
@@ -0,0 +1,7 @@
+public class App {
+	public static void main (String [] args) {
+		Deck deck = new Deck();
+		deck.Shuffle();
+		deck.Show();
+	}
+}
diff --git a/Card.java b/Card.java
new file mode 100644
index 0000000000000000000000000000000000000000..28d64fe0162950854cd93e2774d9885cd24bc971
--- /dev/null
+++ b/Card.java
@@ -0,0 +1,15 @@
+public class Card {
+	private Suit suit;
+	private Rank rank;
+	Card (Suit suit, Rank rank) {
+		this.suit = suit;
+		this.rank = rank;
+	}
+	public Suit getSuit() {return this.suit;}
+	public Rank getRank() {return this.rank;}
+	public String getShortName () { return this.rank.getShortName() + this.suit.getShortName(); }
+	@Override public String toString() {
+		return this.rank.toString() + " of " + this.suit.toString();
+	}
+}
+
diff --git a/Deck.java b/Deck.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b9db10a7f0ec7591abe54df2573f5779e0d8c86
--- /dev/null
+++ b/Deck.java
@@ -0,0 +1,36 @@
+import java.util.Random;
+import java.util.Collections;
+import java.util.List;
+import java.util.Arrays;
+
+class Deck {
+	private Card[] deck = new Card[52];
+	static Random random = new Random(Double.doubleToLongBits(Math.random()));
+
+	Deck() {
+		int ctr = 0;
+
+		for(Suit suit : Suit.values()) {
+			for(Rank rank : Rank.values()) {
+				Card card = new Card(suit, rank);
+				deck[ctr] = card;
+
+				ctr++;
+			}	
+		}
+	}
+	void Shuffle() {
+		
+		List<Card> cardList = Arrays.asList(deck);
+		Collections.shuffle(cardList, random);
+	}
+	
+	public void Show()  {
+		for(Card card : this.deck) {
+			
+			System.out.print(card.getShortName()+"-");
+			System.out.println(card.toString());
+		}
+		
+	}
+}
diff --git a/Rank.java b/Rank.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7b33332016636060b001ec8449d7fb21d36d200
--- /dev/null
+++ b/Rank.java
@@ -0,0 +1,26 @@
+public enum Rank { 
+	ACE   ("A")
+  , DEUCE ("2")
+  , THREE ("3")
+  , FOUR  ("4")
+  , FIVE  ("5")
+  , SIX   ("6")
+  , SEVEN ("7")
+  , EIGHT ("8")
+  , NINE  ("9")
+  , TEN   ("10")
+  , JACK  ("J")
+  , QUEEN ("Q")
+  , KING  ("K")
+  ;
+	private final String shortName;
+	
+	Rank(String shortName){this.shortName = shortName;};
+
+	public String getShortName() {return shortName;}
+	
+	@Override public String toString() { 
+		String s = super.toString();
+		return s.substring(0,1) + s.substring(1).toLowerCase();
+	}
+}
diff --git a/Suit.java b/Suit.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5bebdf8f32d91e8b6ad25f2d218608b99afa41a
--- /dev/null
+++ b/Suit.java
@@ -0,0 +1,9 @@
+public enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS;
+
+	public String getShortName() {return this.toString().substring(0,1); }
+	@Override public String toString() { 
+		String s = super.toString();
+		return s.substring(0,1) + s.substring(1).toLowerCase();
+	}
+}
+