diff --git a/sparse/coo/core.py b/sparse/coo/core.py
index 71fe0d5..727df16 100644
--- a/sparse/coo/core.py
+++ b/sparse/coo/core.py
@@ -479,11 +479,9 @@ class COO(SparseArray, NDArrayOperatorsMixin):
             ndim = 0 if shape is None else len(shape)
             coords = np.empty((ndim, 0), dtype=np.uint8)
             data = np.empty((0,))
+            shape = () if shape is None else shape
 
-            return COO(coords, data, shape=() if shape is None else shape,
-                       sorted=True, has_duplicates=False)
-
-        if not isinstance(x[0][0], Iterable):
+        elif not isinstance(x[0][0], Iterable):
             coords = np.stack(x[1], axis=0)
             data = np.asarray(x[0])
         else:
diff --git a/sparse/dok.py b/sparse/dok.py
index b4f1233..1351cbd 100644
--- a/sparse/dok.py
+++ b/sparse/dok.py
@@ -125,7 +125,7 @@ class DOK(SparseArray):
     def _make_shallow_copy_of(self, other):
         self.dtype = other.dtype
         self.data = other.data
-        super(DOK, self).__init__(other.shape)
+        super(DOK, self).__init__(other.shape, fill_value=other.fill_value)
 
     @classmethod
     def from_coo(cls, x):

diff --git a/sparse/tests/test_dok.py b/sparse/tests/test_dok.py
index 2443f33..e9d3d4a 100644
--- a/sparse/tests/test_dok.py
+++ b/sparse/tests/test_dok.py
@@ -169,3 +169,11 @@ def test_asformat(format):
     s2 = s.asformat(format)
 
     assert_eq(s, s2)
+
+
+def test_coo_fv_interface():
+    s1 = sparse.full((5, 5), fill_value=1+np.random.rand())
+    s2 = sparse.DOK(s1)
+    assert_eq(s1, s2)
+    s3 = sparse.COO(s2)
+    assert_eq(s1, s3)

Bug in converting from DOK to COO
I originally noticed this bug when I tried the following, 

`sparse.DOK.from_coo(sparse.ones((2,2), dtype=bool)).to_coo().todense()`.

It yields 

```
array([[0., 0.],
       [0., 0.]])
```

However, the issue is even more basic for example the following:

`sparse.DOK.from_coo(sparse.ones((2,2))).to_coo().todense()`,

yields the same result,

```
array([[0., 0.],
       [0., 0.]])
```

The correct results ought to be 

```
array([[True, True],
       [True, True]])
```

and 

```
array([[1., 1.],
       [1., 1.]])
```
sparse/tests/test_dok.py::test_setitem[shape0-index0-0.24378411847456782] sparse/tests/test_dok.py::test_setitem[shape1-index1-0.4655835128747583] sparse/tests/test_dok.py::test_setitem[shape3-1-0.6611644715879794] sparse/tests/test_dok.py::test_setitem[shape4-index4-0.44921796957042237] sparse/tests/test_dok.py::test_setitem[shape5-index5-0.6755965596371413] sparse/tests/test_dok.py::test_setitem[shape9-index9-0.9169802728671987] sparse/tests/test_dok.py::test_setitem[shape11-index11-0.1490395247941586] sparse/tests/test_dok.py::test_setitem[shape13-index13-0.0810663815477296] sparse/tests/test_dok.py::test_coo_fv_interface
sparse/tests/test_dok.py::flake-8::FLAKE8 sparse/tests/test_dok.py::test_random_shape_nnz[0.1-shape0] sparse/tests/test_dok.py::test_random_shape_nnz[0.1-shape1] sparse/tests/test_dok.py::test_random_shape_nnz[0.1-shape2] sparse/tests/test_dok.py::test_random_shape_nnz[0.3-shape0] sparse/tests/test_dok.py::test_random_shape_nnz[0.3-shape1] sparse/tests/test_dok.py::test_random_shape_nnz[0.3-shape2] sparse/tests/test_dok.py::test_random_shape_nnz[0.5-shape0] sparse/tests/test_dok.py::test_random_shape_nnz[0.5-shape1] sparse/tests/test_dok.py::test_random_shape_nnz[0.5-shape2] sparse/tests/test_dok.py::test_random_shape_nnz[0.7-shape0] sparse/tests/test_dok.py::test_random_shape_nnz[0.7-shape1] sparse/tests/test_dok.py::test_random_shape_nnz[0.7-shape2] sparse/tests/test_dok.py::test_convert_to_coo sparse/tests/test_dok.py::test_convert_from_coo sparse/tests/test_dok.py::test_convert_from_numpy sparse/tests/test_dok.py::test_convert_to_numpy sparse/tests/test_dok.py::test_construct[2-data0] sparse/tests/test_dok.py::test_construct[shape1-data1] sparse/tests/test_dok.py::test_construct[shape2-data2] sparse/tests/test_dok.py::test_getitem[0.1-shape0] sparse/tests/test_dok.py::test_getitem[0.1-shape1] sparse/tests/test_dok.py::test_getitem[0.1-shape2] sparse/tests/test_dok.py::test_getitem[0.3-shape0] sparse/tests/test_dok.py::test_getitem[0.3-shape1] sparse/tests/test_dok.py::test_getitem[0.3-shape2] sparse/tests/test_dok.py::test_getitem[0.5-shape0] sparse/tests/test_dok.py::test_getitem[0.5-shape1] sparse/tests/test_dok.py::test_getitem[0.5-shape2] sparse/tests/test_dok.py::test_getitem[0.7-shape0] sparse/tests/test_dok.py::test_getitem[0.7-shape1] sparse/tests/test_dok.py::test_getitem[0.7-shape2] sparse/tests/test_dok.py::test_setitem[shape2-index2-value2] sparse/tests/test_dok.py::test_setitem[shape6-index6-value6] sparse/tests/test_dok.py::test_setitem[shape7-index7-value7] sparse/tests/test_dok.py::test_setitem[shape8-index8-value8] sparse/tests/test_dok.py::test_setitem[shape10-index10-value10] sparse/tests/test_dok.py::test_setitem[shape12-index12-value12] sparse/tests/test_dok.py::test_default_dtype sparse/tests/test_dok.py::test_int_dtype sparse/tests/test_dok.py::test_float_dtype sparse/tests/test_dok.py::test_set_zero sparse/tests/test_dok.py::test_asformat[coo] sparse/tests/test_dok.py::test_asformat[dok]