diff --git a/src/board.c b/src/board.c
index d8ec920..3a57456 100644
--- a/src/board.c
+++ b/src/board.c
@@ -67,7 +67,7 @@ void player_board(void) {
 				0, "txtCargo", &gl_smallFont, &cDConsole,
 				"SCreds:\n"
 				"Cargo:\n");
-	credits2str(cred, board_credits);
+	credits2str(cred, board_credits, 2);
 	snprintf(str, 128,
 				"%s\n"
 				"%s\n",
@@ -105,7 +105,7 @@ static void board_stealCreds(char* str) {
 	credits += board_credits;
 	board_credits = 0;
 	board_update(); // Update the lack of credits.
-	player_message("You manage to steal the ship's credits");
+	player_message("You manage to steal the ship's Scred");
 }
 
 // Failed to board.
@@ -129,7 +129,7 @@ static void board_update(void) {
 	char str[128];
 	char cred[10];
 
-	credits2str(cred, board_credits);
+	credits2str(cred, board_credits, 2);
 
 	snprintf(str, 128,
 				"%s\n"
diff --git a/src/economy.c b/src/economy.c
index 0798d18..c8a576c 100644
--- a/src/economy.c
+++ b/src/economy.c
@@ -4,13 +4,13 @@
 
 // Convert credits to a usable string for displaying.
 // str must have 10 characters allocated.
-void credits2str(char* str, unsigned int credits) {
+void credits2str(char* str, unsigned int credits, int decimals) {
 	if(credits >= 1000000000)
-		snprintf(str, 10, "%.2fB", (double)credits / 1000000000.);
+		snprintf(str, 10, "%.*fB", decimals, (double)credits / 1000000000.);
 	else if(credits >= 1000000)
-		snprintf(str, 10, "%2fM", (double)credits / 1000000.);
+		snprintf(str, 10, "%*fM", decimals, (double)credits / 1000000.);
 	else if(credits >= 1000)
-		snprintf(str, 10, "%.2fK", (double)credits / 1000.);
+		snprintf(str, 10, "%.*fK", decimals, (double)credits / 1000.);
 	else snprintf(str, 10, "%d", credits);
 }
 
diff --git a/src/economy.h b/src/economy.h
index 2473c23..79d2f29 100644
--- a/src/economy.h
+++ b/src/economy.h
@@ -1,4 +1,4 @@
 #pragma once
 
-void credits2str(char* str, unsigned int credits);
+void credits2str(char* str, unsigned int credits, int decimals);
 
diff --git a/src/land.c b/src/land.c
index 054e893..df581ab 100644
--- a/src/land.c
+++ b/src/land.c
@@ -3,6 +3,7 @@
 #include "player.h"
 #include "rng.h"
 #include "music.h"
+#include "economy.h"
 #include "land.h"
 
 // Global/main window.
@@ -21,7 +22,7 @@
 
 // Shipyard.
 #define SHIPYARD_WIDTH		700
-#define SHIPYARD_HEIGHT		600
+#define SHIPYARD_HEIGHT		500
 #define SHIPYARD_XPOS			(gl_screen.w-SHIPYARD_WIDTH)/2+100
 #define SHIPYARD_YPOS			(gl_screen.h-SHIPYARD_HEIGHT)/2-25
 
@@ -53,6 +54,7 @@ static void shipyard(void);
 static void shipyard_close(char* str);
 static void shipyard_update(char* str);
 static void shipyard_info(char* str);
+static void shipyard_buy(char* str);
 // Spaceport bar.
 static void spaceport_bar(void);
 static void spaceport_bar_close(char* str);
@@ -114,18 +116,29 @@ static void shipyard(void) {
 	
 	window_addButton(secondary_wid, -40-BUTTON_WIDTH, 20,
 				BUTTON_WIDTH, BUTTON_HEIGHT, "btnBuyShip",
-				"Buy", NULL);
+				"Buy", shipyard_buy);
 
 	window_addButton(secondary_wid, -40-BUTTON_WIDTH, 40+BUTTON_HEIGHT,
 				BUTTON_WIDTH, BUTTON_HEIGHT, "btnInfoShip",
 				"Info", shipyard_info);
 	
-	window_addRect(secondary_wid, 20+200+60, -50,
+	window_addRect(secondary_wid, -40, -50,
 				128, 96, "rctTarget", &cBlack, 0);
 	
-	window_addImage(secondary_wid, 20+200+60, -50-96,
+	window_addImage(secondary_wid, -40-128, -50-96,
 				"imgTarget", NULL);
 
+	window_addText(secondary_wid, 40+200+40, -80,
+				80, 96, 0, "txtSDesc", &gl_smallFont, &cDConsole,
+				"Name:\n"
+				"Class:\n"
+				"Fabricator:\n"
+				"\n"
+				"Price:\n");
+	
+	window_addText(secondary_wid, 40+200+40+80, -80,
+				128, 96, 0, "txtDDesc", &gl_smallFont, &cBlack, NULL);
+
 	
 	window_addText(secondary_wid, 20+200+40, -160,
 				SHIPYARD_WIDTH-360, 200, 0, "txtDescription",
@@ -150,12 +163,28 @@ static void shipyard_update(char* str) {
 	(void)str;
 	char* shipname;
 	Ship* ship;
+	char buf[80], buf2[32];
 
 	shipname = toolkit_getList(secondary_wid, "lstShipyard");
 	ship = ship_get(shipname);
 
 	window_modifyText(secondary_wid, "txtDescription", ship->description);
 	window_modifyImage(secondary_wid, "imgTarget", ship->gfx_target);
+
+	credits2str(buf2, ship->price, 0);
+	snprintf(buf, 80,
+				"%s\n"
+				"%s\n"
+				"%s\n"
+				"\n"
+				"%s Scred\n",
+				ship->name,
+				ship_class(ship),
+				ship->fabricator,
+				buf2);
+
+	window_modifyText(secondary_wid, "txtDDesc", buf);
+
 }
 
 static void shipyard_info(char* str) {
@@ -166,6 +195,17 @@ static void shipyard_info(char* str) {
 	ship_view(shipname);
 }
 
+static void shipyard_buy(char* str) {
+	(void)str;
+	char* shipname;
+	Ship* ship;
+
+	shipname = toolkit_getList(secondary_wid, "lstShipyard");
+	ship = ship_get(shipname);
+
+	//Vec2 v;
+}
+
 // Spaceport bar.
 static void spaceport_bar(void) {
   secondary_wid = window_create("SpacePort Bar", -1, -1, BAR_WIDTH, BAR_HEIGHT);
diff --git a/src/player.c b/src/player.c
index a0b340f..b656a1f 100644
--- a/src/player.c
+++ b/src/player.c
@@ -449,7 +449,7 @@ void player_render(void) {
   gl_print(NULL, gui.misc.x + 10, gui.misc.y - 10 - gl_defFont.h,
         &cConsole, "SCred:");
 	
-	credits2str(str, credits);
+	credits2str(str, credits, 2);
 
   i = gl_printWidth(&gl_smallFont, "%s", str);
   gl_print(&gl_smallFont, gui.misc.x + gui.misc.w - 10 - i,
diff --git a/src/ship.c b/src/ship.c
index 486f6a9..780a38a 100644
--- a/src/ship.c
+++ b/src/ship.c
@@ -24,7 +24,6 @@
 static Ship* ship_stack = NULL;
 static int ships = 0;
 
-static char* ship_class(Ship* s);
 static Ship* ship_parse(xmlNodePtr parent);
 static void ship_view_close(char* btn);
 
@@ -56,7 +55,7 @@ char** ship_getAll(int* n) {
 	return shipnames;
 }
 
-static char* ship_class(Ship* s) {
+char* ship_class(Ship* s) {
 	return ship_classes[s->class];
 }
 
diff --git a/src/ship.h b/src/ship.h
index 374a99f..1eb94cd 100644
--- a/src/ship.h
+++ b/src/ship.h
@@ -63,6 +63,7 @@ typedef struct Ship_ {
 // Get.
 Ship* ship_get(const char* name);
 char** ship_getAll(int* n);
+char* ship_class(Ship* p);
 
 // Load/quit.
 int ships_load(void);