diff --git a/aim-sort/Makefile b/aim-sort/Makefile
index 8bc9d49c2d8f95ad0484ef17ebff2252736e8ce0..4f3c6ce421d0c606d2024d678055fe8a05fa5413 100644
--- a/aim-sort/Makefile
+++ b/aim-sort/Makefile
@@ -17,7 +17,7 @@ ITERS=20
 all: aim-opt aim-dbg
 
 
-random: random.c
+seq-gen: seq-gen.c
 	$(CC) $(OPTCFLAGS) -o $@ $^ $(LDFLAGS) 
 
 aim-opt: aim-run.c exercise.c
diff --git a/aim-sort/seq-gen.c b/aim-sort/seq-gen.c
new file mode 100644
index 0000000000000000000000000000000000000000..4b87080535210761e17f82bd7162e30549ac6384
--- /dev/null
+++ b/aim-sort/seq-gen.c
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define swap(a,b) do { __typeof(a) t = a; a = b; b = t; } while (0);
+void qs(int *seq, int l, int r){
+	if(l < r){
+		int p = l;
+		for(int i = l + 1; i < r; i++){
+			if(seq[i] < seq[l]){
+				p++;
+				swap(seq[i], seq[p]);
+			}
+		}
+		swap(seq[l], seq[p]);
+		qs(seq, l, p);
+		qs(seq, p + 1, r);
+	}
+}
+
+int main(int argc, char **argv) {
+	if (argc < 3 || argc > 4) { fprintf(stderr, "Usage: [random|sorted|reverse] %s count repeat\n", argv[0]); exit(1); }
+	int count = atoi(argv[2]);
+	int repeat = 1;
+	char *type = argv[1];
+	if (argc == 4) repeat = atoi(argv[3]);
+
+	if (count <= 0) {
+		fprintf(stderr, "Invalid count given: %i\n", count);
+		exit(2);
+	}
+
+	if (repeat < 1) {
+		fprintf(stderr, "Invalid repeat given: %i\n", repeat);
+		exit(2);
+	}
+
+	int *data = malloc(sizeof(int)*count);
+
+	fprintf(stderr, "Generating %i %s sequences, each of size %i\n", repeat, type, count);
+
+	for (int i = 0; i < count; i++) {
+		data[i] = rand();
+	}
+
+	if ((!strcmp(type,"sorted"))||(!strcmp(type,"reverse"))) {
+		qs(data, 0, count);
+		if (!strcmp(type, "reverse")) {
+			for (int i = 0; i < count/2; i++) {
+				swap(data[i],data[count-i-1]);
+			}
+		}
+	}
+
+	/* First, generate a random sequence */
+	printf("%i\n", count*repeat);
+	for (int r = 0; r < repeat; r++) {
+		for (int i = 0; i < count; i++) {
+			printf("%i\n", data[i]);
+		}
+	}
+}