diff --git a/plio/__init__.py b/plio/__init__.py
index 7deb7d9ce332eee870d2367e7c2bef14e59648c5..87a25b7276a9095b1b7266a91074691a1070ed9e 100755
--- a/plio/__init__.py
+++ b/plio/__init__.py
@@ -1,14 +1,8 @@
 __version__ = "0.1.0"
 
 # Submodule imports
-from . import isis_serial_number
-from . import io_controlnetwork
-from . import io_gdal
-from . import io_json
-from . import io_krc
-from . import io_yaml
-from . import io_db
-from . import io_hdf
-from . import utils
-from . import examples
+from plio.io import io_db
 from . import data
+from . import examples
+from . import utils
+
diff --git a/plio/ControlNetFileV0002_pb2.py b/plio/io/ControlNetFileV0002_pb2.py
similarity index 100%
rename from plio/ControlNetFileV0002_pb2.py
rename to plio/io/ControlNetFileV0002_pb2.py
diff --git a/plio/tests/__init__.py b/plio/io/__init__.py
similarity index 100%
rename from plio/tests/__init__.py
rename to plio/io/__init__.py
diff --git a/plio/extract_metadata.py b/plio/io/extract_metadata.py
similarity index 100%
rename from plio/extract_metadata.py
rename to plio/io/extract_metadata.py
diff --git a/plio/io_controlnetwork.py b/plio/io/io_controlnetwork.py
similarity index 99%
rename from plio/io_controlnetwork.py
rename to plio/io/io_controlnetwork.py
index f7e7a0bc1e91f25da0974de581955a009b85423f..afcf5a48b6f197788a7458c7af11af3356371974 100644
--- a/plio/io_controlnetwork.py
+++ b/plio/io/io_controlnetwork.py
@@ -1,7 +1,8 @@
 from time import gmtime, strftime
+
 import pvl
 
-from plio import ControlNetFileV0002_pb2 as cnf
+from plio.io import ControlNetFileV0002_pb2 as cnf
 from plio.utils.utils import xstr
 
 try:
diff --git a/plio/io_db.py b/plio/io/io_db.py
similarity index 95%
rename from plio/io_db.py
rename to plio/io/io_db.py
index 6724c069acfb3602114285d9d2b7924d7f46cfb2..a8a7e259194f46603ace04368d9065e1c2c43503 100644
--- a/plio/io_db.py
+++ b/plio/io/io_db.py
@@ -1,7 +1,7 @@
 from sqlalchemy import Column, Integer, String, create_engine, orm
 from sqlalchemy.ext import declarative
 
-from .sqlalchemy_json.alchemy import NestedJsonObject
+from plio.sqlalchemy_json.alchemy import NestedJsonObject
 
 Base = declarative.declarative_base()
 
diff --git a/plio/io_gdal.py b/plio/io/io_gdal.py
similarity index 99%
rename from plio/io_gdal.py
rename to plio/io/io_gdal.py
index ae89a89ddf7545a23d5f2baa2091adda1e4d4e46..719e18f2fa8cff1a0f53cd1c6d066086199e0e85 100644
--- a/plio/io_gdal.py
+++ b/plio/io/io_gdal.py
@@ -1,16 +1,15 @@
-import warnings
-
-import pvl
 import os
+import warnings
 
-from plio.utils.utils import find_in_dict
-from osgeo import ogr
-import numpy as np
 import gdal
 import gdalconst
+import numpy as np
 import osr
+import pvl
+from osgeo import ogr
 
-from plio import extract_metadata
+from plio.io import extract_metadata
+from plio.utils.utils import find_in_dict
 
 gdal.UseExceptions()
 
