diff --git a/src/main.c b/src/main.c
index 77392903b70d885f7be86cfe5650041d033ed1db..432f70dd71d53c8629f05d17315e903a2d45d3d5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -81,6 +81,8 @@ struct context {
 
 	double margins[4];
 
+	bool sort;
+
 	char* xaxis;
 	size_t xaxis_n;
 
@@ -173,6 +175,13 @@ int main( int argc, char** argv ) {
 			.arg_data = &( context->xaxis ),
 			.description = "Column to use as the x-axis",
 			.arg_description = "column",
+		}, {
+			.long_name = "sort",
+			.short_name = 'S',
+			.flags = G_OPTION_FLAG_IN_MAIN,
+			.arg = G_OPTION_ARG_NONE,
+			.arg_data = &( context->sort ),
+			.description = "Sort x-axis values",
 		}, {
 			.long_name = "right",
 			.short_name = 'r',
@@ -974,7 +983,8 @@ static void parse_data( struct context* context ) {
 	} else {
 
 		data->prev = context->data_end;
-		while ( NULL != data->prev && data->prev->x > data->x ) {
+		while ( context->sort && NULL != data->prev &&
+				data->prev->x > data->x ) {
 			data->prev = data->prev->prev;
 		}
 
@@ -1097,7 +1107,7 @@ static void plot_draw( GtkDrawingArea* plot,
 
 	/* Ranges */
 
-	double xrange[2] = { context->data->x, };
+	double xrange[2] = { context->data->x, context->data->x };
 	double yrrange[2];
 	double ylrange[2];
 	bool lset = false;
@@ -1106,7 +1116,12 @@ static void plot_draw( GtkDrawingArea* plot,
 	for ( struct data* data = context->data;
 			NULL != data; data = data->next ) {
 
-		xrange[1] = data->x;
+		if ( data->x < xrange[0] ) {
+			xrange[0] = data->x;
+		}
+		if ( data->x > xrange[1] ) {
+			xrange[1] = data->x;
+		}
 
 		for ( size_t i = 0; i < context->n_data_columns; i++ ) {