diff --git a/hiboo/application/__init__.py b/hiboo/application/__init__.py
index c6916ebc302df3b9c6ff171ba45b91123fe47be3..b2de80b5a1bbeaf8e41b0212266a6725050ea4b1 100644
--- a/hiboo/application/__init__.py
+++ b/hiboo/application/__init__.py
@@ -5,8 +5,11 @@ blueprint = flask.Blueprint("application", __name__, template_folder="templates"
 
 
 from hiboo.application import base
+from hiboo import models
 
 register = base.BaseApplication.register
 registry = base.BaseApplication.registry
+setattr(models.Service, "application",
+    property(lambda self: registry.get(self.application_id)))
 
 from hiboo.application import sso, infrastructure, social, storage
\ No newline at end of file
diff --git a/hiboo/application/base.py b/hiboo/application/base.py
index c20ae1b6f6237e418624106b6d53dadf18623b41..eb5b64d417ce978d64b97752239219dbfe7036a4 100644
--- a/hiboo/application/base.py
+++ b/hiboo/application/base.py
@@ -1,7 +1,34 @@
-from hiboo import sso
-from hiboo.service.forms import ServiceForm as BaseForm
+from hiboo import sso, models, format
+from wtforms import validators, fields, widgets
+from flask_babel import lazy_gettext as _
 
 import flask
+import flask_wtf
+
+
+class BaseForm(flask_wtf.FlaskForm):
+    """ Base class for service forms, used in applications
+    """
+    name = fields.StringField(_('Service name'), [validators.DataRequired()])
+    provider = fields.StringField(_('Provider'), [validators.DataRequired()])
+    description = fields.StringField(_('Description'))
+    policy = fields.SelectField(_('Profile policy'),
+        choices=list(models.Service.POLICIES.items()))
+    max_profiles = fields.IntegerField(_('Maximum profile count'),
+        [validators.NumberRange(1, 1000)])
+    profile_format = fields.SelectField(_('Profile username format'),
+        choices=(
+            [("", _("Default ({})".format(
+                format.ProfileFormat.registry[None].message))
+            )] +
+            [(name, format.message.capitalize())
+              for name, format in format.ProfileFormat.registry.items()
+              if name is not None
+            ]
+        )
+    )
+    single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)'))
+    submit = fields.SubmitField(_('Submit'))
 
 
 class BaseApplication(object):
diff --git a/hiboo/profile/__init__.py b/hiboo/profile/__init__.py
index 487311ddf354dac37ec105804ad24d881b533030..85382bf7d0809b22158e12f25545dc3867075287 100644
--- a/hiboo/profile/__init__.py
+++ b/hiboo/profile/__init__.py
@@ -4,7 +4,7 @@ import flask
 blueprint = flask.Blueprint("profile", __name__, template_folder="templates")
 
 import flask_login
-from hiboo import models, utils, application
+from hiboo import models, utils
 from hiboo.profile import forms
 
 
@@ -47,7 +47,7 @@ def transition(profile, current, target, done=False):
             []
         ),
     }
-    app = application.registry.get(profile.service.application_id)
+    app = profile.service.application
     index = 1 if done else 0
     empty = ([], [])
     functions = (
diff --git a/hiboo/service/admin.py b/hiboo/service/admin.py
index 780e59834ae740ac2d63f331f73e91869516bdd4..e5e97b53fed4210a6961fea80d51e8c29f2b56eb 100644
--- a/hiboo/service/admin.py
+++ b/hiboo/service/admin.py
@@ -1,5 +1,5 @@
 from hiboo import models, utils, security, application
-from hiboo.service import blueprint, forms
+from hiboo.service import blueprint
 from flask_babel import lazy_gettext as _
 
 import flask
@@ -49,7 +49,7 @@ def create(application_id):
 @security.admin_required()
 def edit(service_uuid):
     service = models.Service.query.get(service_uuid) or flask.abort(404)
-    app = application.registry.get(service.application_id) or flask.abort(404)
+    app = service.application or flask.abort(404)
     form = app.Form()
     if form.validate_on_submit():
         form.populate_obj(service)
@@ -65,7 +65,7 @@ def edit(service_uuid):
 @security.admin_required()
 def details(service_uuid):
     service = models.Service.query.get(service_uuid) or flask.abort(404)
-    app = application.registry.get(service.application_id) or flask.abort(404)
+    app = service.application or flask.abort(404)
     return flask.render_template("service_details.html", service=service, application=app)
 
 
@@ -83,7 +83,7 @@ def delete(service_uuid):
 @security.admin_required()
 def action(service_uuid, action):
     service = models.Service.query.get(service_uuid) or flask.abort(404)
-    app = application.registry.get(service.application_id) or flask.abort(404)
+    app = service.application or flask.abort(404)
     label, profile, quick = app.actions.get(action) or flask.abort(404)
     if profile:
         flask.abort(404)
diff --git a/hiboo/service/forms.py b/hiboo/service/forms.py
deleted file mode 100644
index cc21824335d1afa6f59897251e257e392e2e2215..0000000000000000000000000000000000000000
--- a/hiboo/service/forms.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from wtforms import validators, fields, widgets
-from flask_babel import lazy_gettext as _
-
-from hiboo import models, application, format
-
-import flask_wtf
-
-
-class ServiceForm(flask_wtf.FlaskForm):
-    name = fields.StringField(_('Service name'), [validators.DataRequired()])
-    provider = fields.StringField(_('Provider'), [validators.DataRequired()])
-    description = fields.StringField(_('Description'))
-    policy = fields.SelectField(_('Profile policy'),
-        choices=list(models.Service.POLICIES.items()))
-    max_profiles = fields.IntegerField(_('Maximum profile count'),
-        [validators.NumberRange(1, 1000)])
-    profile_format = fields.SelectField(_('Profile username format'),
-        choices=(
-            [("", _("Default ({})".format(
-                format.ProfileFormat.registry[None].message))
-            )] +
-            [(name, format.message.capitalize())
-              for name, format in format.ProfileFormat.registry.items()
-              if name is not None
-            ]
-        )
-    )
-    single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)'))
-    submit = fields.SubmitField(_('Submit'))