diff --git a/plio/io_hdf.py b/plio/io/io_hdf.py
similarity index 100%
rename from plio/io_hdf.py
rename to plio/io/io_hdf.py
diff --git a/plio/io_json.py b/plio/io/io_json.py
similarity index 100%
rename from plio/io_json.py
rename to plio/io/io_json.py
diff --git a/plio/io_krc.py b/plio/io/io_krc.py
similarity index 100%
rename from plio/io_krc.py
rename to plio/io/io_krc.py
diff --git a/plio/io_yaml.py b/plio/io/io_yaml.py
similarity index 100%
rename from plio/io_yaml.py
rename to plio/io/io_yaml.py
diff --git a/plio/isis_serial_number.py b/plio/io/isis_serial_number.py
similarity index 98%
rename from plio/isis_serial_number.py
rename to plio/io/isis_serial_number.py
index e26399e58d98cb9f6d1865d4e97114b532c48725..c55af9b6f43e60235091adfecafd8f6af9f2aefd 100644
--- a/plio/isis_serial_number.py
+++ b/plio/io/isis_serial_number.py
@@ -1,12 +1,13 @@
 import warnings
-import plio
-from plio.data import get_data
-from plio.io_db import Translations, StringToMission, setup_db_session
-from plio.utils.utils import find_in_dict, find_nested_in_dict
 
 import pvl
 from pvl._collections import PVLModule
 
