diff --git a/Elwig/Dialogs/ManualWeighingDialog.xaml b/Elwig/Dialogs/ManualWeighingDialog.xaml
new file mode 100644
index 0000000..5ad9043
--- /dev/null
+++ b/Elwig/Dialogs/ManualWeighingDialog.xaml
@@ -0,0 +1,57 @@
+<Window x:Class="Elwig.Dialogs.ManualWeighingDialog"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Elwig.Dialogs"
+        mc:Ignorable="d"
+        ResizeMode="NoResize"
+        ShowInTaskbar="False"
+        Topmost="True"
+        WindowStartupLocation="CenterOwner"
+        FocusManager.FocusedElement="{Binding ElementName=WeightInput}"
+        Title="Handwiegung" Height="170" Width="400">
+    <Window.Resources>
+        <Style TargetType="Label">
+            <Setter Property="HorizontalAlignment" Value="Left"/>
+            <Setter Property="VerticalAlignment" Value="Top"/>
+            <Setter Property="Padding" Value="2,4,2,4"/>
+            <Setter Property="Height" Value="25"/>
+        </Style>
+        <Style TargetType="TextBox">
+            <Setter Property="HorizontalAlignment" Value="Stretch"/>
+            <Setter Property="VerticalAlignment" Value="Top"/>
+            <Setter Property="FontSize" Value="14"/>
+            <Setter Property="Padding" Value="2"/>
+            <Setter Property="Height" Value="25"/>
+            <Setter Property="TextWrapping" Value="NoWrap"/>
+        </Style>
+        <Style TargetType="Button">
+            <Setter Property="HorizontalAlignment" Value="Right"/>
+            <Setter Property="VerticalAlignment" Value="Bottom"/>
+            <Setter Property="Width" Value="100"/>
+            <Setter Property="Height" Value="25"/>
+        </Style>
+    </Window.Resources>
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="70"/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+
+        <Label Content="Gewicht:" Margin="10,20,10,10"/>
+        <Grid Grid.Column="1" Width="70" Height="25" Margin="0,20,10,10" HorizontalAlignment="Left" VerticalAlignment="Top">
+            <TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2"
+                     TextChanged="WeightInput_TextChanged"/>
+            <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10" Padding="2,4,2,4"/>
+        </Grid>
+
+        <Label Content="Grund:" Margin="10,50,10,10"/>
+        <TextBox x:Name="ReasonInput" Grid.Column="1" Margin="0,50,10,10"
+                 TextChanged="ReasonInput_TextChanged"/>
+
+        <Button x:Name="ConfirmButton" Content="Bestätigen" Margin="10,10,115,10" Grid.Column="1" IsEnabled="False" IsDefault="True"
+                Click="ConfirmButton_Click"/>
+        <Button x:Name="CancelButton" Content="Abbrechen" Margin="10,10,10,10" Grid.Column="1" IsCancel="True"/>
+    </Grid>
+</Window>
diff --git a/Elwig/Dialogs/ManualWeighingDialog.xaml.cs b/Elwig/Dialogs/ManualWeighingDialog.xaml.cs
new file mode 100644
index 0000000..5c4d036
--- /dev/null
+++ b/Elwig/Dialogs/ManualWeighingDialog.xaml.cs
@@ -0,0 +1,41 @@
+using Elwig.Helpers;
+using System.Text.RegularExpressions;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace Elwig.Dialogs {
+    public partial class ManualWeighingDialog : Window {
+
+        public int Weight = 0;
+        public string? Reason = null;
+
+        public ManualWeighingDialog() {
+            InitializeComponent();
+        }
+
+        private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
+            DialogResult = true;
+            Weight = int.Parse(WeightInput.Text.Replace(".", ""));
+            Reason = Regex.Replace(ReasonInput.Text, @"\s+", "").Trim();
+            if (Reason == "") {
+                Reason = null;
+            } else if (!Reason.EndsWith(".") || !Reason.EndsWith("!") || !Reason.EndsWith("?")) {
+                Reason += ".";
+            }
+            Close();
+        }
+
+        private void UpdateButtons() {
+            ConfirmButton.IsEnabled = WeightInput.Text.Length > 0 && ReasonInput.Text.Trim().Length > 0;
+        }
+
+        private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {
+            Validator.CheckInteger(WeightInput, true, 5);
+            UpdateButtons();
+        }
+
+        private void ReasonInput_TextChanged(object sender, TextChangedEventArgs evt) {
+            UpdateButtons();
+        }
+    }
+}
diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs
index 71521ca..4ac0f5c 100644
--- a/Elwig/Helpers/Utils.cs
+++ b/Elwig/Helpers/Utils.cs
@@ -7,6 +7,7 @@ using System.Diagnostics;
 using System.Text.RegularExpressions;
 using System.IO.Ports;
 using System.Net.Sockets;
