Index: /trunk/Nebulous/nebclient/src/nebclient.c
===================================================================
--- /trunk/Nebulous/nebclient/src/nebclient.c	(revision 13253)
+++ /trunk/Nebulous/nebclient/src/nebclient.c	(revision 13254)
@@ -4,5 +4,5 @@
  * Copyright (C) 2005  Joshua Hoblitt
  *
- * $Id: nebclient.c,v 1.46 2007-05-03 21:28:30 jhoblitt Exp $
+ * $Id: nebclient.c,v 1.47 2007-05-04 23:42:08 jhoblitt Exp $
  */
 
@@ -169,22 +169,26 @@
     }
 
-    if (soap_call_ns1__replicate_USCOREobject(server->soap, server->endpoint,
-            NULL, (char *)key, (char *)volume, (char **)&response) != SOAP_OK) {
-        nebSetServerErr(server);
-
-        return false;
-    }
-
-    if (!nebParseURI(server, (char *)response.result, &filename)) {
-        nebSetErr(server, "can not parse URI");
-
-        return false;
-    }
-
-    // need a read lock
+
+    // We have to open the instance that we're going to copy from first.  If
+    // we don't do this, it's possible that open will find & open the new
+    // instance that we're in the process of creating
     sourceFH = nebOpen(server, (char *)key, NEB_READ);
     if (sourceFH == -1) {
         nebSetErr(server, "can not open key %s", key);
         nebFree(filename);
+
+        return false;
+    }
+
+    // ask the server for a new instance attached to our key
+    if (soap_call_ns1__replicate_USCOREobject(server->soap, server->endpoint,
+            NULL, (char *)key, (char *)volume, (char **)&response) != SOAP_OK) {
+        nebSetServerErr(server);
+
+        return false;
+    }
+
+    if (!nebParseURI(server, (char *)response.result, &filename)) {
+        nebSetErr(server, "can not parse URI");
 
         return false;
