Index: client/Client/Client.vcxproj
===================================================================
--- client/Client/Client.vcxproj	(revision 5a5f131da3494898fa508a51e9526afc3f65ab16)
+++ client/Client/Client.vcxproj	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
@@ -73,4 +73,5 @@
     <ClCompile Include="GuiComponent.cpp" />
     <ClCompile Include="main.cpp" />
+    <ClCompile Include="RadioButtonList.cpp" />
     <ClCompile Include="Textbox.cpp" />
     <ClCompile Include="Window.cpp" />
@@ -86,4 +87,5 @@
     <ClInclude Include="Button.h" />
     <ClInclude Include="GuiComponent.h" />
+    <ClInclude Include="RadioButtonList.h" />
     <ClInclude Include="Textbox.h" />
     <ClInclude Include="Window.h" />
Index: client/Client/Client.vcxproj.filters
===================================================================
--- client/Client/Client.vcxproj.filters	(revision 5a5f131da3494898fa508a51e9526afc3f65ab16)
+++ client/Client/Client.vcxproj.filters	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
@@ -61,4 +61,7 @@
       <Filter>Source Files\common</Filter>
     </ClCompile>
+    <ClCompile Include="RadioButtonList.cpp">
+      <Filter>Source Files\gui</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
@@ -96,4 +99,7 @@
       <Filter>Header Files\common</Filter>
     </ClInclude>
+    <ClInclude Include="RadioButtonList.h">
+      <Filter>Header Files\gui</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
Index: client/Client/RadioButtonList.cpp
===================================================================
--- client/Client/RadioButtonList.cpp	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
+++ client/Client/RadioButtonList.cpp	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
@@ -0,0 +1,66 @@
+#include "RadioButtonList.h"
+
+#include <string>
+#include <cmath>
+
+using namespace std;
+
+RadioButtonList::RadioButtonList(int x, int y, string strLabel, ALLEGRO_FONT *font) :
+   GuiComponent(x, y, 300, 300, font)
+{
+   this->strLabel = strLabel;
+   this->selectedButton = -1;
+}
+
+
+RadioButtonList::~RadioButtonList(void)
+{
+}
+
+void RadioButtonList::draw(ALLEGRO_DISPLAY *display)
+{
+   al_set_target_bitmap(bitmap);
+   al_clear_to_color(al_map_rgb(0, 0, 0));
+
+   int fontHeight = al_get_font_line_height(font);
+
+   al_draw_text(font, al_map_rgb(0, 255, 0), 0, 0, ALLEGRO_ALIGN_LEFT, this->strLabel.c_str());
+   for(unsigned int i=0; i<this->vctRadioButtons.size(); i++) {
+      al_draw_circle(12, 26+i*20, 8, al_map_rgb(0, 255, 0), 1);
+      if (i == this->selectedButton)
+         al_draw_filled_circle(12, 26+i*20, 6, al_map_rgb(0, 255, 0));
+      al_draw_text(font, al_map_rgb(0, 255, 0), 26, 20+i*20, ALLEGRO_ALIGN_LEFT, this->vctRadioButtons[i].c_str());
+   }
+
+   al_set_target_bitmap(al_get_backbuffer(display));
+   al_draw_bitmap(bitmap, x, y, 0);
+}
+
+bool RadioButtonList::handleEvent(ALLEGRO_EVENT& e)
+{
+   int centerX, centerY;
+   centerX = x+12;
+
+   if (e.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) {
+      if (e.mouse.button == 1) {
+         for (int i=0; i<this->vctRadioButtons.size(); i++) {
+            centerY = y+26+i*20;
+
+            if (sqrt(pow((float)(e.mouse.x-centerX), 2.0f)+pow((float)(e.mouse.y-centerY), 2.0f))< 8) {
+               this->selectedButton = i;
+               return true;
+            }
+         }
+      }
+   }
+
+   return false;
+}
+
+void RadioButtonList::addRadioButton(string s) {
+   this->vctRadioButtons.push_back(s);
+}
+
+int RadioButtonList::getSelectedButton() {
+   return this->selectedButton;
+}
Index: client/Client/RadioButtonList.h
===================================================================
--- client/Client/RadioButtonList.h	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
+++ client/Client/RadioButtonList.h	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
@@ -0,0 +1,31 @@
+#ifndef _RADIOBUTTONLIST_H
+#define _RADIOBUTTONLIST_H
+
+#include "GuiComponent.h"
+
+#include <string>
+#include <vector>
+
+using namespace std;
+
+class RadioButtonList :
+   public GuiComponent
+{
+private:
+   string strLabel;
+   vector<string> vctRadioButtons;
+   int selectedButton;
+
+public:
+   RadioButtonList(int x, int y, string strLabel, ALLEGRO_FONT *font);
+   ~RadioButtonList(void);
+
+   void draw(ALLEGRO_DISPLAY *display);
+   bool handleEvent(ALLEGRO_EVENT& e);
+
+   void addRadioButton(string s);
+   int getSelectedButton();
+};
+
+#endif
+
Index: client/Client/main.cpp
===================================================================
--- client/Client/main.cpp	(revision 5a5f131da3494898fa508a51e9526afc3f65ab16)
+++ client/Client/main.cpp	(revision 5c95436b3f64026a1a2084818bdd625724c2a543)
@@ -36,4 +36,5 @@
 #include "Textbox.h"
 #include "Button.h"
