diff --git a/mobile/lib/controllers/product.dart b/mobile/lib/controllers/product.dart
index b6a138b..c50c1e8 100644
--- a/mobile/lib/controllers/product.dart
+++ b/mobile/lib/controllers/product.dart
@@ -1,159 +1,27 @@
 import 'package:flutter/material.dart';
-import 'package:mobile/models/coordinate.dart';
 import 'package:mobile/models/product.dart';
 import 'package:mobile/results.dart';
-import 'package:mobile/server/client.dart';
+import 'package:mobile/server/mock_server.dart';
 import 'package:mobile/server/server.dart';
 
 class ProductController extends ChangeNotifier {
-  int _nextId = 0;
+  final server = MockServer();
+
   List<Product> products = [];
   String query = "";
   ProductController() {
-    _addAllProducts();
-  }
-
-  int getNextId() {
-    return _nextId++;
-  }
-
-  get filteredProducts {
-    if (query.trim().isEmpty) {
-      return products;
-    }
-    return products.where((product) {
-      final nameLower = product.name.toLowerCase();
-      final descriptionLower = product.description.toLowerCase();
-      final searchLower = query.toLowerCase();
-
-      return nameLower.contains(searchLower) ||
-          descriptionLower.contains(searchLower);
-    }).toList();
-  }
-
-  void searchProducts(String query) {
-    this.query = query;
-    notifyListeners();
-  }
-
-  Result<Product, String> productWithBarcode(String barcode) {
-    for (var i = 0; i < products.length; i++) {
-      if (products[i].barcode == barcode) {
-        return Ok(products[i]);
-      }
-    }
-    return Err("Product with barcode $barcode doesn't exist");
-  }
-
-  void _addAllProducts() {
-    products = [
-      Product(
-          id: _nextId++,
-          name: "Minimælk",
-          priceInDkkCents: 1200,
-          description: "Konventionel minimælk med fedtprocent på 0,4%"),
-      Product(
-          id: _nextId++,
-          name: "Letmælk",
-          priceInDkkCents: 1300,
-          description: "Konventionel letmælk med fedtprocent på 1,5%",
-          location: Coordinate(x: 1800, y: 100)),
-      Product(
-          id: _nextId++,
-          name: "Frilands Øko Supermælk",
-          priceInDkkCents: 2000,
-          description:
-              "Økologisk mælk af frilandskøer med fedtprocent på 3,5%. Ikke homogeniseret eller pasteuriseret. Skaber store muskler og styrker knoglerne 💪"),
-      Product(
-          id: _nextId++,
-          name: "Øko Gulerødder 1 kg",
-          priceInDkkCents: 1000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Øko Agurk",
-          priceInDkkCents: 1000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Æbler 1 kg",
-          priceInDkkCents: 1000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Basmati Ris",
-          priceInDkkCents: 2000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Haribo Mix",
-          priceInDkkCents: 3000,
-          description: ""),
-      Product(
-          id: _nextId++, name: "Smør", priceInDkkCents: 3000, description: ""),
-      Product(
-          id: _nextId++,
-          name: "Harboe Cola",
-          priceInDkkCents: 500,
-          description: ""),
-      Product(
-          id: _nextId++,
-          barcode: "5060337502900",
-          name: "Monster Energi Drik",
-          priceInDkkCents: 1500,
-          description: ""),
-      Product(
-          id: _nextId++,
-          barcode: "5712870659220",
-          name: "Amper Energi Drik",
-          priceInDkkCents: 750,
-          description: ""),
-      Product(
-          id: _nextId++,
-          barcode: "5710326001937",
-          name: "Danskvand Med Brus",
-          priceInDkkCents: 500,
-          description: "Med smag a blåbær"),
-      Product(
-          id: _nextId++,
-          name: "Spaghetti",
-          priceInDkkCents: 1000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Rød Cecil",
-          priceInDkkCents: 6000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          name: "Jägermeister 750 ml",
-          priceInDkkCents: 12000,
-          description: ""),
-      Product(
-          id: _nextId++,
-          barcode: "5711953068881",
-          name: "Protein Chokoladedrik",
-          priceInDkkCents: 1500,
-          description: "Arla's protein chokolade drik der giver store muskler"),
-    ];
-  }
-}
-
-class ProductControllerByServer extends ChangeNotifier {
-  final client = BackendServer();
-  List<Product> products = [];
-  String query = "";
-  ProductControllerByServer() {
     fetchProductsFromServer();
   }
 
   Future<void> fetchProductsFromServer() async {
-    final res = client.allProducts();
-    if (res is Error) {
-      return;
+    final res = await server.allProducts();
+    switch (res) {
+      case Success<List<Product>>(data: final data):
+        products = data;
+        notifyListeners();
+      case Error<List<Product>>():
+        return;
     }
-    products = (res as Success<List<Product>>).data;
-    notifyListeners();
   }
 
   get filteredProducts {
diff --git a/mobile/lib/controllers/receipt.dart b/mobile/lib/controllers/receipt.dart
index f48b87c..54a60cf 100644
--- a/mobile/lib/controllers/receipt.dart
+++ b/mobile/lib/controllers/receipt.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/models/product.dart';
-import 'package:mobile/repos/cart.dart';
+import 'package:mobile/controllers/cart.dart';
 
 class ReceiptController extends ChangeNotifier {
   int nextId = 0;
diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart
index abe4532..efbf729 100644
--- a/mobile/lib/main.dart
+++ b/mobile/lib/main.dart
@@ -1,22 +1,21 @@
 import 'package:flutter/material.dart';
 import 'package:google_fonts/google_fonts.dart';
 import 'package:mobile/pages/log_in_page.dart';
-import 'package:mobile/repos/add_to_cart_state.dart';
-import 'package:mobile/repos/cart.dart';
-import 'package:mobile/repos/location_image.dart';
-import 'package:mobile/repos/paying_state.dart';
-import 'package:mobile/repos/product.dart';
-import 'package:mobile/repos/receipt.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/add_to_cart_state.dart';
+import 'package:mobile/controllers/cart.dart';
+import 'package:mobile/controllers/location_image.dart';
+import 'package:mobile/controllers/paying_state.dart';
+import 'package:mobile/controllers/product.dart';
+import 'package:mobile/controllers/receipt.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:provider/provider.dart';
-import 'package:mobile/repos/routing.dart';
+import 'package:mobile/controllers/routing.dart';
 
 void main() {
   runApp(const MyApp());
 }
 
 class MyApp extends StatelessWidget {
-  final apiUrl = "10.135.51.114:8080/api";
   const MyApp({super.key});
 
   @override
diff --git a/mobile/lib/pages/all_products_page.dart b/mobile/lib/pages/all_products_page.dart
index 2eb1ee9..0ed3782 100644
--- a/mobile/lib/pages/all_products_page.dart
+++ b/mobile/lib/pages/all_products_page.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/models/product.dart';
-import 'package:mobile/repos/product.dart';
+import 'package:mobile/controllers/product.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:mobile/widgets/sized_card.dart';
 import 'package:provider/provider.dart';
diff --git a/mobile/lib/pages/all_receipts_page.dart b/mobile/lib/pages/all_receipts_page.dart
index 70cfe0c..adf3b5c 100644
--- a/mobile/lib/pages/all_receipts_page.dart
+++ b/mobile/lib/pages/all_receipts_page.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/pages/receipt_page.dart';
-import 'package:mobile/repos/receipt.dart';
+import 'package:mobile/controllers/receipt.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:provider/provider.dart';
 
diff --git a/mobile/lib/pages/cart_page.dart b/mobile/lib/pages/cart_page.dart
index 11275fa..9f4a599 100644
--- a/mobile/lib/pages/cart_page.dart
+++ b/mobile/lib/pages/cart_page.dart
@@ -4,9 +4,9 @@ import 'package:barcode_scan2/platform_wrapper.dart';
 import 'package:flutter/material.dart';
 import 'package:mobile/models/product.dart';
 import 'package:mobile/pages/finish_shopping_page.dart';
-import 'package:mobile/repos/cart.dart';
-import 'package:mobile/repos/product.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/cart.dart';
+import 'package:mobile/controllers/product.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/results.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:mobile/widgets/primary_button.dart';
diff --git a/mobile/lib/pages/dashboard.dart b/mobile/lib/pages/dashboard.dart
index 2af5762..dded58e 100644
--- a/mobile/lib/pages/dashboard.dart
+++ b/mobile/lib/pages/dashboard.dart
@@ -3,9 +3,9 @@ import 'package:mobile/pages/all_products_page.dart';
 import 'package:mobile/pages/cart_page.dart';
 import 'package:mobile/pages/all_receipts_page.dart';
 import 'package:mobile/pages/home_page.dart';
-import 'package:mobile/repos/routing.dart';
-import 'package:mobile/repos/cart.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/routing.dart';
+import 'package:mobile/controllers/cart.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:provider/provider.dart';
 
 class Dashboard extends StatelessWidget {
diff --git a/mobile/lib/pages/finish_shopping_page.dart b/mobile/lib/pages/finish_shopping_page.dart
index 846b146..16793ea 100644
--- a/mobile/lib/pages/finish_shopping_page.dart
+++ b/mobile/lib/pages/finish_shopping_page.dart
@@ -1,9 +1,9 @@
 import 'package:flutter/material.dart';
-import 'package:mobile/repos/routing.dart';
-import 'package:mobile/repos/cart.dart';
-import 'package:mobile/repos/paying_state.dart';
-import 'package:mobile/repos/receipt.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/routing.dart';
+import 'package:mobile/controllers/cart.dart';
+import 'package:mobile/controllers/paying_state.dart';
+import 'package:mobile/controllers/receipt.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/results.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:mobile/widgets/primary_button.dart';
diff --git a/mobile/lib/pages/home_page.dart b/mobile/lib/pages/home_page.dart
index 6809753..b5b2c96 100644
--- a/mobile/lib/pages/home_page.dart
+++ b/mobile/lib/pages/home_page.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/pages/settings_page.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:provider/provider.dart';
 
diff --git a/mobile/lib/pages/log_in_page.dart b/mobile/lib/pages/log_in_page.dart
index db8e679..2fac9bb 100644
--- a/mobile/lib/pages/log_in_page.dart
+++ b/mobile/lib/pages/log_in_page.dart
@@ -1,6 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/pages/register_page.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/results.dart';
 import 'package:mobile/widgets/error_box.dart';
 import 'package:mobile/widgets/primary_button.dart';
diff --git a/mobile/lib/pages/product_location_page.dart b/mobile/lib/pages/product_location_page.dart
index 0d0067f..f437136 100644
--- a/mobile/lib/pages/product_location_page.dart
+++ b/mobile/lib/pages/product_location_page.dart
@@ -2,7 +2,7 @@ import 'dart:ui' as ui;
 import 'package:flutter/material.dart';
 import 'package:mobile/models/coordinate.dart';
 import 'package:mobile/models/product.dart';
-import 'package:mobile/repos/location_image.dart';
+import 'package:mobile/controllers/location_image.dart';
 import 'package:provider/provider.dart';
 
 class ProductLocationPage extends StatelessWidget {
diff --git a/mobile/lib/pages/product_page.dart b/mobile/lib/pages/product_page.dart
index 94039da..c162b12 100644
--- a/mobile/lib/pages/product_page.dart
+++ b/mobile/lib/pages/product_page.dart
@@ -1,8 +1,8 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/models/product.dart';
 import 'package:mobile/pages/product_location_page.dart';
-import 'package:mobile/repos/add_to_cart_state.dart';
-import 'package:mobile/repos/cart.dart';
+import 'package:mobile/controllers/add_to_cart_state.dart';
+import 'package:mobile/controllers/cart.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:mobile/widgets/primary_button.dart';
 import 'package:provider/provider.dart';
diff --git a/mobile/lib/pages/receipt_page.dart b/mobile/lib/pages/receipt_page.dart
index b3a2fce..0225ce5 100644
--- a/mobile/lib/pages/receipt_page.dart
+++ b/mobile/lib/pages/receipt_page.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:mobile/repos/receipt.dart';
+import 'package:mobile/controllers/receipt.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:mobile/widgets/receipt_item.dart';
 
diff --git a/mobile/lib/pages/register_page.dart b/mobile/lib/pages/register_page.dart
index de00cd8..27d5ff6 100644
--- a/mobile/lib/pages/register_page.dart
+++ b/mobile/lib/pages/register_page.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/results.dart';
 import 'package:mobile/widgets/error_box.dart';
 import 'package:mobile/widgets/primary_button.dart';
diff --git a/mobile/lib/pages/settings_page.dart b/mobile/lib/pages/settings_page.dart
index e67e11c..b0cdd6e 100644
--- a/mobile/lib/pages/settings_page.dart
+++ b/mobile/lib/pages/settings_page.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:mobile/pages/log_in_page.dart';
 import 'package:mobile/pages/settings_pages/saldo.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:provider/provider.dart';
 
 class _Page {
diff --git a/mobile/lib/pages/settings_pages/saldo.dart b/mobile/lib/pages/settings_pages/saldo.dart
index dbdbcbc..5704514 100644
--- a/mobile/lib/pages/settings_pages/saldo.dart
+++ b/mobile/lib/pages/settings_pages/saldo.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'package:mobile/repos/user.dart';
+import 'package:mobile/controllers/user.dart';
 import 'package:mobile/utils/price.dart';
 import 'package:provider/provider.dart';
 
diff --git a/mobile/lib/server/client.dart b/mobile/lib/server/backend_server.dart
similarity index 100%
rename from mobile/lib/server/client.dart
rename to mobile/lib/server/backend_server.dart
diff --git a/mobile/lib/server/mock_server.dart b/mobile/lib/server/mock_server.dart
new file mode 100644
index 0000000..50359ec
--- /dev/null
+++ b/mobile/lib/server/mock_server.dart
@@ -0,0 +1,118 @@
+import 'package:mobile/models/coordinate.dart';
+import 'package:mobile/models/product.dart';
+import 'package:mobile/server/server.dart';
+
+class MockServer implements Server {
+  @override
+  Future<Response<List<Product>>> allProducts() async {
+    var nextId = 0;
+    return Success(data: <Product>[
+      Product(
+          id: nextId++,
+          name: "Minimælk",
+          priceInDkkCents: 1200,
+          description: "Konventionel minimælk med fedtprocent på 0,4%"),
+      Product(
+          id: nextId++,
+          name: "Letmælk",
+          priceInDkkCents: 1300,
+          description: "Konventionel letmælk med fedtprocent på 1,5%",
+          location: Coordinate(x: 1800, y: 100)),
+      Product(
+          id: nextId++,
+          name: "Frilands Øko Supermælk",
+          priceInDkkCents: 2000,
+          description:
+              "Økologisk mælk af frilandskøer med fedtprocent på 3,5%. Ikke homogeniseret eller pasteuriseret. Skaber store muskler og styrker knoglerne 💪"),
+      Product(
+          id: nextId++,
+          name: "Øko Gulerødder 1 kg",
+          priceInDkkCents: 1000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Øko Agurk",
+          priceInDkkCents: 1000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Æbler 1 kg",
+          priceInDkkCents: 1000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Basmati Ris",
+          priceInDkkCents: 2000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Haribo Mix",
+          priceInDkkCents: 3000,
+          description: ""),
+      Product(
+          id: nextId++, name: "Smør", priceInDkkCents: 3000, description: ""),
+      Product(
+          id: nextId++,
+          name: "Harboe Cola",
+          priceInDkkCents: 500,
+          description: ""),
+      Product(
+          id: nextId++,
+          barcode: "5060337502900",
+          name: "Monster Energi Drik",
+          priceInDkkCents: 1500,
+          description: ""),
+      Product(
+          id: nextId++,
+          barcode: "5712870659220",
+          name: "Amper Energi Drik",
+          priceInDkkCents: 750,
+          description: ""),
+      Product(
+          id: nextId++,
+          barcode: "5710326001937",
+          name: "Danskvand Med Brus",
+          priceInDkkCents: 500,
+          description: "Med smag a blåbær"),
+      Product(
+          id: nextId++,
+          name: "Spaghetti",
+          priceInDkkCents: 1000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Rød Cecil",
+          priceInDkkCents: 6000,
+          description: ""),
+      Product(
+          id: nextId++,
+          name: "Jägermeister 750 ml",
+          priceInDkkCents: 12000,
+          description: ""),
+      Product(
+          id: nextId++,
+          barcode: "5711953068881",
+          name: "Protein Chokoladedrik",
+          priceInDkkCents: 1500,
+          description: "Arla's protein chokolade drik der giver store muskler"),
+    ]);
+  }
+
+  @override
+  Future<Response<Null>> register(
+    String name,
+    String email,
+    String password,
+  ) async {
+    return Success(data: null);
+  }
+
+  @override
+  Future<Response<Null>> login(
+    String name,
+    String email,
+    String password,
+  ) async {
+    return Success(data: null);
+  }
+}
diff --git a/mobile/test/widget_test.dart b/mobile/test/widget_test.dart
index a6b7d51..7258710 100644
--- a/mobile/test/widget_test.dart
+++ b/mobile/test/widget_test.dart
@@ -13,7 +13,7 @@ import 'package:mobile/main.dart';
 void main() {
   testWidgets('Counter increments smoke test', (WidgetTester tester) async {
     // Build our app and trigger a frame.
-    await tester.pumpWidget(const MyApp());
+    await tester.pumpWidget(MyApp());
 
     // Verify that our counter starts at 0.
     expect(find.text('0'), findsOneWidget);