diff --git a/prisma/migrations/20230302134013_/migration.sql b/prisma/migrations/20230302134013_/migration.sql
new file mode 100644
index 0000000000000000000000000000000000000000..ea4b5f263577f567f7a5a911bb6f4f95f5a46146
--- /dev/null
+++ b/prisma/migrations/20230302134013_/migration.sql
@@ -0,0 +1,5 @@
+-- AlterTable
+ALTER TABLE "Item" ADD COLUMN     "bought" INTEGER NOT NULL DEFAULT 0;
+
+-- AlterTable
+ALTER TABLE "ItemCategory" ADD COLUMN     "position" INTEGER NOT NULL DEFAULT 0;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 3005a459566575e6c2f4b40f7df9a324614da35b..a5c4c336290988d7b7fa9504d57cecaf0ef8c1ca 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -12,7 +12,7 @@ datasource db {
 
 model User {
   id        Int      @id @default(autoincrement())
-  email     String   @unique
+  email     String
   name      String
   balance   Int      @default(0)
   createdAt DateTime @default(now())
@@ -43,6 +43,7 @@ model Transaction {
 model ItemCategory {
   id        Int      @id @default(autoincrement())
   name      String
+  position  Int      @default(0)
   createdAt DateTime @default(now())
   items     Item[]
 }
@@ -56,6 +57,7 @@ model Item {
   createdAt DateTime @default(now())
   image     String?
   stock     Int      @default(0)
+  bought    Int      @default(0)
   available Boolean  @default(true)
   restocks  Restock[]
   transactions ItemTransaction[]
diff --git a/src/routes/admin/api/articles.js b/src/routes/admin/api/articles.js
index f794b28c9bcf6e208721fb92bd4cd87b96116835..825b737eb3cb86265182324f42947d2020d26aca 100644
--- a/src/routes/admin/api/articles.js
+++ b/src/routes/admin/api/articles.js
@@ -52,12 +52,12 @@ export async function updateArticle(code, name, price, categoryId, image, availa
 	return db.item.update({where: {code}, data: {name, price, categoryId, image, available}});
 }
 
-export async function createCategory(name){
-	return db.itemCategory.create({data: {name}});
+export async function createCategory(name, position){
+	return db.itemCategory.create({data: {name, position}});
 }
 
-export async function updateCategory(id, name){
-	return db.itemCategory.update({where: {id}, data: {name}});
+export async function updateCategory(id, name, position){
+	return db.itemCategory.update({where: {id}, data: {name, position}});
 }
 
 export async function deleteCategory(id){
diff --git a/src/routes/admin/product/+page.server.js b/src/routes/admin/product/+page.server.js
index 285bb0acb0091ae2be89c53e6b336373e286f86a..96378e6f8bedd475b81978da7593b1c3dbd67eba 100644
--- a/src/routes/admin/product/+page.server.js
+++ b/src/routes/admin/product/+page.server.js
@@ -64,16 +64,18 @@ export const actions = {
 		const data = await event.request.formData();
 		const id = parseInt(data.get('id'));
 		const name = data.get('name');
-		if(!id || !name) return { error: "Invalid form data" };
-		const category = await updateCategory(id, name);
+		const position = parseInt(data.get('position'));
+		if(!id || !name || !Number.isInteger(position)) return { error: "Invalid form data" };
+		const category = await updateCategory(id, name, position);
 		delete category.createdAt;
 		return {success: true, category};
 	},
 	createCategory: async event => {
 		const data = await event.request.formData();
 		const name = data.get('name');
-		if(!name) return { error: "Invalid form data" };
-		const category = await createCategory(name);
+		const position = parseInt(data.get('position'));
+		if(!name || !Number.isInteger(position)) return { error: "Invalid form data" };
+		const category = await createCategory(name, position);
 		delete category.createdAt;
 		return {success: true, category};
 	}
diff --git a/src/routes/admin/product/CategoryItem.svelte b/src/routes/admin/product/CategoryItem.svelte
index a2a0a833ae6f88083bac8d5c5c31e27d4754b61f..0264335c011aeebba76b41e23377b4ab160972a3 100644
--- a/src/routes/admin/product/CategoryItem.svelte
+++ b/src/routes/admin/product/CategoryItem.svelte
@@ -2,7 +2,7 @@
 	import { enhance } from "$app/forms";
 	import { addMessage, MessageType } from "$lib/messages";
 	
-	export let name, id, canDelete;
+	export let name, position, id, canDelete;
 	let edit = false;
 	function deleteCategory(){
 		fetch("/admin/category", {
@@ -25,6 +25,7 @@
 		return async ({result})=>{
 			if(result.type === "success"){
 				name = result.data.category.name;
+				position = result.data.category.position;
 				form.reset();
 				edit = false;
 				addMessage(MessageType.SUCCESS, "Kategorie wurde bearbeitet");
@@ -35,12 +36,13 @@
 		};
 	}}>
 		<input type="text" name="name" value={name} />
+		<input type="number" name="position" step="1" value={position} />
 		<input type="hidden" name="id" value={id} />
 		<button type="submit">Speichern</button>
 		<button type="button" on:click={()=>edit=false}>Abbrechen</button>
 	</form>
 {:else}
-	{name}
+	{name} ({position})
 	<button type="button" on:click={()=>edit=true}>Bearbeiten</button>
 	<button type="button" on:click={deleteCategory} disabled={!canDelete}>Löschen</button>
 {/if}
diff --git a/src/routes/admin/product/CategoryList.svelte b/src/routes/admin/product/CategoryList.svelte
index 4a50d87be986a0665aa51f9cce7393e657235b72..45a0f7d3842a418307e75db2cf8d16c98388c0a1 100644
--- a/src/routes/admin/product/CategoryList.svelte
+++ b/src/routes/admin/product/CategoryList.svelte
@@ -8,7 +8,7 @@
 
 <ul>
 	{#each categories as category}
-		<li><CategoryItem bind:name={category.name} id={category.id} canDelete={products.filter(p=>p.categoryId==category.id)==0} /></li>
+		<li><CategoryItem bind:name={category.name} bind:position={category.position} id={category.id} canDelete={products.filter(p=>p.categoryId==category.id)==0} /></li>
 	{/each}
 	<li>
 		<form action="?/createCategory" method="post" use:enhance={({form, data, cancel})=>{
@@ -24,6 +24,7 @@
 			};
 		}}>
 			<input type="text" name="name" />
+			<input type="number" name="position" step="1" />
 			<button type="submit">Erstellen</button>
 		</form>
 	</li>
diff --git a/src/routes/api/articles.js b/src/routes/api/articles.js
index c0ae4d3722d161be2eb2d7dfd8d6f7596d5daf89..01e50423a0bebac41542cd40411e97615d317093 100644
--- a/src/routes/api/articles.js
+++ b/src/routes/api/articles.js
@@ -2,7 +2,7 @@ import { db } from "$lib/server/database";
 
 export async function getArticles(includeNotAvailable = false) {
 	if (includeNotAvailable) return db.item.findMany();
-	else return db.item.findMany({ where: { available: true } });
+	else return db.item.findMany({ where: { available: true }, orderBy: { bought: "desc" } });
 }
 
 export async function getArticle(code) {
@@ -10,7 +10,7 @@ export async function getArticle(code) {
 }
 
 export async function getCategories() {
-	return db.itemCategory.findMany();
+	return db.itemCategory.findMany({ orderBy: { position: "asc" } });
 }
 
 export async function getCategory(id) {
diff --git a/src/routes/api/transactions.js b/src/routes/api/transactions.js
index 3e9a543ee603b2febfb0c67d4fea224a3f17d70c..442cf4212931063225cb54625ae270ddecf0b0c5 100644
--- a/src/routes/api/transactions.js
+++ b/src/routes/api/transactions.js
@@ -14,6 +14,7 @@ export async function buyArticles(userId, card, items, noBalance=false) {
 			where: { code: item.code },
 			data: {
 				stock: { decrement: 1 },
+				bought: { increment: 1 },
 				transactions: {
 					create: {
 						price: item.price,