diff --git a/libtrellis/src/PyTrellis.cpp b/libtrellis/src/PyTrellis.cpp
index fa003fd..03e211f 100644
--- a/libtrellis/src/PyTrellis.cpp
+++ b/libtrellis/src/PyTrellis.cpp
@@ -24,18 +24,17 @@
 
 namespace py = pybind11;
 
-    typedef pair<int, int> IntPair;
-    typedef pair<string, bool> StringBoolPair;
-    typedef pair<RoutingId, ident_t> BelPin;
-    typedef pair<RoutingId, PortDirection> BelWireDir;
+typedef pair<int, int> IntPair;
+typedef pair<string, bool> StringBoolPair;
+typedef pair<RoutingId, ident_t> BelPin;
+typedef pair<RoutingId, PortDirection> BelWireDir;
 
-    // Common Types
-    PYBIND11_MAKE_OPAQUE(IntPair)
-    PYBIND11_MAKE_OPAQUE(LocationData)
-    PYBIND11_MAKE_OPAQUE(checksum_t)
-    PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>)
-    PYBIND11_MAKE_OPAQUE(Location)
-    PYBIND11_MAKE_OPAQUE(std::set<RelId>)
+// Common Types
+PYBIND11_MAKE_OPAQUE(IntPair)
+PYBIND11_MAKE_OPAQUE(LocationData)
+PYBIND11_MAKE_OPAQUE(checksum_t)
+PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>)
+PYBIND11_MAKE_OPAQUE(Location)
 
 PYBIND11_MODULE (pytrellis, m)
 {
@@ -47,11 +46,9 @@
     py::bind_vector<vector<bool>>(m, "BoolVector");
 
     class_<IntPair>(m, "IntPair")
-            .def(init<IntPair>())
             .def_readonly("first", &std::pair<int, int>::first)
             .def_readonly("second", &std::pair<int, int>::second);
 
-
     m.def("make_IntPair", [](int first, int second) {
         return std::make_pair(first, second);
     });
@@ -75,7 +72,7 @@
             .def("write_bit", &Bitstream::write_bit_py)
             .def_readwrite("metadata", &Bitstream::metadata)
             .def_readwrite("data", &Bitstream::data)
-        .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip));
+            .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip));
 
     class_<DeviceLocator>(m, "DeviceLocator")
             .def_readwrite("family", &DeviceLocator::family)
@@ -259,8 +256,12 @@
 
     m.def("cbit_from_str", cbit_from_str);
     py::bind_vector<vector<ConfigBit>>(m, "ConfigBitVector");
-    class_<std::set<ConfigBit>>(m, "ConfigBitSet");
- 
+    class_<std::set<ConfigBit>>(m, "ConfigBitSet")
+        .def("__len__", [](const std::set<ConfigBit> &v) { return v.size(); })
+        .def("__iter__", [](std::set<ConfigBit> &v) {
+            return py::make_iterator(v.begin(), v.end());
+        }, py::keep_alive<0, 1>()); /* Keep vector alive while iterator is used */
+
     class_<BitGroup>(m, "BitGroup")
             .def(init<const CRAMDelta &>())
             .def_readwrite("bits", &BitGroup::bits)
diff --git a/util/common/tiles.py b/util/common/tiles.py
index e64c9a1..4eed5e7 100644
--- a/util/common/tiles.py
+++ b/util/common/tiles.py
@@ -6,8 +6,7 @@
     """
     Extract the tile position as a (row, column) tuple from its name
     """
-    pair = pytrellis.make_IntPair(chip_size[0],chip_size[1])
-    size = pytrellis.IntPair(pair)
+    size = pytrellis.make_IntPair(chip_size[0],chip_size[1])
     pos = pytrellis.get_row_col_pair_from_chipsize(tile, size, bias)
     return int(pos.first), int(pos.second)
 
