Alternative approach for mem3 shard creation
diff --git a/src/fabric/src/fabric_rpc.erl b/src/fabric/src/fabric_rpc.erl
index 7776bd9..f58f4bc 100644
--- a/src/fabric/src/fabric_rpc.erl
+++ b/src/fabric/src/fabric_rpc.erl
@@ -304,7 +304,7 @@
 open_shard(Name, Opts) ->
     set_io_priority(Name, Opts),
     try
-        rexi:reply(couch_db:open(Name, Opts))
+        rexi:reply(mem3_util:get_or_create_db(Name, Opts))
     catch exit:{timeout, _} ->
         couch_stats:increment_counter([fabric, open_shard, timeouts])
     end.
diff --git a/src/fabric/src/fabric_util.erl b/src/fabric/src/fabric_util.erl
index e528261..84ffef1 100644
--- a/src/fabric/src/fabric_util.erl
+++ b/src/fabric/src/fabric_util.erl
@@ -105,9 +105,7 @@
     Nodes = [node()|erlang:nodes()],
     Live = [S || #shard{node = N} = S <- Shards, lists:member(N, Nodes)],
     Factor = list_to_integer(config:get("fabric", "shard_timeout_factor", "2")),
-    Options1 = [{create_if_missing, true} | Options],
-    Options2 = mem3_util:add_db_config_options(DbName, Options1),
-    get_shard(Live, Options2, 100, Factor).
+    get_shard(Live, Options, 100, Factor).
 
 get_shard([], _Opts, _Timeout, _Factor) ->
     erlang:error({internal_server_error, "No DB shards could be opened."});
diff --git a/src/mem3/src/mem3_util.erl b/src/mem3/src/mem3_util.erl
index 9a953f8..d56c55c 100644
--- a/src/mem3/src/mem3_util.erl
+++ b/src/mem3/src/mem3_util.erl
@@ -18,7 +18,6 @@
 -export([is_deleted/1, rotate_list/2]).
 -export([get_shard_opts/1, get_engine_opt/1, get_props_opt/1]).
 -export([get_shard_props/1, find_dirty_shards/0]).
--export([add_db_config_options/2]).
 -export([
     iso8601_timestamp/0,
     live_nodes/0,
@@ -521,15 +520,19 @@
     merge_opts(DbOpts, Options).
 
 
-get_or_create_db(DbName, Options) ->
-    case couch_db:open_int(DbName, Options) of
+get_or_create_db(DbName, Options0) ->
+    Options = case proplists:get_value(user_ctx, Options0, undefined) of
+        undefined -> [?ADMIN_CTX | Options0];
+        _         -> Options0
+    end,
+    case couch_db:open(DbName, Options) of
         {ok, _} = OkDb ->
             OkDb;
         {not_found, no_db_file} ->
             try
                 Options1 = [{create_if_missing, true} | Options],
                 Options2 = add_db_config_options(DbName, Options1),
-                couch_db:open_int(DbName, Options2)
+                couch_db:open(DbName, Options2)
             catch error:database_does_not_exist ->
                 throw({error, missing_target})
             end;