diff --git a/VERSION b/VERSION
index fa2d855..c594452 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.50
+2.1.51
diff --git a/containers/chameleon/Dockerfile.chameleon b/containers/chameleon/Dockerfile.chameleon
index 5c3e90c..1e242a2 100644
--- a/containers/chameleon/Dockerfile.chameleon
+++ b/containers/chameleon/Dockerfile.chameleon
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/chameleon
-FROM xosproject/xos-base:2.1.50
+FROM xosproject/xos-base:2.1.51
 
 # xos-base already has protoc and dependencies installed
 
diff --git a/containers/xos/Dockerfile.client b/containers/xos/Dockerfile.client
index 3b00725..781b3e8 100644
--- a/containers/xos/Dockerfile.client
+++ b/containers/xos/Dockerfile.client
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-client
-FROM xosproject/xos-libraries:2.1.50
+FROM xosproject/xos-libraries:2.1.51
 
 
 # Install XOS client
diff --git a/containers/xos/Dockerfile.libraries b/containers/xos/Dockerfile.libraries
index 6ab827f..6f2041b 100644
--- a/containers/xos/Dockerfile.libraries
+++ b/containers/xos/Dockerfile.libraries
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-libraries
-FROM xosproject/xos-base:2.1.50
+FROM xosproject/xos-base:2.1.51
 
 # Add libraries
 COPY lib /opt/xos/lib
diff --git a/containers/xos/Dockerfile.synchronizer-base b/containers/xos/Dockerfile.synchronizer-base
index 5a64c55..4043b9c 100644
--- a/containers/xos/Dockerfile.synchronizer-base
+++ b/containers/xos/Dockerfile.synchronizer-base
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-synchronizer-base
-FROM xosproject/xos-client:2.1.50
+FROM xosproject/xos-client:2.1.51
 
 COPY xos/synchronizers/new_base /opt/xos/synchronizers/new_base
 COPY xos/xos/logger.py /opt/xos/xos/logger.py
diff --git a/containers/xos/Dockerfile.xos-core b/containers/xos/Dockerfile.xos-core
index c9045ef..cc92556 100644
--- a/containers/xos/Dockerfile.xos-core
+++ b/containers/xos/Dockerfile.xos-core
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # xosproject/xos-core
-FROM xosproject/xos-libraries:2.1.50
+FROM xosproject/xos-libraries:2.1.51
 
 # Install XOS
 ADD xos /opt/xos
diff --git a/lib/xos-migrate/xosmigrate/main.py b/lib/xos-migrate/xosmigrate/main.py
index f4620de..6e0ca77 100644
--- a/lib/xos-migrate/xosmigrate/main.py
+++ b/lib/xos-migrate/xosmigrate/main.py
@@ -31,13 +31,14 @@
 import shutil
 from xosgenx.generator import XOSProcessor, XOSProcessorArgs
 from xosconfig import Config
+import subprocess
 from multistructlog import create_logger
 
 
 def get_abs_path(dir_):
     if os.path.isabs(dir_):
         return os.path.realpath(dir_)
-    if dir_[0] == '~' and not os.path.exists(dir_):
+    if dir_[0] == "~" and not os.path.exists(dir_):
         dir_ = os.path.expanduser(dir_)
         return os.path.abspath(dir_)
     return os.path.dirname(os.path.realpath(__file__)) + "/" + dir_
@@ -141,7 +142,7 @@
 
     cfg_file = open(config)
     cfg = yaml.load(cfg_file)
-    return cfg['name']
+    return cfg["name"]
 
 
 def generate_service_models(service_dir, service_dest_dir, service_name):
@@ -234,7 +235,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-    
+
 # -*- coding: utf-8 -*-
 # Generated by Django %(version)s on %(timestamp)s
 from __future__ import unicode_literals
