diff --git a/src/BuildTiles/Main/construct.cxx b/src/BuildTiles/Main/construct.cxx
index a5eadfa4..bc35beb2 100644
--- a/src/BuildTiles/Main/construct.cxx
+++ b/src/BuildTiles/Main/construct.cxx
@@ -1734,9 +1734,9 @@ void TGConstruct::CalcPointNormals( void )
 
 void TGConstruct::LoadSharedEdgeData( void )
 {
-    match.load_neighbor_shared( bucket, work_base );
+    match.load_neighbor_shared( bucket, share_base );
     if ( useOwnSharedEdges ) {
-        match.load_missing_shared( bucket, work_base );
+        match.load_missing_shared( bucket, share_base );
     }
     match.add_shared_nodes( this );
 }
@@ -1749,7 +1749,7 @@ void TGConstruct::SaveSharedEdgeData( void )
     if ( writeSharedEdges ) {
         SG_LOG(SG_GENERAL, SG_ALERT, "write shared edges");
 
-        match.write_shared( bucket, work_base );
+        match.write_shared( bucket, share_base );
     }
 }
 
diff --git a/src/BuildTiles/Main/construct.hxx b/src/BuildTiles/Main/construct.hxx
index 42ac1eb8..92edb783 100644
--- a/src/BuildTiles/Main/construct.hxx
+++ b/src/BuildTiles/Main/construct.hxx
@@ -245,6 +245,7 @@ private:
     // paths
     std::string work_base;
     std::string output_base;
+    std::string share_base;
 
     std::vector<std::string> load_dirs;
 
@@ -383,6 +384,8 @@ public:
     inline void set_work_base( const std::string s ) { work_base = s; }
     inline std::string get_output_base() const { return output_base; }
     inline void set_output_base( const std::string s ) { output_base = s; }
+    inline std::string get_share_base() const { return share_base; }
+    inline void set_share_base( const std::string s ) { share_base = s; }
     inline void set_load_dirs( const std::vector<std::string> ld ) { load_dirs = ld; }
 
     // UK grid flag
diff --git a/src/BuildTiles/Main/main.cxx b/src/BuildTiles/Main/main.cxx
index c4c2121c..4eec3148 100644
--- a/src/BuildTiles/Main/main.cxx
+++ b/src/BuildTiles/Main/main.cxx
@@ -156,6 +156,7 @@ static void usage( const string name ) {
 int main(int argc, char **argv) {
     string output_dir = ".";
     string work_dir = ".";
+    string share_dir = "";
     string cover = "";
     string priorities_file = DEFAULT_PRIORITIES_FILE;
     string usgs_map_file = DEFAULT_USGS_MAPFILE;
@@ -198,6 +199,8 @@ int main(int argc, char **argv) {
             output_dir = arg.substr(13);
         } else if (arg.find("--work-dir=") == 0) {
             work_dir = arg.substr(11);
+        } else if (arg.find("--share-dir=") == 0) {
+            share_dir = arg.substr(12);
         } else if (arg.find("--tile-id=") == 0) {
             tile_id = atol(arg.substr(10).c_str());
         } else if (arg.find("--lon=") == 0) {
@@ -235,8 +238,13 @@ int main(int argc, char **argv) {
         }
     }
 
+    if ( share_dir == "" ) {
+        share_dir = work_dir + "/Shared";
+    }
+
     SG_LOG(SG_GENERAL, SG_ALERT, "Output directory is " << output_dir);
     SG_LOG(SG_GENERAL, SG_ALERT, "Working directory is " << work_dir);
+    SG_LOG(SG_GENERAL, SG_ALERT, "Shared directory is " << share_dir);
     if ( tile_id > 0 ) {
         SG_LOG(SG_GENERAL, SG_ALERT, "Tile id is " << tile_id);
     } else {
@@ -274,6 +282,7 @@ int main(int argc, char **argv) {
             c->set_cover( cover );
             c->set_work_base( work_dir );
             c->set_output_base( output_dir );
+            c->set_share_base( share_dir );
             c->set_load_dirs( load_dirs );
             c->set_useUKGrid( useUKgrid );
             c->set_write_shared_edges( writeSharedEdges );
@@ -302,6 +311,7 @@ int main(int argc, char **argv) {
                 c->set_cover( cover );
                 c->set_work_base( work_dir );
                 c->set_output_base( output_dir );
+                c->set_share_base( share_dir );
                 c->set_load_dirs( load_dirs );
                 c->set_useUKGrid( useUKgrid );
                 c->set_write_shared_edges( writeSharedEdges );
@@ -335,6 +345,7 @@ int main(int argc, char **argv) {
                             c->set_cover( cover );
                             c->set_work_base( work_dir );
                             c->set_output_base( output_dir );
+                            c->set_share_base( share_dir );
                             c->set_load_dirs( load_dirs );
                             c->set_useUKGrid( useUKgrid );
                             c->set_write_shared_edges( writeSharedEdges );
@@ -363,6 +374,7 @@ int main(int argc, char **argv) {
         c->set_cover( cover );
         c->set_work_base( work_dir );
         c->set_output_base( output_dir );
+        c->set_share_base( share_dir );
         c->set_load_dirs( load_dirs );
         c->set_useUKGrid( useUKgrid );
         c->set_write_shared_edges( writeSharedEdges );
diff --git a/src/BuildTiles/Match/match.cxx b/src/BuildTiles/Match/match.cxx
index 51ca6893..07db42f3 100644
--- a/src/BuildTiles/Match/match.cxx
+++ b/src/BuildTiles/Match/match.cxx
@@ -202,10 +202,10 @@ void TGMatch::load_shared( SGBucket b, string base, neighbor_type n ) {
 
 // load any previously existing shared data from all neighbors (if
 // shared data for a component exists set that components flag to true
-void TGMatch::load_neighbor_shared( SGBucket b, string work ) {
+void TGMatch::load_neighbor_shared( SGBucket b, string share_dir ) {
 //    cout << "Loading existing shared data from neighbor tiles" << endl;
 
-    string base = work + "/Shared/";
+    string base = share_dir + "/";
 
     // start with all flags false
     sw_flag = se_flag = ne_flag = nw_flag = false;
@@ -272,8 +272,8 @@ void TGMatch::load_neighbor_shared( SGBucket b, string work ) {
 }
 
 // try to load any missing shared data from our own shared data file
-void TGMatch::load_missing_shared( SGBucket b, string work ) {
-    string base = work + "/Shared/";
+void TGMatch::load_missing_shared( SGBucket b, string share ) {
+    string base = share + "/";
     
     if ( !nw_flag ) {
 	scan_share_file( base, b, NW_Corner, NW_Corner );
@@ -505,10 +505,10 @@ void TGMatch::split_tile( SGBucket b, TGConstruct* c ) {
 
 // write the new shared edge points, normals, and segments for this
 // tile
-void TGMatch::write_shared( SGBucket b, string base ) {
+void TGMatch::write_shared( SGBucket b, string shared ) {
 
-    string dir = base + "/Shared/" + b.gen_base_path();
-    string file = dir + "/" + b.gen_index_str();
+    string dir  = shared + "/" + b.gen_base_path();
+    string file = dir    + "/" + b.gen_index_str();
 
     SGPath sgp( dir );
     sgp.append( "dummy" );