+#include "RadioButtonList.h"
 #include "chat.h"
 
@@ -53,4 +54,6 @@
 
 // callbacks
+void goToLoginScreen();
+void goToRegisterScreen();
 void registerAccount();
 void login();
@@ -75,9 +78,18 @@
 
 Window* wndLogin;
+Window* wndRegister;
 Window* wndMain;
 Window* wndCurrent;
 
+// wndLogin
 Textbox* txtUsername;
 Textbox* txtPassword;
+
+// wndRegister
+Textbox* txtUsernameRegister;
+Textbox* txtPasswordRegister;
+RadioButtonList* rblClasses;
+
+// wndMain
 Textbox* txtChat;
 
@@ -160,5 +172,5 @@
    wndLogin->addComponent(new Textbox(104, 40, 100, 20, font));
    wndLogin->addComponent(new Textbox(104, 70, 100, 20, font));
-   wndLogin->addComponent(new Button(22, 100, 90, 20, font, "Register", registerAccount));
+   wndLogin->addComponent(new Button(22, 100, 90, 20, font, "Create an Account", goToRegisterScreen));
    wndLogin->addComponent(new Button(122, 100, 60, 20, font, "Login", login));
    wndLogin->addComponent(new Button(540, 10, 80, 20, font, "Quit", quit));
@@ -166,4 +178,19 @@
    txtUsername = (Textbox*)wndLogin->getComponent(0);
    txtPassword = (Textbox*)wndLogin->getComponent(1);
+
+   wndRegister = new Window(0, 0, SCREEN_W, SCREEN_H);
+   wndRegister->addComponent(new Textbox(104, 40, 100, 20, font));
+   wndRegister->addComponent(new Textbox(104, 70, 100, 20, font));
+   wndRegister->addComponent(new Button(22, 100, 90, 20, font, "Back", goToLoginScreen));
+   wndRegister->addComponent(new Button(122, 100, 60, 20, font, "Submit", registerAccount));
+   wndRegister->addComponent(new Button(540, 10, 80, 20, font, "Quit", quit));
+   wndRegister->addComponent(new RadioButtonList(20, 130, "Pick a class", font));
+
+   txtUsernameRegister = (Textbox*)wndRegister->getComponent(0);
+   txtPasswordRegister = (Textbox*)wndRegister->getComponent(1);
+
+   rblClasses = (RadioButtonList*)wndRegister->getComponent(5);
+   rblClasses->addRadioButton("Warrior");
+   rblClasses->addRadioButton("Ranger");
 
    wndMain = new Window(0, 0, SCREEN_W, SCREEN_H);
@@ -833,11 +860,43 @@
 }
 
-void registerAccount()
-{
-   string username = txtUsername->getStr();
-   string password = txtPassword->getStr();
+void goToRegisterScreen()
+{
+   wndCurrent = wndRegister;
+
+   txtUsernameRegister->clear();
+   txtPasswordRegister->clear();
+}
+
+void goToLoginScreen()
+{
+   wndCurrent = wndLogin;
 
    txtUsername->clear();
    txtPassword->clear();
+}
+
+void registerAccount()
+{
+   string username = txtUsernameRegister->getStr();
+   string password = txtPasswordRegister->getStr();
+
+   txtUsernameRegister->clear();
+   txtPasswordRegister->clear();
+   // maybe clear rblClasses as well (add a method to RadioButtonList to enable this)
+
+   Player::PlayerClass playerClass;
+
+   switch (rblClasses->getSelectedButton()) {
+   case 0:
+      playerClass = Player::CLASS_WARRIOR;
+      break;
+   case 1:
+      playerClass = Player::CLASS_RANGER;
+      break;
+   default:
+      cout << "Invalid class selection" << endl;
+      playerClass = Player::CLASS_NONE;
+      break;
+   }
 
    msgTo.type = MSG_TYPE_REGISTER;
@@ -845,4 +904,5 @@
    strcpy(msgTo.buffer, username.c_str());
    strcpy(msgTo.buffer+username.size()+1, password.c_str());
+   memcpy(msgTo.buffer+username.size()+password.size()+2, &playerClass, 4);
 
    sendMessage(&msgTo, sock, &server);