@@ -252,33 +253,54 @@
     ]
 """
 
+
+def configure_logging(verbose):
+    global log
+    # INITIALIZING LOGGER
+    Config.init()
+
+    cfg = Config().get("logging")
+    if verbose:
+        cfg["handlers"]["console"]["level"] = "DEBUG"
+
+    log = create_logger(cfg)
+
+
 # SETTING ENV
-os.environ['LOG_FILE'] = get_abs_path("django.log")
-os.environ['XOS_CONFIG_SCHEMA'] = get_abs_path("migration_cfg_schema.yaml")
-os.environ['XOS_CONFIG_FILE'] = get_abs_path("migration_cfg.yaml")
+os.environ["LOG_FILE"] = get_abs_path("django.log")
+os.environ["XOS_CONFIG_SCHEMA"] = get_abs_path("migration_cfg_schema.yaml")
+os.environ["XOS_CONFIG_FILE"] = get_abs_path("migration_cfg.yaml")
 os.environ["MIGRATIONS"] = "true"
 # this is populated in case we generate migrations for services and it's used in settings.py
 os.environ["INSTALLED_APPS"] = ""
 
 # PARAMS
 parser = argparse.ArgumentParser(description="XOS Migrations")
-required = parser.add_argument_group('required arguments')
+required = parser.add_argument_group("required arguments")
 
 required.add_argument(
-    '-s',
-    '--service',
-    action='append',
+    "-s",
+    "--service",
+    action="append",
     required=True,
     dest="service_names",
-    help='The name of the folder containing the service in cord/orchestration/xos_services'
+    help="The name of the folder containing the service in cord/orchestration/xos_services"
 )
 
 parser.add_argument(
-    '-r',
-    '--repo',
+    "-r",
+    "--repo",
     default=get_abs_path("~/cord"),
     dest="repo_root",
-    help='The location of the folder containing the CORD repo root (default to ~/cord)'
+    help="The location of the folder containing the CORD repo root (default to ~/cord)"
+)
+
+parser.add_argument(
+    "--check",
+    default=False,
+    action="store_true",
+    dest="check",
+    help="Check if the migrations are generated for a given service. Does not apply any change."
 )
 
 # FIXME this is not working with multistructlog
@@ -286,22 +308,22 @@
     "-v",
     "--verbose",
     help="increase log verbosity",
+    dest="verbose",
     action="store_true"
 )
 
-# INITIALIZING LOGGER
-Config.init()
-log = create_logger(Config().get('logging'))
-
 
 def run():
 
     args = parser.parse_args()
 
+    configure_logging(args.verbose)
+
     print_banner(args.repo_root)
 
     # find absolute path to the code
     xos_path = get_abs_path(os.path.join(args.repo_root, "orchestration/xos/xos/"))
+    django_path = get_abs_path(os.path.join(xos_path, "manage.py"))
     core_dir = get_abs_path(os.path.join(xos_path, "core/models/"))
     service_base_dir = get_abs_path(os.path.join(xos_path, "../../xos_services/"))
     service_dest_dir = get_abs_path(os.path.join(xos_path, "services/"))
@@ -312,7 +334,7 @@
 
     log.info("Services: %s" % ", ".join(args.service_names))
 
-    django_cli_args = ['xos-migrate.py', 'makemigrations']
+    django_cli_args = ["makemigrations"]
 
     # generate the code for each service and create a list of parameters to pass to django
     app_list = []
@@ -335,9 +357,21 @@
 
     monkey_patch_migration_template()
 
-    from django.core.management import execute_from_command_line
+    if args.check:
+        django_cli_args.append("--check")
+        django_cli_args.append("--dry-run")
 
-    execute_from_command_line(django_cli_args)
+    cmd = "python %s %s" % (django_path, " ".join(django_cli_args))
+    result = subprocess.Popen(cmd, shell=True)
+    result.wait()
+    returncode = result.returncode
+
+    if returncode != 0:
+        if args.check:
+            log.error("Migrations are not up to date with the service changes!")
+        else:
+            log.error(result.communicate()[0])
+        sys.exit(returncode)
 
     # copying migrations back to the service
     for service in args.service_names:
diff --git a/lib/xos-migrate/xosmigrate/migration_cfg.yaml b/lib/xos-migrate/xosmigrate/migration_cfg.yaml
index b3d6e58..5b74be7 100644
--- a/lib/xos-migrate/xosmigrate/migration_cfg.yaml
+++ b/lib/xos-migrate/xosmigrate/migration_cfg.yaml
@@ -20,7 +20,9 @@
   handlers:
     console:
       class: logging.StreamHandler
+      formatter: structured-color
+      level: INFO
   loggers:
     'multistructlog':
       handlers:
-          - console
+        - console
