diff --git a/bgpwtf/invoice/main.go b/bgpwtf/invoice/main.go
index d93034c..5133010 100644
--- a/bgpwtf/invoice/main.go
+++ b/bgpwtf/invoice/main.go
@@ -23,42 +23,8 @@
 }
 
 func (s *service) CreateInvoice(ctx context.Context, req *pb.CreateInvoiceRequest) (*pb.CreateInvoiceResponse, error) {
-	if req.InvoiceData == nil {
-		return nil, status.Error(codes.InvalidArgument, "invoice data must be given")
-	}
-	if len(req.InvoiceData.Item) < 1 {
-		return nil, status.Error(codes.InvalidArgument, "invoice data must contain at least one item")
-	}
-	for i, item := range req.InvoiceData.Item {
-		if item.Title == "" {
-			return nil, status.Errorf(codes.InvalidArgument, "invoice data item %d must have title set", i)
-		}
-		if item.Count == 0 || item.Count > 1000000 {
-			return nil, status.Errorf(codes.InvalidArgument, "invoice data item %d must have correct count", i)
-		}
-		if item.UnitPrice == 0 {
-			return nil, status.Errorf(codes.InvalidArgument, "invoice data item %d must have correct unit price", i)
-		}
-		if item.Vat > 100000 {
-			return nil, status.Errorf(codes.InvalidArgument, "invoice data item %d must have correct vat set", i)
-		}
-	}
-	if len(req.InvoiceData.CustomerBilling) < 1 {
-		return nil, status.Error(codes.InvalidArgument, "invoice data must contain at least one line of the customer's billing address")
-	}
-	if len(req.InvoiceData.InvoicerBilling) < 1 {
-		return nil, status.Error(codes.InvalidArgument, "invoice data must contain at least one line of the invoicer's billing address")
-	}
-	for i, c := range req.InvoiceData.InvoicerContact {
-		if c.Medium == "" {
-			return nil, status.Errorf(codes.InvalidArgument, "contact point %d must have medium set", i)
-		}
-		if c.Contact == "" {
-			return nil, status.Errorf(codes.InvalidArgument, "contact point %d must have contact set", i)
-		}
-	}
-	if req.InvoiceData.InvoicerVatId == "" {
-		return nil, status.Error(codes.InvalidArgument, "invoice data must contain invoicer's vat id")
+	if err := validateInvoiceData(req.InvoiceData); err != nil {
+		return nil, status.Errorf(codes.InvalidArgument, "invoice data: %v", err)
 	}
 
 	uid, err := s.m.createInvoice(ctx, req.InvoiceData)
