diff -r 5153ab847140 tryton/health_services/__init__.py
--- a/tryton/health_services/__init__.py	Tue Apr 28 20:32:40 2015 -0700
+++ b/tryton/health_services/__init__.py	Thu Apr 30 21:11:36 2015 -0700
@@ -34,6 +34,7 @@
         HealthServiceLine,
         CreateServiceInvoiceInit,
         Invoice,
+        InvoiceLine,
         module='health_services', type_='model')
     Pool.register(
         CreateServiceInvoice,
diff -r 5153ab847140 tryton/health_services/invoice.py
--- a/tryton/health_services/invoice.py	Tue Apr 28 20:32:40 2015 -0700
+++ b/tryton/health_services/invoice.py	Thu Apr 30 21:11:36 2015 -0700
@@ -3,16 +3,60 @@
 from trytond.model import fields
 from trytond.pool import PoolMeta
 
-__all__ = ['Invoice']
+__all__ = ['Invoice', 'InvoiceLine']
 __metaclass__ = PoolMeta
 
 
 class Invoice:
     __name__ = 'account.invoice'
-    health_service = fields.Many2One('gnuhealth.health_service',
-            'Health Service')
-    patient = fields.Many2One('gnuhealth.patient', 'Patient')
+
+    patient = fields.Function(
+            fields.Many2One('gnuhealth.patient', 'Patient',
+                help="Patient in the invoice"),
+                'get_patient')
+
+    health_service = fields.Function(
+            fields.Many2One('gnuhealth.health_service', 'Health Service',
+                help="The service entry"),
+                'get_health_service')
+
+    def get_patient(self, name):
+        try:
+            return self.lines[0].origin.name.patient.id
+        except:
+            return None
+
+    def get_health_service(self, name):
+        try:
+            return self.lines[0].origin.name.id
+        except:
+            return None
 
     @classmethod
     def __setup__(cls):
         super(Invoice, cls).__setup__()
+
+    @classmethod
+    def __register__(cls, module_name):
+        cursor = Transaction().cursor
+        TableHandler = backend.get('TableHandler')
+        table = TableHandler(cursor, cls, module_name)
+
+        # We retrieve the patient
+        # from the invoice line origin
+        if table.column_exist('patient'):
+            table.drop_column('patient')
+
+        # Similarly, we retrieve the health_service
+        # from the invoice line origin
+        if table.column_exist('health_service'):
+            table.drop_column('health_service')
+
+class InvoiceLine:
+    __name__ = 'account.invoice.line'
+
+    @classmethod
+    def _get_origin(cls):
+        return super(InvoiceLine, cls)._get_origin() + [
+            'gnuhealth.health_service.line'
+            ]
diff -r 5153ab847140 tryton/health_services/wizard/wizard_health_services.py
--- a/tryton/health_services/wizard/wizard_health_services.py	Tue Apr 28 20:32:40 2015 -0700
+++ b/tryton/health_services/wizard/wizard_health_services.py	Thu Apr 30 21:11:36 2015 -0700
@@ -65,7 +65,7 @@
         Journal = pool.get('account.journal')
 
         currency_id = Transaction().context.get('currency')
-        
+
         services = HealthService.browse(Transaction().context.get(
             'active_ids'))
         invoices = []
@@ -84,8 +84,6 @@
             invoice_data['type'] = 'out_invoice'
             invoice_data['invoice_date'] = datetime.date.today()
             invoice_data['account'] = party.account_receivable.id
-            invoice_data['patient'] = service.patient.id
-            invoice_data['health_service'] = service.id
 
             ctx = {}
             sale_price_list = None
@@ -119,7 +117,7 @@
                 self.raise_user_error('no_payment_term')
 
             invoice_data['payment_term'] = party.customer_payment_term.id
-            
+
             #Invoice Lines
             seq = 0
             invoice_lines = []
@@ -130,13 +128,14 @@
                 if sale_price_list:
                     with Transaction().set_context(ctx):
                         unit_price = sale_price_list.compute(party,
-                        line.product, line.product.list_price,
-                        line.qty, line.product.default_uom)
+                            line.product, line.product.list_price,
+                            line.qty, line.product.default_uom)
                 else:
                     unit_price = line.product.list_price
 
                 if line.to_invoice:
                     invoice_lines.append(('create', [{
+                            'origin': str(line),
                             'product': line.product.id,
                             'description': line.desc,
                             'quantity': line.qty,