+using Elwig.Dialogs;
 
 namespace Elwig.Helpers {
     public static partial class Utils {
@@ -134,5 +135,10 @@ namespace Elwig.Helpers {
             }
             return i;
         }
+
+        public static (int, string?)? ShowManualWeighingDialog() {
+            var d = new ManualWeighingDialog();
+            return d.ShowDialog() == true ? (d.Weight, d.Reason) : null;
+        }
     }
 }
diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs
index f929687..11e4e79 100644
--- a/Elwig/Windows/AdministrationWindow.cs
+++ b/Elwig/Windows/AdministrationWindow.cs
@@ -252,6 +252,10 @@ namespace Elwig.Windows {
             };
         }
 
+        protected bool InputTextChanged(TextBox input) {
+            return InputTextChanged(input, new ValidationResult(true, null));
+        }
+
         protected bool InputTextChanged(TextBox input, Func<TextBox, bool, ValidationResult> checker) {
             return InputTextChanged(input, (tb, required, ctx) => checker(tb, required));
         }
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml
index 29f7935..203bd95 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml
@@ -248,8 +248,8 @@
 
                 <Label Content="Gewicht:" Margin="10,10,10,10"/>
                 <Grid Grid.Column="1" Width="70" Height="25" Margin="0,10,10,10" HorizontalAlignment="Left" VerticalAlignment="Top">
-                    <TextBox x:Name="WeightInput"  TextAlignment="Right" Padding="2,2,17,2"
-                             IsReadOnly="True"/>
+                    <TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2" IsReadOnly="True"
+                             TextChanged="WeightInput_TextChanged"/>
                     <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10"/>
                 </Grid>
 
@@ -260,6 +260,7 @@
                           VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,75,10,10" Grid.Column="0" Grid.ColumnSpan="2"/>
 
                 <Button x:Name="WeighingManualButton" Content="Handwiegung" Width="120"
+                        Click="WeighingManualButton_Click"
                         VerticalAlignment="Top" HorizontalAlignment="Right" Margin="10,10,10,10" Grid.Column="2"/>
                 <Button x:Name="WeighingAButton" Content="Wiegen A" Width="120"
                         VerticalAlignment="Top" HorizontalAlignment="Right" Margin="10,42,10,10" Grid.Column="2"/>
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
index 1729d4d..59df322 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
@@ -1,3 +1,4 @@
+using Elwig.Dialogs;
 using Elwig.Helpers;
 using Elwig.Models;
 using Microsoft.EntityFrameworkCore;
@@ -22,6 +23,8 @@ namespace Elwig.Windows {
         private List<string> TextFilter = new();
         private readonly RoutedCommand CtrlF = new();
 
+        private string? ManualWeighingReason = null;
+
         public DeliveryAdminWindow(bool receipt = false) {
             InitializeComponent();
             CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control));
@@ -216,7 +219,7 @@ namespace Elwig.Windows {
             ControlUtils.SelectComboBoxItem(WineKgInput, k => (k as AT_Kg)?.KgNr, p?.KgNr);
             ControlUtils.SelectComboBoxItem(WineRdInput, r => (r as WbRd)?.RdNr, p?.RdNr);
             ControlUtils.SelectComboBoxItem(WineOriginInput, r => (r as WineOrigin)?.HkId, p?.HkId);
-            WeightInput.Text = p?.Weight.ToString() ?? "";
+            WeightInput.Text = (p != null) ? $"{p.Weight:N0}" : "";
             ManualWeighingInput.IsChecked = p?.ManualWeighing ?? false;
             GerebeltGewogenInput.IsChecked = p?.IsGerebelt ?? false;
             ControlUtils.SelectCheckComboBoxItems(ModifiersInput, p?.Modifiers, i => (i as Modifier)?.ModId);
@@ -453,6 +456,14 @@ namespace Elwig.Windows {
             // TODO abwerten dialog
         }
 
+        private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) {
+            var res = Utils.ShowManualWeighingDialog();
+            if (res == null) return;
+            WeightInput.Text = $"{res?.Item1:N0}";
+            ManualWeighingInput.IsChecked = true;
+            ManualWeighingReason = res?.Item2;
+        }
+
         private void EditDeliveryButton_Click(object sender, RoutedEventArgs evt) {
             if (DeliveryPartList.SelectedItem == null)
                 return;
@@ -795,5 +806,9 @@ namespace Elwig.Windows {
             var defQual = Context.GetWineQualityLevel(double.Parse(GradationKmwInput.Text)).GetAwaiter().GetResult();
             AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual;
         }
+
+        private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {
+            InputTextChanged((TextBox)sender);
+        }
     }
 }