diff --git a/src/main.c b/src/main.c
index 4aa256e94ce539922f21b9dc793ee46e91535c6d..091ec4ffb93624cdb01670f05353845d4c7e6b60 100644
--- a/src/main.c
+++ b/src/main.c
@@ -46,9 +46,15 @@ struct context {
 	struct timespec start_time;
 
 	GtkWidget* plot;
-	PangoFontDescription* font_description;
+
+	char* font_name;
+	int font_size;
+
+	PangoFontDescription* title_font_description;
 	char* title;
 	PangoLayout* title_layout;
+
+	PangoFontDescription* label_font_description;
 	char* xlab;
 	PangoLayout* xlab_layout;
 	char* yllab;
@@ -56,6 +62,8 @@ struct context {
 	char* yrlab;
 	PangoLayout* yrlab_layout;
 
+	PangoFontDescription* tick_font_description;
+
 	double margins[4];
 
 	char* xaxis;
@@ -119,8 +127,7 @@ int main( int argc, char** argv ) {
 	context->read_buffer_len = 512;
 	context->xfit = true;
 	context->xfollow = true;
-	context->font_description =
-		pango_font_description_from_string( "Sans 12px" );
+	context->font_size = 12;
 
 	static const char* colours[] = {
 		"#005C84", "#FCBC00", "#0C838C", "#E63037",
@@ -166,6 +173,22 @@ int main( int argc, char** argv ) {
 			.description = "Do not plot the data in column "
 				"(can be given multiple times)",
 			.arg_description = "column"
+		}, {
+			.long_name = "font",
+			.short_name = 'f',
+			.flags = G_OPTION_FLAG_IN_MAIN,
+			.arg = G_OPTION_ARG_STRING,
+			.arg_data = &( context->font_name ),
+			.description = "Font for graph text",
+			.arg_description = "font",
+		}, {
+			.long_name = "font-size",
+			.short_name = 's',
+			.flags = G_OPTION_FLAG_IN_MAIN,
+			.arg = G_OPTION_ARG_INT,
+			.arg_data = &( context->font_size ),
+			.description = "Base font size (px)",
+			.arg_description = "size",
 		}, {
 			.long_name = "title",
 			.short_name = 't',
@@ -843,10 +866,17 @@ static void plot_draw( GtkDrawingArea* plot,
 
 	double margin_reqs[4] = { 5., 5., 5., 5. };
 
+	char font_desc_string[512];
+
 	if ( NULL == context->title_layout && NULL != context->title ) {
 		context->title_layout = pango_cairo_create_layout( cr );
+		sprintf( font_desc_string, "%s Bold %dpx",
+			NULL == context->font_name ? "Sans" : context->font_name,
+			2 * context->font_size );
+		context->title_font_description =
+			pango_font_description_from_string( font_desc_string );
 		pango_layout_set_font_description( context->title_layout,
-			context->font_description );
+			context->title_font_description );
 		pango_layout_set_text(
 			context->title_layout, context->title, -1 );
 	}
@@ -857,10 +887,15 @@ static void plot_draw( GtkDrawingArea* plot,
 		margin_reqs[2] += height + 3;
 	}
 
+	sprintf( font_desc_string, "%s %dpx",
+		NULL == context->font_name ? "Sans" : context->font_name,
+		(int) ( 1.5 * context->font_size ) );
+	context->label_font_description =
+		pango_font_description_from_string( font_desc_string );
 	if ( NULL == context->xlab_layout && NULL != context->xlab ) {
 		context->xlab_layout = pango_cairo_create_layout( cr );
 		pango_layout_set_font_description( context->xlab_layout,
-			context->font_description );
+			context->label_font_description );
 		pango_layout_set_text(
 			context->xlab_layout, context->xlab, -1 );
 	}
@@ -874,7 +909,7 @@ static void plot_draw( GtkDrawingArea* plot,
 	if ( NULL == context->yllab_layout && NULL != context->yllab ) {
 		context->yllab_layout = pango_cairo_create_layout( cr );
 		pango_layout_set_font_description( context->yllab_layout,
-			context->font_description );
+			context->label_font_description );
 		pango_layout_set_text(
 			context->yllab_layout, context->yllab, -1 );
 	}
@@ -888,7 +923,7 @@ static void plot_draw( GtkDrawingArea* plot,
 	if ( NULL == context->yrlab_layout && NULL != context->yrlab ) {
 		context->yrlab_layout = pango_cairo_create_layout( cr );
 		pango_layout_set_font_description( context->yrlab_layout,
-			context->font_description );
+			context->label_font_description );
 		pango_layout_set_text(
 			context->yrlab_layout, context->yrlab, -1 );
 	}
@@ -899,6 +934,12 @@ static void plot_draw( GtkDrawingArea* plot,
 		margin_reqs[3] += height + 3;
 	}
 
+	sprintf( font_desc_string, "%s %dpx",
+		NULL == context->font_name ? "Sans" : context->font_name,
+		context->font_size );
+	context->tick_font_description =
+		pango_font_description_from_string( font_desc_string );
+
 	/* Clear */
 
 	cairo_save( cr );
@@ -1043,7 +1084,7 @@ static void plot_draw( GtkDrawingArea* plot,
 				pango_cairo_create_layout( cr );
 			pango_layout_set_font_description(
 				context->xtick_layouts.layouts[i],
-				context->font_description );
+				context->tick_font_description );
 		}
 		sprintf( tick_buffer, "%.3g",
 			xrange[0] + ( (double) i ) / ( xdivs - 1 ) * ( xrange[1] - xrange[0] ) );
@@ -1075,7 +1116,7 @@ static void plot_draw( GtkDrawingArea* plot,
 				pango_cairo_create_layout( cr );
 			pango_layout_set_font_description(
 				context->yltick_layouts.layouts[i],
-				context->font_description );
+				context->tick_font_description );
 		}
 		sprintf( tick_buffer, "%.3g", ylrange[0] +
 			( (double) i ) / ( yldivs - 1 ) * ( ylrange[1] - ylrange[0] ) );
@@ -1107,7 +1148,7 @@ static void plot_draw( GtkDrawingArea* plot,
 				pango_cairo_create_layout( cr );
 			pango_layout_set_font_description(
 				context->yrtick_layouts.layouts[i],
-				context->font_description );
+				context->tick_font_description );
 		}
 		sprintf( tick_buffer, "%.3g", yrrange[0] +
 			( (double) i ) / ( yrdivs - 1 ) * ( yrrange[1] - yrrange[0] ) );