diff --git a/gitc_utils.py b/gitc_utils.py
index 4d8d536..d082c8d 100644
--- a/gitc_utils.py
+++ b/gitc_utils.py
@@ -20,13 +20,15 @@
 
 import git_command
 import git_config
+import wrapper
 
 
-# TODO (sbasi) - Remove this constant and fetch manifest dir from /gitc/.config
-GITC_MANIFEST_DIR = '/usr/local/google/gitc/'
 GITC_FS_ROOT_DIR = '/gitc/manifest-rw/'
 NUM_BATCH_RETRIEVE_REVISIONID = 300
 
+def get_gitc_manifest_dir():
+  return wrapper.Wrapper().get_gitc_manifest_dir()
+
 def parse_clientdir(gitc_fs_path):
   """Parse a path in the GITC FS and return its client name.
 
diff --git a/manifest_xml.py b/manifest_xml.py
index b33ec62..a7fe8dd 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -956,7 +956,7 @@
     super(GitcManifest, self).__init__(repodir)
     self.isGitcClient = True
     self.gitc_client_name = gitc_client_name
-    self.gitc_client_dir = os.path.join(gitc_utils.GITC_MANIFEST_DIR,
+    self.gitc_client_dir = os.path.join(gitc_utils.get_gitc_manifest_dir(),
                                         gitc_client_name)
     self.manifestFile = os.path.join(self.gitc_client_dir, '.manifest')
 
diff --git a/repo b/repo
index bf8fa3d..ff82159 100755
--- a/repo
+++ b/repo
@@ -108,7 +108,7 @@
 S_manifests = 'manifests'       # special manifest repository
 REPO_MAIN = S_repo + '/main.py' # main script
 MIN_PYTHON_VERSION = (2, 6)     # minimum supported python version
-GITC_MANIFEST_DIR = '/usr/local/google/gitc'
+GITC_CONFIG_FILE = '/gitc/.config'
 
 
 import errno
@@ -222,6 +222,20 @@
                dest='gitc_client',
                help='The name for the new gitc_client instance.')
 
+_gitc_manifest_dir = None
+def get_gitc_manifest_dir():
+  global _gitc_manifest_dir
+  if _gitc_manifest_dir is None:
+    try:
+      with open(GITC_CONFIG_FILE, 'r') as gitc_config:
+        for line in gitc_config:
+          match = re.match('gitc_dir=(?P<gitc_manifest_dir>.*)', line)
+          if match:
+            _gitc_manifest_dir = match.group('gitc_manifest_dir')
+    except IOError:
+      _gitc_manifest_dir = ''
+  return _gitc_manifest_dir
+
 class CloneFailure(Exception):
   """Indicate the remote clone of repo itself failed.
   """
@@ -255,7 +269,12 @@
 
   try:
     if gitc_init:
-      client_dir = os.path.join(GITC_MANIFEST_DIR, opt.gitc_client)
+      gitc_manifest_dir = get_gitc_manifest_dir()
+      if not gitc_manifest_dir:
+        _print('error: GITC filesystem is not running. Exiting...',
+               file=sys.stderr)
+        sys.exit(1)
+      client_dir = os.path.join(gitc_manifest_dir, opt.gitc_client)
       if not os.path.exists(client_dir):
         os.makedirs(client_dir)
       os.chdir(client_dir)
@@ -746,6 +765,12 @@
   wrapper_path = os.path.abspath(__file__)
   my_main, my_git = _RunSelf(wrapper_path)
 
+  cwd = os.getcwd()
+  if cwd.startswith(get_gitc_manifest_dir()):
+    _print('error: repo cannot be used in the GITC local manifest directory.'
+           '\nIf you want to work on this GITC client please rerun this '
+           'command from the corresponding client under /gitc/', file=sys.stderr)
+    sys.exit(1)
   if not repo_main:
     if opt.help:
       _Usage()
diff --git a/subcmds/gitc_init.py b/subcmds/gitc_init.py
index 92b34f7..c0568ca 100644
--- a/subcmds/gitc_init.py
+++ b/subcmds/gitc_init.py
@@ -59,10 +59,10 @@
     if not opt.gitc_client:
       print('fatal: gitc client (-c) is required', file=sys.stderr)
       sys.exit(1)
-    self.client_dir = os.path.join(gitc_utils.GITC_MANIFEST_DIR,
+    self.client_dir = os.path.join(gitc_utils.get_gitc_manifest_dir(),
                                    opt.gitc_client)
-    if not os.path.exists(gitc_utils.GITC_MANIFEST_DIR):
-      os.makedirs(gitc_utils.GITC_MANIFEST_DIR)
+    if not os.path.exists(gitc_utils.get_gitc_manifest_dir()):
+      os.makedirs(gitc_utils.get_gitc_manifest_dir())
     if not os.path.exists(self.client_dir):
       os.mkdir(self.client_dir)
     super(GitcInit, self).Execute(opt, args)
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 934aaa8..2e9bbe7 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -194,9 +194,6 @@
                  help="overwrite an existing git directory if it needs to "
                       "point to a different object directory. WARNING: this "
                       "may cause loss of data")
-    p.add_option('--force-gitc',
-                 dest='force_gitc', action='store_true',
-                 help="actually sync sources in the gitc client directory.")
     p.add_option('-l', '--local-only',
                  dest='local_only', action='store_true',
                  help="only update working tree, don't fetch")
@@ -539,16 +536,6 @@
         print('error: both -u and -p must be given', file=sys.stderr)
         sys.exit(1)
 
-    cwd = os.getcwd()
-    if cwd.startswith(gitc_utils.GITC_MANIFEST_DIR) and not opt.force_gitc:
-      print('WARNING this will pull all the sources like a normal repo sync.\n'
-            '\nIf you want to update your GITC Client View please rerun this '
-            'command in \n%s%s.\nOr if you actually want to pull the sources, '
-            'rerun with --force-gitc.' %
-            (gitc_utils.GITC_FS_ROOT_DIR,
-             cwd.split(gitc_utils.GITC_MANIFEST_DIR)[1]))
-      sys.exit(1)
-
     if opt.manifest_name:
       self.manifest.Override(opt.manifest_name)
 