+import plio
+from plio.data import get_data
+from plio.io.io_db import Translations, StringToMission, setup_db_session
+from plio.utils.utils import find_in_dict, find_nested_in_dict
+
 
 def get_isis_translation(label):
     """
diff --git a/plio/io/tests/__init__.py b/plio/io/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/plio/tests/test_io_controlnetwork.py b/plio/io/tests/test_io_controlnetwork.py
similarity index 100%
rename from plio/tests/test_io_controlnetwork.py
rename to plio/io/tests/test_io_controlnetwork.py
index f1d67a638368aa50ef4d005762295de763a7b7c2..0e38111e3302f2917ee9076716fd5683544719cf 100644
--- a/plio/tests/test_io_controlnetwork.py
+++ b/plio/io/tests/test_io_controlnetwork.py
@@ -1,13 +1,13 @@
 import os
 import sys
-from time import strftime, gmtime
 import unittest
+from time import strftime, gmtime
+
 import pandas as pd
 import pvl
 
 from .. import io_controlnetwork
 from .. import ControlNetFileV0002_pb2 as cnf
-
 from plio.utils.utils import find_in_dict
 
 sys.path.insert(0, os.path.abspath('..'))
diff --git a/plio/tests/test_io_db.py b/plio/io/tests/test_io_db.py
similarity index 93%
rename from plio/tests/test_io_db.py
rename to plio/io/tests/test_io_db.py
index 82b393368115806793cafc9ac17be40ec92412f0..f066a5c993e9711b60124de91d54ed9d9eec5cff 100644
--- a/plio/tests/test_io_db.py
+++ b/plio/io/tests/test_io_db.py
@@ -1,14 +1,14 @@
 import os
+import sys
 import unittest
 
 from sqlalchemy.orm import session
 
 from plio.data import get_data
 
-import sys
 sys.path.insert(0, os.path.abspath('..'))
 
-from .. import io_db
+from plio.io import io_db
 
 
 class TestDataDB(unittest.TestCase):
diff --git a/plio/tests/test_io_gdal.py b/plio/io/tests/test_io_gdal.py
similarity index 97%
rename from plio/tests/test_io_gdal.py
rename to plio/io/tests/test_io_gdal.py
index e856b78b85ab1eb11914abeacad28f51542ec9b3..5b0127d3c2cccf258e45da501bfa3187a3969b16 100644
--- a/plio/tests/test_io_gdal.py
+++ b/plio/io/tests/test_io_gdal.py
@@ -1,13 +1,14 @@
 import os
+import sys
 import unittest
+
 import numpy as np
 
 from plio.examples import get_path
 
-import sys
 sys.path.insert(0, os.path.abspath('..'))
 
-from .. import io_gdal
+from plio.io import io_gdal
 
 
 class TestMercator(unittest.TestCase):
@@ -176,12 +177,12 @@ class TestWriter(unittest.TestCase):
     def test_with_no_data_value(self):
         no_data_value = 0.0
         #nd array
-        io_gdal.array_to_raster(self.ndarr,'test.tif', ndv=no_data_value)
+        io_gdal.array_to_raster(self.ndarr, 'test.tif', ndv=no_data_value)
         dataset = io_gdal.GeoDataset('test.tif')
         self.assertEqual(dataset.no_data_value, no_data_value)
 
         #array
-        io_gdal.array_to_raster(self.arr,'test.tif', ndv=no_data_value)
+        io_gdal.array_to_raster(self.arr, 'test.tif', ndv=no_data_value)
         dataset = io_gdal.GeoDataset('test.tif')
         self.assertEqual(dataset.no_data_value, no_data_value) 
 
diff --git a/plio/tests/test_io_hdf.py b/plio/io/tests/test_io_hdf.py
similarity index 96%
rename from plio/tests/test_io_hdf.py
rename to plio/io/tests/test_io_hdf.py
index 1c92763d1b06213d280ba7ce78856afff18dc6f0..fa27dd692ef108a2e57572aa3bc94a811a89b202 100644
--- a/plio/tests/test_io_hdf.py
+++ b/plio/io/tests/test_io_hdf.py
@@ -4,7 +4,7 @@ import unittest
 import numpy as np
 import pandas as pd
 
-from .. import io_hdf
+from plio.io import io_hdf
 
 
 class TestHDF(unittest.TestCase):
diff --git a/plio/tests/test_isis_serial_numbers.py b/plio/io/tests/test_isis_serial_numbers.py
similarity index 90%
rename from plio/tests/test_isis_serial_numbers.py
rename to plio/io/tests/test_isis_serial_numbers.py
index 70071f8a4771603d2d7ba49f9562866b3b6d0a30..8abf3227fa9f5c98904fbf3348911c58f3d0eeb2 100644
--- a/plio/tests/test_isis_serial_numbers.py
+++ b/plio/io/tests/test_isis_serial_numbers.py
@@ -1,12 +1,12 @@
 import os
+import sys
 import unittest
 
 from plio.examples import get_path
 
-import sys
 sys.path.insert(0, os.path.abspath('..'))
 
-from .. import isis_serial_number
+from plio.io import isis_serial_number
 
 
 class TestIsisSerials(unittest.TestCase):
diff --git a/plio/tests/test_metadata.py b/plio/io/tests/test_metadata.py
similarity index 98%
rename from plio/tests/test_metadata.py
rename to plio/io/tests/test_metadata.py
index 4442fc0f023fa962edd46158c64cb0d349901f19..5b28ff56b894aa16c3e7b2df178543f3aa55e8bd 100644
--- a/plio/tests/test_metadata.py
+++ b/plio/io/tests/test_metadata.py
@@ -1,8 +1,11 @@
 import unittest
+
 from osgeo import osr
+
 osr.UseExceptions()
 
-from .. import extract_metadata as em
+from plio.io import extract_metadata as em
+
 
 class TestSRSProjectionExtraction(unittest.TestCase):
 
diff --git a/plio/tests/test_structured_io.py b/plio/io/tests/test_structured_io.py
similarity index 100%
rename from plio/tests/test_structured_io.py
rename to plio/io/tests/test_structured_io.py
index a96ff405b6f006d36911c45d71ab5acad63ffc7d..13a7c4195abfcd2f67cd2816d4b0a641c354befd 100644
--- a/plio/tests/test_structured_io.py
+++ b/plio/io/tests/test_structured_io.py
@@ -1,7 +1,7 @@
 import unittest
 
-from .. import io_yaml
 from .. import io_json
+from .. import io_yaml
 
 try:
     import yaml