diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt
index 57e6a596..832bc9c9 100644
--- a/examples/c++/CMakeLists.txt
+++ b/examples/c++/CMakeLists.txt
@@ -4,9 +4,9 @@ file (GLOB example_src_list RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.cxx")
 # - Handle special cases here --------------------------------------------------
 
 # Test temperature interface for 2 sensor libraries
-add_example(iTemperature_sample.cxx TARGETS new_interfaces lm35 abp)
+add_example(iTemperature_sample.cxx TARGETS interfaces lm35 abp)
 # Test light interface for 3 sensor libraries
-add_example(iLight_sample.cxx TARGETS new_interfaces apds9002 bh1750 max44009)
+add_example(iLight_sample.cxx TARGETS interfaces apds9002 bh1750 max44009)
 
 # - Create an executable for all other src files in this directory -------------
 foreach (_example_src ${example_src_list})
diff --git a/examples/c++/ads1x15-adc-sensor.cxx b/examples/c++/ads1x15-adc-sensor.cxx
index ee6bf4bb..6855fe54 100644
--- a/examples/c++/ads1x15-adc-sensor.cxx
+++ b/examples/c++/ads1x15-adc-sensor.cxx
@@ -27,7 +27,6 @@
 #include <stddef.h>
 
 #include "ads1015.hpp"
-#include "iADC.hpp"
 #include "mraa/gpio.hpp"
 #include "upm_utilities.h"
 
@@ -39,24 +38,21 @@ int
 main()
 {
     /* Create an instance of the ADS1015 sensor */
-    upm::ADS1015 sensor(EDISON_I2C_BUS);
+    upm::ADS1015 adc(EDISON_I2C_BUS);
     mraa::Gpio gpio(EDISON_GPIO_SI7005_CS);
     gpio.dir(mraa::DIR_OUT_HIGH);
 
-    /* Show usage from the IADC interface */
-    upm::IADC* adc = static_cast<upm::IADC*>(&sensor);
-
-    if (adc == NULL) {
-        std::cout << "ADC not detected" << std::endl;
-        return 1;
-    }
-    std::cout << "ADC " << adc->getModuleName() << " detected. ";
-    std::cout << adc->getNumInputs() << " inputs available" << std::endl;
+    // if (adc == NULL) {
+    //     std::cout << "ADC not detected" << std::endl;
+    //     return 1;
+    // }
+    std::cout << "ADC " << adc.getModuleName() << " detected. ";
+    std::cout << adc.getNumInputs() << " inputs available" << std::endl;
     while (true) {
-        for (unsigned int i = 0; i < adc->getNumInputs(); ++i) {
+        for (unsigned int i = 0; i < adc.getNumInputs(); ++i) {
             std::cout << "Input " << i;
             try {
-                float voltage = adc->getVoltage(i);
+                float voltage = adc.getVoltage(i);
                 std::cout << ": Voltage = " << voltage << "V" << std::endl;
             } catch (std::exception& e) {
                 std::cerr << e.what() << std::endl;
diff --git a/examples/c++/ds1808lc.cxx b/examples/c++/ds1808lc.cxx
index da245dec..7a44328d 100644
--- a/examples/c++/ds1808lc.cxx
+++ b/examples/c++/ds1808lc.cxx
@@ -8,7 +8,7 @@
 #define DS1808_GPIO_PWR 15 // Edison GP165
 
 void
-printState(upm::ILightController& lightController)
+printState(upm::DS1808LC& lightController)
 {
     if (lightController.isPowered()) {
         std::cout << "Light is powered, brightness = " << lightController.getBrightness()
diff --git a/examples/c++/hlg150h.cxx b/examples/c++/hlg150h.cxx
index 660058ce..cf31077b 100644
--- a/examples/c++/hlg150h.cxx
+++ b/examples/c++/hlg150h.cxx
@@ -3,13 +3,12 @@
 #include <string>
 
 #include "hlg150h.hpp"
-#include "iLightController.hpp"
 
 #define HLG150H_GPIO_RELAY 21
 #define HLG150H_GPIO_PWM 22
 
 void
-printState(upm::ILightController& lightController)
+printState(upm::HLG150H& lightController)
 {
     if (lightController.isPowered()) {
         std::cout << "Light is powered, brightness = " << lightController.getBrightness()
diff --git a/examples/c++/lp8860.cxx b/examples/c++/lp8860.cxx
index 181c1ce9..85448030 100644
--- a/examples/c++/lp8860.cxx
+++ b/examples/c++/lp8860.cxx
@@ -2,14 +2,13 @@
 #include <stdlib.h>
 #include <string>
 
-#include "iLightController.hpp"
 #include "lp8860.hpp"
 
 #define EDISON_I2C_BUS 1   // Edison I2C-1
 #define LP8860_GPIO_PWR 45 // Edison GP45
 
 void
-printState(upm::ILightController& lightController)
+printState(upm::LP8860& lightController)
 {
     if (lightController.isPowered()) {
         std::cout << "Light is powered, brightness = " << lightController.getBrightness()
diff --git a/examples/c++/t6713-co2-sensor.cxx b/examples/c++/t6713-co2-sensor.cxx
index 444c66ef..438a6a9f 100644
--- a/examples/c++/t6713-co2-sensor.cxx
+++ b/examples/c++/t6713-co2-sensor.cxx
@@ -27,7 +27,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "iCO2Sensor.hpp"
 #include "mraa/common.h"
 #include "t6713.hpp"
 #include "upm_utilities.h"
@@ -40,19 +39,16 @@ int
 main()
 {
     /* Create an instance of the T6713 sensor */
-    upm::T6713 sensor(EDISON_I2C_BUS);
+    upm::T6713 cO2Sensor(EDISON_I2C_BUS);
 
-    /* Show usage from the ICO2Sensor interface */
-    upm::ICO2Sensor* cO2Sensor = static_cast<upm::ICO2Sensor*>(&sensor);
-
-    if (cO2Sensor == NULL) {
-        std::cout << "CO2 sensor not detected" << std::endl;
-        return 1;
-    }
-    std::cout << "CO2 sensor " << cO2Sensor->getModuleName() << " detected" << std::endl;
+    // if (cO2Sensor == NULL) {
+    //     std::cout << "CO2 sensor not detected" << std::endl;
+    //     return 1;
+    // }
+    std::cout << "CO2 sensor " << cO2Sensor.getModuleName() << " detected" << std::endl;
     while (true) {
         try {
-            uint16_t value = cO2Sensor->getPpm();
+            uint16_t value = cO2Sensor.getPpm();
             std::cout << "CO2 level = " << value << " ppm" << std::endl;
         } catch (std::exception& e) {
             std::cerr << e.what() << std::endl;
diff --git a/examples/java/BME280_Interface_Example.java b/examples/java/BME280_Interface_Example.java
index fb0c487c..b79efc0f 100644
--- a/examples/java/BME280_Interface_Example.java
+++ b/examples/java/BME280_Interface_Example.java
@@ -24,7 +24,7 @@
  */
 
 import upm_bmp280.*;
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 public class BME280_Interface_Example
 {
diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt
index ad020987..bd684115 100644
--- a/examples/java/CMakeLists.txt
+++ b/examples/java/CMakeLists.txt
@@ -64,81 +64,81 @@ function(add_example example_class_name dependency_list)
     add_dependencies(${example_class_name} ${java_targets_list})
 endfunction()
 
-add_example(A110X_Example "a110x;new_interfaces")
-add_example(A110X_intr_Example "a110x;new_interfaces")
+add_example(A110X_Example "a110x;interfaces")
+add_example(A110X_intr_Example "a110x;interfaces")
 add_example(Ad8232_Example ad8232)
 add_example(ADC121C021_Example adc121c021)
-add_example(Ads1015_Example "ads1x15;interfaces")
+add_example(Ads1015_Example "ads1x15")
 add_example(Ads1115_Example ads1x15)
 add_example(Adxl345_Example adxl345)
-add_example(AM2315_Example "am2315;new_interfaces")
+add_example(AM2315_Example "am2315;interfaces")
 add_example(APA102_Example apa102)
-add_example(Apds9002_Example "apds9002;new_interfaces")
-add_example(BH1750_Example "bh1750;new_interfaces")
-add_example(BISS0001_Example "biss0001;new_interfaces")
-add_example(BMA250E_Example "bma250e;new_interfaces")
-add_example(BMC150_Example "bmx055;new_interfaces")
-add_example(BME280_Example "bmp280;new_interfaces")
+add_example(Apds9002_Example "apds9002;interfaces")
+add_example(BH1750_Example "bh1750;interfaces")
+add_example(BISS0001_Example "biss0001;interfaces")
+add_example(BMA250E_Example "bma250e;interfaces")
+add_example(BMC150_Example "bmx055;interfaces")
+add_example(BME280_Example "bmp280;interfaces")
 add_example(BMG160_Example bmg160)
-add_example(BMI055_Example "bmx055;new_interfaces")
-add_example(BMI160_Example "bmi160;new_interfaces")
+add_example(BMI055_Example "bmx055;interfaces")
+add_example(BMI160_Example "bmi160;interfaces")
 add_example(BMM150_Example bmm150)
-add_example(BMP280_Example "bmp280;new_interfaces")
-add_example(BMPX8X_Example "bmpx8x;new_interfaces")
-add_example(BMX055_Example "bmx055;new_interfaces")
+add_example(BMP280_Example "bmp280;interfaces")
+add_example(BMPX8X_Example "bmpx8x;interfaces")
+add_example(BMX055_Example "bmx055;interfaces")
 add_example(BNO055_Example bno055)
-add_example(Button_Example button)
-add_example(Button_intr_Example button)
+add_example(Button_Example "button;interfaces")
+add_example(Button_intr_Example "button;interfaces")
 add_example(Buzzer_Example buzzer)
 add_example(CJQ4435_Example cjq4435)
-add_example(Collision_Example "collision;new_interfaces")
+add_example(Collision_Example "collision;interfaces")
 add_example(CWLSXXA_Example cwlsxxa)
-add_example(DFREC_Example dfrec)
-add_example(DFRORP_Example dfrorp)
+add_example(DFREC_Example "dfrec;interfaces")
+add_example(DFRORP_Example "dfrorp;interfaces")
 add_example(DS1307_Example ds1307)
-add_example(ECEZO_Example ecezo)
+add_example(ECEZO_Example "ecezo;interfaces")
 add_example(ECS1030_Example ecs1030)
-add_example(EHR_Example "ehr;new_interfaces")
-add_example(Emg_Example emg)
+add_example(EHR_Example "ehr;interfaces")
+add_example(Emg_Example "emg;interfaces")
 add_example(ENC03R_Example enc03r)
-add_example(ES08A_Example "servo;interfaces")
+add_example(ES08A_Example "servo")
 add_example(FlexSensor_Example flex)
-add_example(Gp2y0a_Example gp2y0a)
-add_example(GroveButton_Example grove)
-add_example(GroveButton_intr_Example grove)
-add_example(GroveEHR_Example "groveehr;new_interfaces")
-add_example(GroveEmg_Example groveemg)
-add_example(GroveGsr_Example grovegsr)
+add_example(Gp2y0a_Example "gp2y0a;interfaces")
+add_example(GroveButton_Example "grove;interfaces")
+add_example(GroveButton_intr_Example "grove;interfaces")
+add_example(GroveEHR_Example "groveehr;interfaces")
+add_example(GroveEmg_Example "groveemg;interfaces")
+add_example(GroveGsr_Example "grovegsr;interfaces")
 add_example(GroveLEDBar_Example my9221)
 add_example(GroveLED_Example grove)
 add_example(GroveLed_multi_Example grove)
-add_example(GroveLight_Example "grove;new_interfaces")
-add_example(GroveLineFinder_Example grovelinefinder)
+add_example(GroveLight_Example "grove;interfaces")
+add_example(GroveLineFinder_Example "grovelinefinder;interfaces")
 add_example(GroveMD_Example grovemd)
-add_example(GroveMoisture_Example "grovemoisture;new_interfaces")
+add_example(GroveMoisture_Example "grovemoisture;interfaces")
 add_example(GroveMQ3_Example gas)
 add_example(GroveMQ9_Example gas)
 add_example(GroveO2_Example groveo2)
 add_example(GroveQTouch_Example at42qt1070)
 add_example(GroveRelay_Example grove)
-add_example(GroveRotary_Example grove)
+add_example(GroveRotary_Example "grove;interfaces")
 add_example(GROVESCAM_Example grovescam)
 add_example(GroveSlide_Example grove)
 add_example(GroveSpeaker_Example grovespeaker)
-add_example(GroveTemp_Example "grove;new_interfaces")
-add_example(GroveVDiv_Example grovevdiv)
+add_example(GroveTemp_Example "grove;interfaces")
+add_example(GroveVDiv_Example "grovevdiv;interfaces")
 add_example(GroveWater_Example grovewater)
 add_example(GroveWFS_Example grovewfs)
-add_example(Gsr_Example gsr)
+add_example(Gsr_Example "gsr;interfaces")
 add_example(GUVAS12D_Example guvas12d)
-add_example(H3LIS331DL_Example "h3lis331dl;new_interfaces")
-add_example(HCSR04_Example "hcsr04;new_interfaces")
+add_example(H3LIS331DL_Example "h3lis331dl;interfaces")
+add_example(HCSR04_Example "hcsr04;interfaces")
 add_example(HKA5_Example hka5)
 add_example(HM11_Example hm11)
 add_example(Hmc5883l_Example hmc5883l)
 add_example(HMTRP_Example hmtrp)
-add_example(HP20x_Example "hp20x;new_interfaces")
-add_example(HTU21D_Example "htu21d;new_interfaces")
+add_example(HP20x_Example "hp20x;interfaces")
+add_example(HTU21D_Example "htu21d;interfaces")
 add_example(Itg3200_Example itg3200)
 add_example(Jhd1313m1_Example jhd1313m1)
 add_example(Jhd1313m1_lcd_Example jhd1313m1)
@@ -150,60 +150,60 @@ add_example(Lcm1602_parallel_Example lcm1602)
 add_example(LDT0028_Example ldt0028)
 add_example(LE910_Example uartat)
 add_example(LED_Example led)
-add_example(Light_Example "light;new_interfaces")
-add_example(LineFinder_Example linefinder)
-add_example(LIS2DS12_Example "lis2ds12;new_interfaces")
+add_example(Light_Example "light;interfaces")
+add_example(LineFinder_Example "linefinder;interfaces")
+add_example(LIS2DS12_Example "lis2ds12;interfaces")
 add_example(LoL_Example lol)
-add_example(LSM303AGR_Example "lsm303agr;new_interfaces")
-add_example(LSM303D_Example "lsm303d;new_interfaces")
+add_example(LSM303AGR_Example "lsm303agr;interfaces")
+add_example(LSM303D_Example "lsm303d;interfaces")
 add_example(LSM303DLH_Example lsm303dlh)
-add_example(LSM6DS3H_Example "lsm6ds3h;new_interfaces")
-add_example(LSM6DSL_Example "lsm6dsl;new_interfaces")
+add_example(LSM6DS3H_Example "lsm6ds3h;interfaces")
+add_example(LSM6DSL_Example "lsm6dsl;interfaces")
 add_example(M24LR64E_Example m24lr64e)
 add_example(MAX30100_Example max30100)
 add_example(MAX31855_Example max31855)
-add_example(MAX44000_Example max44000)
+add_example(MAX44000_Example "max44000;interfaces")
 add_example(MAX5487_Example max5487)
 add_example(MAXds3231m_Example maxds3231m)
-add_example(MB704X_Example "mb704x;new_interfaces")
+add_example(MB704X_Example "mb704x;interfaces")
 add_example(MCP2515_Example mcp2515)
 add_example(MCP2515_TXRX_Example mcp2515)
 add_example(MD_Example md)
 add_example(MHZ16_Example mhz16)
 add_example(Microphone_Example mic)
 add_example(MMA7361_Example mma7361)
-add_example(MMA7455_Example "mma7455;new_interfaces")
-add_example(MMA7660_Example "mma7660;new_interfaces")
-add_example(Moisture_Example "moisture;new_interfaces")
-add_example(MPL3115A2_Example "mpl3115a2;new_interfaces")
+add_example(MMA7455_Example "mma7455;interfaces")
+add_example(MMA7660_Example "mma7660;interfaces")
+add_example(Moisture_Example "moisture;interfaces")
+add_example(MPL3115A2_Example "mpl3115a2;interfaces")
 add_example(MPR121_Example mpr121)
-add_example(MPU9150_Example "mpu9150;new_interfaces")
+add_example(MPU9150_Example "mpu9150;interfaces")
 add_example(MQ2_Example gas)
 add_example(MQ303A_Example mq303a)
 add_example(MQ5_Example gas)
-add_example(MS5803_Example "ms5803;new_interfaces")
+add_example(MS5803_Example "ms5803;interfaces")
 add_example(NMEAGPS_Example nmea_gps)
 add_example(NMEAGPS_I2C_Example nmea_gps)
 add_example(NRF24L01_receiver_Example nrf24l01)
 add_example(NRF24L01_transmitter_Example nrf24l01)
 add_example(NUNCHUCK_Example nunchuck)
 add_example(O2_Example o2)
-add_example(OTP538U_Example otp538u)
+add_example(OTP538U_Example "otp538u;interfaces")
 add_example(P9813_Example p9813)
 add_example(PPD42NS_Example ppd42ns)
 add_example(Pulsensor_Example pulsensor)
 add_example(Relay_Example relay)
-add_example(RFR359F_Example "rfr359f;new_interfaces")
+add_example(RFR359F_Example "rfr359f;interfaces")
 add_example(RN2903_Example rn2903)
 add_example(RN2903_P2P_RX_Example rn2903)
 add_example(RN2903_P2P_TX_Example rn2903)
-add_example(RotaryEncoder_Example rotaryencoder)
-add_example(Rotary_Example rotary)
+add_example(RotaryEncoder_Example "rotaryencoder;interfaces")
+add_example(Rotary_Example "rotary;interfaces")
 add_example(RPR220_Example rpr220)
 add_example(RPR220_intr_Example rpr220)
 add_example(SCAM_Example scam)
 add_example(SensorTemplate_Example sensortemplate)
-add_example(SHT1X_Example "sht1x;new_interfaces")
+add_example(SHT1X_Example "sht1x;interfaces")
 add_example(Slide_Example slide)
 add_example(SM130_Example sm130)
 add_example(Speaker_Example speaker)
@@ -211,18 +211,18 @@ add_example(SpeakerPWM_Example speaker)
 add_example(SSD1308_oled_Example lcd)
 add_example(SSD1327_oled_Example lcd)
 add_example(ST7735_Example st7735)
-add_example(TEAMS_Example teams)
-add_example(Temperature_Example temperature)
-add_example(TEX00_Example tex00)
-add_example(Th02_Example "th02;new_interfaces")
+add_example(TEAMS_Example "teams;interfaces")
+add_example(Temperature_Example "temperature;interfaces")
+add_example(TEX00_Example "tex00;interfaces")
+add_example(Th02_Example "th02;interfaces")
 add_example(TM1637_Example tm1637)
 add_example(TP401_Example gas)
-add_example(TSL2561_Example "tsl2561;new_interfaces")
-add_example(TTP223_Example ttp223)
+add_example(TSL2561_Example "tsl2561;interfaces")
+add_example(TTP223_Example "ttp223;interfaces")
 add_example(ULN200XA_Example uln200xa)
-add_example(VDiv_Example vdiv)
+add_example(VDiv_Example "vdiv;interfaces")
 add_example(VEML6070_Example veml6070)
-add_example(Water_Example water)
+add_example(Water_Example "water;interfaces")
 add_example(WaterLevelSensor_Example waterlevel)
 add_example(WFS_Example wfs)
 add_example(WT5001_Example wt5001)
@@ -230,9 +230,9 @@ add_example(YG1006_Example yg1006)
 add_example(ZFM20_Example zfm20)
 
 if(SWIG_VERSION VERSION_GREATER 3.0.8)
-    add_example(BME280_Interface_Example "bmp280;new_interfaces")
-    add_example(IMS_Example "ims;new_interfaces")
-    add_example(RHUSB_Example "rhusb;new_interfaces")
+    add_example(BME280_Interface_Example "bmp280;interfaces")
+    add_example(IMS_Example "ims;interfaces")
+    add_example(RHUSB_Example "rhusb;interfaces")
 endif()
 
 if (OPENZWAVE_FOUND)
diff --git a/examples/java/SHT1X_Example.java b/examples/java/SHT1X_Example.java
index 961c27cd..3622db0f 100644
--- a/examples/java/SHT1X_Example.java
+++ b/examples/java/SHT1X_Example.java
@@ -23,7 +23,7 @@
  */
 
 import upm_sht1x.SHT1X;
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 public class SHT1X_Example
 {
diff --git a/examples/java/iDistance_Example.java b/examples/java/iDistance_Example.java
index 36ce822c..84125fb1 100644
--- a/examples/java/iDistance_Example.java
+++ b/examples/java/iDistance_Example.java
@@ -2,7 +2,7 @@
  * Author: Serban Waltter <serban.waltter@rinftech.com>
  */
 
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.ArrayList;
 
diff --git a/examples/java/iHeartRate_Example.java b/examples/java/iHeartRate_Example.java
index ddcf0a8e..b0d1803c 100644
--- a/examples/java/iHeartRate_Example.java
+++ b/examples/java/iHeartRate_Example.java
@@ -2,7 +2,7 @@
  * Author: Serban Waltter <serban.waltter@rinftech.com>
  */
 
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.ArrayList;
 
diff --git a/examples/java/iHumidity_Example.java b/examples/java/iHumidity_Example.java
index b3092f60..dcab8e8d 100644
--- a/examples/java/iHumidity_Example.java
+++ b/examples/java/iHumidity_Example.java
@@ -2,7 +2,7 @@
  * Author: Serban Waltter <serban.waltter@rinftech.com>
  */
 
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.ArrayList;
 
diff --git a/examples/java/iLight_Example.java b/examples/java/iLight_Example.java
index c68a5ddb..adb3a362 100644
--- a/examples/java/iLight_Example.java
+++ b/examples/java/iLight_Example.java
@@ -2,7 +2,7 @@
  * Author: Serban Waltter <serban.waltter@rinftech.com>
  */
 
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.ArrayList;
 
diff --git a/examples/java/iMoisture_Example.java b/examples/java/iMoisture_Example.java
index c8faab27..326a3ffe 100644
--- a/examples/java/iMoisture_Example.java
+++ b/examples/java/iMoisture_Example.java
@@ -2,7 +2,7 @@
  * Author: Serban Waltter <serban.waltter@rinftech.com>
  */
 
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import upm_moisture.*;
 import upm_ims.*;
diff --git a/examples/java/iPressure_Example.java b/examples/java/iPressure_Example.java
index 59dbb750..48fb2c6c 100644
--- a/examples/java/iPressure_Example.java
+++ b/examples/java/iPressure_Example.java
@@ -7,7 +7,7 @@ import java.util.ArrayList;
 import upm_bmp280.BMP280;
 import upm_hp20x.HP20X;
 import upm_ms5611.MS5611;
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 /**
  * iPressure_Example
diff --git a/include/interfaces/CMakeLists.txt b/include/interfaces/CMakeLists.txt
index f0b93892..47954b9e 100644
--- a/include/interfaces/CMakeLists.txt
+++ b/include/interfaces/CMakeLists.txt
@@ -1,4 +1,4 @@
-set (libname "new_interfaces")
+set (libname "interfaces")
 set (libdescription "CXX Interface Library")
 set (module_src ${libname}.cxx)
 
diff --git a/include/interfaces/iAcceleration.hpp b/include/interfaces/iAcceleration.hpp
index dd95e460..c81a65d2 100644
--- a/include/interfaces/iAcceleration.hpp
+++ b/include/interfaces/iAcceleration.hpp
@@ -40,7 +40,7 @@ namespace upm
              * Get acceleration values on X, Y and Z axis.
              * v[0] = X, v[1] = Y, v[2] = Z
              * 
-             * @return vector of 3 floats containing acceleration on each axis
+             * @return vector of 3 floats containing acceleration on each axis in Gs
              */
             virtual std::vector<float> getAcceleration() = 0;
     };
diff --git a/include/interfaces/new_interfaces.cxx b/include/interfaces/interfaces.cxx
similarity index 66%
rename from include/interfaces/new_interfaces.cxx
rename to include/interfaces/interfaces.cxx
index 72b0defb..768667a6 100644
--- a/include/interfaces/new_interfaces.cxx
+++ b/include/interfaces/interfaces.cxx
@@ -1,9 +1,14 @@
+#include "iAcceleration.hpp"
+#include "iAngle.hpp"
+#include "iButton.hpp"
 #include "iClock.hpp"
 #include "iCollision.hpp"
 #include "iDistance.hpp"
 #include "iDistanceInterrupter.hpp"
 #include "iEC.hpp"
+#include "iElectromagnet.hpp"
 #include "iEmg.hpp"
+#include "iGps.hpp"
 #include "iHallEffect.hpp"
 #include "iHeartRate.hpp"
 #include "iHumidity.hpp"
@@ -11,6 +16,10 @@
 #include "iLineFinder.hpp"
 #include "iMoisture.hpp"
 #include "iMotion.hpp"
+#include "iOrp.hpp"
+#include "iPH.hpp"
 #include "iPressure.hpp"
+#include "iProximity.hpp"
 #include "iTemperature.hpp"
-#include "iAcceleration.hpp"
+#include "iVDiv.hpp"
+#include "iWater.hpp"
diff --git a/include/interfaces/new_interfaces.i b/include/interfaces/interfaces.i
similarity index 75%
rename from include/interfaces/new_interfaces.i
rename to include/interfaces/interfaces.i
index 07098d5f..b4bf7f7c 100644
--- a/include/interfaces/new_interfaces.i
+++ b/include/interfaces/interfaces.i
@@ -1,7 +1,7 @@
 #ifdef SWIGPYTHON
-%module (package="upm") pyupm_new_interfaces
+%module (package="upm") pyupm_interfaces
 #else
-%module new_interfaces
+%module interfaces
 #endif
 
 #ifdef SWIGJAVA
@@ -39,11 +39,17 @@ import java.lang.Float;
     
     %template(floatVector) std::vector<float>;
 
+    %interface_impl (upm::iAcceleration);
+    %interface_impl (upm::iAngle);
+    %interface_impl (upm::iButton);
     %interface_impl (upm::iClock);
     %interface_impl (upm::iCollision);
     %interface_impl (upm::iDistance);
     %interface_impl (upm::iDistanceInterrupter);
     %interface_impl (upm::iEC);
+    %interface_impl (upm::iElectromagnet);
+    %interface_impl (upm::iEmg);
+    %interface_impl (upm::iGps);
     %interface_impl (upm::iHallEffect);
     %interface_impl (upm::iHeartRate);
     %interface_impl (upm::iHumidity);
@@ -51,17 +57,27 @@ import java.lang.Float;
     %interface_impl (upm::iLineFinder);
     %interface_impl (upm::iMoisture);
     %interface_impl (upm::iMotion);
+    %interface_impl (upm::iOrp);
+    %interface_impl (upm::iPH);
     %interface_impl (upm::iPressure);
+    %interface_impl (upm::iProximity);
     %interface_impl (upm::iTemperature);
-    %interface_impl (upm::iAcceleration);
+    %interface_impl (upm::iVDiv);
+    %interface_impl (upm::iWater);
 #endif
 
 %{
+    #include "iAcceleration.hpp"
+    #include "iAngle.hpp"
+    #include "iButton.hpp"
     #include "iClock.hpp"
     #include "iCollision.hpp"
     #include "iDistance.hpp"
     #include "iDistanceInterrupter.hpp"
     #include "iEC.hpp"
+    #include "iElectromagnet.hpp"
+    #include "iEmg.hpp"
+    #include "iGps.hpp"
     #include "iHallEffect.hpp"
     #include "iHeartRate.hpp"
     #include "iHumidity.hpp"
@@ -69,16 +85,26 @@ import java.lang.Float;
     #include "iLineFinder.hpp"
     #include "iMoisture.hpp"
     #include "iMotion.hpp"
+    #include "iOrp.hpp"
+    #include "iPH.hpp"
     #include "iPressure.hpp"
+    #include "iProximity.hpp"
     #include "iTemperature.hpp"
-    #include "iAcceleration.hpp"
+    #include "iVDiv.hpp"
+    #include "iWater.hpp"
 %}
 
+%include "iAcceleration.hpp"
+%include "iAngle.hpp"
+%include "iButton.hpp"
 %include "iClock.hpp"
 %include "iCollision.hpp"
 %include "iDistance.hpp"
 %include "iDistanceInterrupter.hpp"
 %include "iEC.hpp"
+%include "iElectromagnet.hpp"
+%include "iEmg.hpp"
+%include "iGps.hpp"
 %include "iHallEffect.hpp"
 %include "iHeartRate.hpp"
 %include "iHumidity.hpp"
@@ -86,9 +112,13 @@ import java.lang.Float;
 %include "iLineFinder.hpp"
 %include "iMoisture.hpp"
 %include "iMotion.hpp"
+%include "iOrp.hpp"
+%include "iPH.hpp"
 %include "iPressure.hpp"
+%include "iProximity.hpp"
 %include "iTemperature.hpp"
-%include "iAcceleration.hpp"
+%include "iVDiv.hpp"
+%include "iWater.hpp"
 
 /* Java-specific SWIG syntax */
 #ifdef SWIGJAVA
diff --git a/scripts/build-doc.sh b/scripts/build-doc.sh
index 26ad679b..af03b795 100755
--- a/scripts/build-doc.sh
+++ b/scripts/build-doc.sh
@@ -25,7 +25,7 @@ cd ${ROOT_DIR} && make -j8 -Cbuild 2> ${BUILD_LOGS_DIR}/build-doc.log
 cd ${BUILD_DIR} && find ../src/ -name "*.i" > upm.i.list && \
 ../doxy/doxyport/doxyport upm.i.list \
     --cmake ./compile_commands.json \
-    --source ../src/interfaces/,../src/bacnetmstp,src \
+    --source ../src/bacnetmstp,src \
     --destination src/ \
     --convert-protected-to-private \
     --output upm-java-files.txt \
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 72876b37..ddb082d7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -255,23 +255,23 @@ function (_get_current_dot_i_file filePrefix varDotIFile)
       string(REPLACE "#" "%" SWIG_PERCENT_INCLUDES "${SWIG_HASH_INCLUDES}")
       if(module_iface)
         # Set up Python bindings
-        set(PYTHON_NEW_INTERFACES "#ifdef SWIGPYTHON\n")
-        string(APPEND PYTHON_NEW_INTERFACES "%module (package=\"pyupm_new_interfaces\") ${libname}\n")
-        string(APPEND PYTHON_NEW_INTERFACES "#endif")
+        set(PYTHON_INTERFACES "#ifdef SWIGPYTHON\n")
+        string(APPEND PYTHON_INTERFACES "%module (package=\"upm\") ${libname}\n")
+        string(APPEND PYTHON_INTERFACES "#endif")
         # Include interfaces
-        set(IMPORT_NEW_INTERFACES "%import \"interfaces/new_interfaces.i\"")
+        set(IMPORT_INTERFACES "%import \"interfaces/interfaces.i\"")
         # Set up Java bindings
         string(APPEND JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\n")
-        string(APPEND JAVA_TYPEMAPS "import upm_new_interfaces.*;\n%}")
+        string(APPEND JAVA_TYPEMAPS "import upm_interfaces.*;\n%}")
         if (CMAKE_VERSION VERSION_LESS "3.3" )
           list (FIND module_iface "iAcceleration.hpp" _index)
           if (${_index} GREATER -1)
-            set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_new_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
+            set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
           endif()
         else()
           cmake_policy(SET CMP0057 NEW)
           if ("iAcceleration.hpp" IN_LIST module_iface)
-            set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_new_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
+            set(JAVA_TYPEMAPS "%typemap(javaimports) SWIGTYPE %{\nimport upm_interfaces.*;\n\nimport java.util.AbstractList;\nimport java.lang.Float;\n%}\n")
           endif()
         endif()
       endif()
@@ -329,7 +329,7 @@ macro(_upm_swig_python)
   set (python_wrapper_target ${SWIG_MODULE_${python_wrapper_name}_REAL_NAME})
 
   if(module_iface)
-    add_dependencies(${python_wrapper_target} _pyupm_new_interfaces-python${PYTHON_VERSION_MAJOR})
+    add_dependencies(${python_wrapper_target} _pyupm_interfaces-python${PYTHON_VERSION_MAJOR})
   endif()
 
   add_dependencies(${python_wrapper_target} ${libname})
@@ -464,7 +464,7 @@ function(upm_swig_node)
 
     # Add interfaces if necessary
     if(module_iface)
-      add_dependencies(jsupm_${libname} jsupm_new_interfaces)
+      add_dependencies(jsupm_${libname} jsupm_interfaces)
     endif()
 
     add_dependencies(jsupm_${libname} ${libname})
@@ -556,15 +556,9 @@ function(upm_swig_java)
 
     # If the C++ target depends on C++ interfaces, make the JAVA target
     # depend on the JAVA interfaces
-    if ("${_c_cxx_dependency_list}" MATCHES interfaces)
-      add_dependencies(javaupm_${libname} javaupm_interfaces)
-      # If this target depends on interfaces, include the java interfaces
-      # target .jar file in the classpath, otherwise this variable will be empty
-      set (INTERFACES_JAR_FILE ${CMAKE_BINARY_DIR}/src/interfaces/upm_interfaces.jar)
-    endif ()
     if(module_iface)
-      add_dependencies(javaupm_${libname} javaupm_new_interfaces)
-      set (NEW_INTERFACES_JAR_FILE ${CMAKE_BINARY_DIR}/interfaces/upm_new_interfaces.jar)
+      add_dependencies(javaupm_${libname} javaupm_interfaces)
+      set (INTERFACES_JAR_FILE ${CMAKE_BINARY_DIR}/interfaces/upm_interfaces.jar)
     endif()
     # For linker to report unresolved symbols.  Note, there is currently no test
     # for linker flags (similar to compile files), so this is it for now.
@@ -616,7 +610,7 @@ function(upm_swig_java)
     add_custom_command (TARGET javaupm_${libname}
         POST_BUILD
         COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/upm_${libname}
-        COMMAND ${JAVAC} *.java -d ${CMAKE_CURRENT_BINARY_DIR} -cp ${INTERFACES_JAR_FILE}:${NEW_INTERFACES_JAR_FILE}:.
+        COMMAND ${JAVAC} *.java -d ${CMAKE_CURRENT_BINARY_DIR} -cp ${INTERFACES_JAR_FILE}:.
         COMMAND ${JAR} cf upm_${libname}.jar upm_${libname}
     )
 
@@ -678,10 +672,8 @@ if (BUILDSWIGNODE)
 
         # Utilities and interfaces
         file (COPY ${CMAKE_SOURCE_DIR}/src/utilities DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/jsupm_${libname})
-        file (COPY ${CMAKE_SOURCE_DIR}/src/interfaces DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/jsupm_${libname})
         set (upm_LIB_SRCS_GYP "'utilities/upm_utilities.c',\n${upm_LIB_SRCS_GYP}")
         set (upm_LIB_INCLUDE_DIRS_GYP "'utilities',\n${upm_LIB_INCLUDE_DIRS_GYP}")
-        set (upm_LIB_INCLUDE_DIRS_GYP "'interfaces',\n${upm_LIB_INCLUDE_DIRS_GYP}")
 
         # Add readme, package.json for NPM and node-gyp config file
         configure_file (${PROJECT_SOURCE_DIR}/src/binding.gyp.in ${CMAKE_CURRENT_BINARY_DIR}/jsupm_${libname}/binding.gyp @ONLY)
@@ -978,12 +970,6 @@ if (NOT "${MODULE_LIST}" MATCHES ";utilities;")
   set(MODULE_LIST "utilities;${MODULE_LIST}")
 endif()
 
-# If the module list does NOT include the interfaces directory, prepend it since
-# some sensor library targets depend on interfaces
-if (NOT "${MODULE_LIST}" MATCHES ";interfaces;")
-  set(MODULE_LIST "interfaces;${MODULE_LIST}")
-endif()
-
 # Iterate over each directory in MODULE_LIST
 foreach(subdir ${MODULE_LIST})
   if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/CMakeLists.txt)
diff --git a/src/a110x/a110x.i b/src/a110x/a110x.i
index 18f50c94..98bb5f6e 100644
--- a/src/a110x/a110x.i
+++ b/src/a110x/a110x.i
@@ -2,14 +2,14 @@
 %module (package="upm") a110x
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 /* Macro for loading javaupm_a110x */
diff --git a/src/abp/abp.i b/src/abp/abp.i
index 8a162261..fa3384c7 100644
--- a/src/abp/abp.i
+++ b/src/abp/abp.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_abp)
diff --git a/src/ads1x15/CMakeLists.txt b/src/ads1x15/CMakeLists.txt
index cce80b43..f5078b0a 100644
--- a/src/ads1x15/CMakeLists.txt
+++ b/src/ads1x15/CMakeLists.txt
@@ -2,7 +2,7 @@ set (libname "ads1x15")
 set (libdescription "Texas Instruments I2C ADC Library")
 set (module_src ${libname}.cxx ads1115.cxx ads1015.cxx)
 set (module_hpp ${libname}.hpp ads1115.hpp ads1015.hpp)
-upm_module_init(interfaces mraa)
+upm_module_init(mraa)
 compiler_flag_supported(CXX is_supported -Wno-overloaded-virtual)
 if (is_supported)
     target_compile_options(${libname} PUBLIC -Wno-overloaded-virtual)
diff --git a/src/ads1x15/ads1015.hpp b/src/ads1x15/ads1015.hpp
index 3b7cbe00..66e52ab6 100644
--- a/src/ads1x15/ads1015.hpp
+++ b/src/ads1x15/ads1015.hpp
@@ -26,7 +26,6 @@
 #pragma once
 
 #include "ads1x15.hpp"
-#include "interfaces/iADC.hpp"
 
 #define ADS1015_VREF 2.048
 
@@ -85,7 +84,9 @@ namespace upm {
    * @snippet ads1x15-ads1015.cxx Interesting
    * @snippet ads1x15-adc-sensor.cxx Interesting
    */
-    class ADS1015 : public ADS1X15, public IADC {
+    #define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
+
+    class ADS1015 : public ADS1X15 {
 
         public:
 
diff --git a/src/ads1x15/ads1x15.i b/src/ads1x15/ads1x15.i
index e3252da9..59242100 100644
--- a/src/ads1x15/ads1x15.i
+++ b/src/ads1x15/ads1x15.i
@@ -2,27 +2,10 @@
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
-%import "../interfaces/javaupm_iADC.i"
-%typemap(javaimports) SWIGTYPE %{import upm_interfaces.*;%}
-
 JAVA_JNI_LOADLIBRARY(javaupm_ads1x15)
 #endif
 /* END Java syntax */
 
-/* BEGIN Javascript syntax  ------------------------------------------------- */
-#ifdef SWIGJAVASCRIPT
-%include "iModuleStatus.hpp"
-%include "iADC.hpp"
-#endif
-/* END Javascript syntax */
-
-/* BEGIN Python syntax  ----------------------------------------------------- */
-#ifdef SWIGPYTHON
-%include "iModuleStatus.hpp"
-%include "iADC.hpp"
-#endif
-/* END Python syntax */
-
 /* BEGIN Common SWIG syntax ------------------------------------------------- */
 %{
 #include "ads1x15.hpp"
diff --git a/src/adxl335/adxl335.i b/src/adxl335/adxl335.i
index d41b9c71..e1c0bab0 100644
--- a/src/adxl335/adxl335.i
+++ b/src/adxl335/adxl335.i
@@ -2,7 +2,7 @@
 %module (package="upm") adxl335
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -10,7 +10,7 @@
 #ifdef SWIGJAVA
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/adxl345/adxl345.i b/src/adxl345/adxl345.i
index 2c84859d..b64c58ac 100644
--- a/src/adxl345/adxl345.i
+++ b/src/adxl345/adxl345.i
@@ -2,7 +2,7 @@
 %module (package="upm") adxl345
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -36,7 +36,7 @@
 }
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/bh1750/bh1750.i b/src/bh1750/bh1750.i
index b049d9a6..e13242fe 100644
--- a/src/bh1750/bh1750.i
+++ b/src/bh1750/bh1750.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_bh1750)
diff --git a/src/bma220/bma220.i b/src/bma220/bma220.i
index d843f17f..f953399e 100644
--- a/src/bma220/bma220.i
+++ b/src/bma220/bma220.i
@@ -2,7 +2,7 @@
 %module (package="upm") bma220
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -32,7 +32,7 @@
 %ignore installISR(int, mraa::Edge, void *, void *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/bma250e/bma250e.i b/src/bma250e/bma250e.i
index c66d057f..1d66e74a 100644
--- a/src/bma250e/bma250e.i
+++ b/src/bma250e/bma250e.i
@@ -2,7 +2,7 @@
 %module (package="upm") bma250e
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -14,7 +14,7 @@
 %ignore installISR (BMA250E_INTERRUPT_PINS_T, int, mraa::Edge , void *, void *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/bmi160/bmi160.i b/src/bmi160/bmi160.i
index e4c21049..82a1974e 100644
--- a/src/bmi160/bmi160.i
+++ b/src/bmi160/bmi160.i
@@ -2,7 +2,7 @@
 %module (package="upm") bmi160
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -29,7 +29,7 @@
 %ignore getMagnetometer(float *, float *, float *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/bmp280/CMakeLists.txt b/src/bmp280/CMakeLists.txt
index b1e36225..1d3e2b1c 100644
--- a/src/bmp280/CMakeLists.txt
+++ b/src/bmp280/CMakeLists.txt
@@ -6,5 +6,5 @@ upm_mixed_module_init (NAME bmp280
     CPP_SRC bmp280.cxx bme280.cxx
     IFACE_HDR iHumidity.hpp iPressure.hpp iTemperature.hpp
     CPP_WRAPS_C
-    REQUIRES mraa interfaces utilities-c)
+    REQUIRES mraa utilities-c)
 target_link_libraries(${libnamec} m)
diff --git a/src/bmp280/bmp280.i b/src/bmp280/bmp280.i
index 68bf5cce..3bf5fad4 100644
--- a/src/bmp280/bmp280.i
+++ b/src/bmp280/bmp280.i
@@ -2,14 +2,14 @@
 %module (package="upm") bmp280
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_bmp280)
diff --git a/src/bmpx8x/CMakeLists.txt b/src/bmpx8x/CMakeLists.txt
index a3f61328..b8834fbf 100644
--- a/src/bmpx8x/CMakeLists.txt
+++ b/src/bmpx8x/CMakeLists.txt
@@ -7,5 +7,5 @@ upm_mixed_module_init (NAME bmpx8x
     IFACE_HDR iPressure.hpp
     FTI_SRC bmpx8x_fti.c
     CPP_WRAPS_C
-    REQUIRES mraa interfaces utilities-c)
+    REQUIRES mraa utilities-c)
 target_link_libraries(${libnamec} m)
diff --git a/src/bmpx8x/bmpx8x.i b/src/bmpx8x/bmpx8x.i
index 242874b9..01f3e592 100644
--- a/src/bmpx8x/bmpx8x.i
+++ b/src/bmpx8x/bmpx8x.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_bmpx8x)
diff --git a/src/bmx055/bmx055.i b/src/bmx055/bmx055.i
index d107097d..44119a55 100644
--- a/src/bmx055/bmx055.i
+++ b/src/bmx055/bmx055.i
@@ -2,7 +2,7 @@
 %module (package="upm") bmx055
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -17,7 +17,7 @@
 %ignore getGyroscope(float *, float *, float *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/button/CMakeLists.txt b/src/button/CMakeLists.txt
index 7881c80e..0535481e 100644
--- a/src/button/CMakeLists.txt
+++ b/src/button/CMakeLists.txt
@@ -4,4 +4,5 @@ upm_mixed_module_init (NAME button
     C_SRC button.c
     CPP_HDR button.hpp
     CPP_SRC button.cxx
+    IFACE_HDR iButton.hpp
     REQUIRES mraa)
diff --git a/src/button/button.i b/src/button/button.i
index ac34e356..348676ac 100644
--- a/src/button/button.i
+++ b/src/button/button.i
@@ -1,7 +1,16 @@
+#ifdef SWIGPYTHON
+%module (package="upm") button
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
 %apply int {mraa::Edge}
 
 JAVA_ADD_INSTALLISR_EDGE(upm::Button)
diff --git a/src/collision/CMakeLists.txt b/src/collision/CMakeLists.txt
index fe3d712b..47d2345a 100644
--- a/src/collision/CMakeLists.txt
+++ b/src/collision/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME collision
     CPP_HDR collision.hpp
     CPP_SRC collision.cxx
     FTI_SRC collision_fti.c
+    IFACE_HDR iCollision.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/dfrec/CMakeLists.txt b/src/dfrec/CMakeLists.txt
index 54d55c27..3182dc9a 100644
--- a/src/dfrec/CMakeLists.txt
+++ b/src/dfrec/CMakeLists.txt
@@ -6,6 +6,7 @@ if (MRAA_OW_FOUND)
         CPP_HDR dfrec.hpp
         CPP_SRC dfrec.cxx
         FTI_SRC dfrec_fti.c
+        IFACE_HDR iEC.hpp
         CPP_WRAPS_C
         REQUIRES ds18b20 mraa utilities-c)
     # make sure the C library has the appropriate dependency on the UPM
diff --git a/src/dfrec/dfrec.i b/src/dfrec/dfrec.i
index 0af3b504..4f19adfa 100644
--- a/src/dfrec/dfrec.i
+++ b/src/dfrec/dfrec.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") dfrec
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_dfrec)
 #endif
 /* END Java syntax */
diff --git a/src/dfrorp/CMakeLists.txt b/src/dfrorp/CMakeLists.txt
index b365a519..94c6b200 100644
--- a/src/dfrorp/CMakeLists.txt
+++ b/src/dfrorp/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME dfrorp
     CPP_HDR dfrorp.hpp
     CPP_SRC dfrorp.cxx
     FTI_SRC dfrorp_fti.c
+    IFACE_HDR iOrp.hpp
     CPP_WRAPS_C
     REQUIRES mraa utilities-c)
diff --git a/src/dfrorp/dfrorp.i b/src/dfrorp/dfrorp.i
index 04000a34..e8183287 100644
--- a/src/dfrorp/dfrorp.i
+++ b/src/dfrorp/dfrorp.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") dfrorp
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_dfrorp)
 #endif
 /* END Java syntax */
diff --git a/src/dfrph/CMakeLists.txt b/src/dfrph/CMakeLists.txt
index 8017429d..551eff69 100644
--- a/src/dfrph/CMakeLists.txt
+++ b/src/dfrph/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME dfrph
     CPP_HDR dfrph.hpp
     CPP_SRC dfrph.cxx
     FTI_SRC dfrph_fti.c
+    IFACE_HDR iPH.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/ds1808lc/CMakeLists.txt b/src/ds1808lc/CMakeLists.txt
index 70cf93b5..215b5456 100644
--- a/src/ds1808lc/CMakeLists.txt
+++ b/src/ds1808lc/CMakeLists.txt
@@ -2,4 +2,4 @@ set (libname "ds1808lc")
 set (libdescription "Lighting Controller")
 set (module_src ${libname}.cxx mraa-utils.cxx)
 set (module_hpp ${libname}.hpp)
-upm_module_init(interfaces mraa)
+upm_module_init(mraa )
diff --git a/src/ds1808lc/ds1808lc.hpp b/src/ds1808lc/ds1808lc.hpp
index e6f3c7c1..6ffc3985 100644
--- a/src/ds1808lc/ds1808lc.hpp
+++ b/src/ds1808lc/ds1808lc.hpp
@@ -22,7 +22,6 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "iLightController.hpp"
 #include "mraa/i2c.hpp"
 
 namespace upm
@@ -51,7 +50,9 @@ namespace upm
  *
  * @snippet ds1808lc.cxx Interesting
  */
-class DS1808LC : public upm::ILightController
+#define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
+
+class DS1808LC
 {
 public:
    DS1808LC(int gpioPower, int i2cBus);
diff --git a/src/ds1808lc/ds1808lc.i b/src/ds1808lc/ds1808lc.i
index e68e58b4..ad36580e 100644
--- a/src/ds1808lc/ds1808lc.i
+++ b/src/ds1808lc/ds1808lc.i
@@ -4,8 +4,6 @@
 #ifdef SWIGJAVA
 %include "arrays_java.i";
 %include "../java_buffer.i"
-%typemap(javaimports) SWIGTYPE %{import upm_interfaces.*;%}
-%import "../interfaces/javaupm_iLightController.i"
 
 JAVA_JNI_LOADLIBRARY(javaupm_ds1808lc)
 #endif
@@ -13,15 +11,11 @@ JAVA_JNI_LOADLIBRARY(javaupm_ds1808lc)
 
 /* BEGIN Javascript syntax  ------------------------------------------------- */
 #ifdef SWIGJAVASCRIPT
-%include "iModuleStatus.hpp"
-%include "iLightController.hpp"
 #endif
 /* END Javascript syntax */
 
 /* BEGIN Python syntax  ----------------------------------------------------- */
 #ifdef SWIGPYTHON
-%include "iModuleStatus.hpp"
-%include "iLightController.hpp"
 #endif
 /* END Python syntax */
 
diff --git a/src/ecezo/CMakeLists.txt b/src/ecezo/CMakeLists.txt
index a23f899b..53ed8181 100644
--- a/src/ecezo/CMakeLists.txt
+++ b/src/ecezo/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME ecezo
     CPP_HDR ecezo.hpp
     CPP_SRC ecezo.cxx
     FTI_SRC ecezo_fti.c
+    IFACE_HDR iEC.hpp
     CPP_WRAPS_C
     REQUIRES mraa utilities-c)
diff --git a/src/ecezo/ecezo.i b/src/ecezo/ecezo.i
index aee7694f..0137ec44 100644
--- a/src/ecezo/ecezo.i
+++ b/src/ecezo/ecezo.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") ecezo
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_ecezo)
 #endif
 /* END Java syntax */
diff --git a/src/ehr/ehr.i b/src/ehr/ehr.i
index 757581c6..7a0b450e 100644
--- a/src/ehr/ehr.i
+++ b/src/ehr/ehr.i
@@ -2,14 +2,14 @@
 %module (package="upm") ehr
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %ignore beatISR;
diff --git a/src/emg/CMakeLists.txt b/src/emg/CMakeLists.txt
index be9eca7f..342a8ac4 100644
--- a/src/emg/CMakeLists.txt
+++ b/src/emg/CMakeLists.txt
@@ -5,4 +5,5 @@ upm_mixed_module_init (NAME emg
     CPP_HDR emg.hpp
     CPP_SRC emg.cxx
     FTI_SRC emg_fti.c
+    IFACE_HDR iEmg.hpp
     REQUIRES mraa)
diff --git a/src/gp2y0a/CMakeLists.txt b/src/gp2y0a/CMakeLists.txt
index 80cc456e..794f0f12 100644
--- a/src/gp2y0a/CMakeLists.txt
+++ b/src/gp2y0a/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME gp2y0a
     CPP_HDR gp2y0a.hpp
     CPP_SRC gp2y0a.cxx
     FTI_SRC gp2y0a_fti.c
+    IFACE_HDR iProximity.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/grove/grove.i b/src/grove/grove.i
index fe79a254..b588984c 100644
--- a/src/grove/grove.i
+++ b/src/grove/grove.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %apply int {mraa::Edge}
diff --git a/src/grovecollision/CMakeLists.txt b/src/grovecollision/CMakeLists.txt
index 09b00fa1..fdc9019d 100644
--- a/src/grovecollision/CMakeLists.txt
+++ b/src/grovecollision/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "grovecollision")
 set (libdescription "Collision Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iCollision.hpp)
 upm_module_init(mraa)
diff --git a/src/groveehr/groveehr.i b/src/groveehr/groveehr.i
index 67ae986d..7936b98d 100644
--- a/src/groveehr/groveehr.i
+++ b/src/groveehr/groveehr.i
@@ -2,14 +2,14 @@
 %module (package="upm") ehr
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %ignore beatISR;
diff --git a/src/groveemg/CMakeLists.txt b/src/groveemg/CMakeLists.txt
index c05d98c1..0eb63bef 100644
--- a/src/groveemg/CMakeLists.txt
+++ b/src/groveemg/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "groveemg")
 set (libdescription "Electromyography (EMG) Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iEmg.hpp)
 upm_module_init(mraa)
diff --git a/src/grovegsr/CMakeLists.txt b/src/grovegsr/CMakeLists.txt
index b4067436..2bc1143c 100644
--- a/src/grovegsr/CMakeLists.txt
+++ b/src/grovegsr/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "grovegsr")
 set (libdescription "Galvanic Skin Response (GSR) Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iEC.hpp)
 upm_module_init(mraa)
diff --git a/src/grovelinefinder/CMakeLists.txt b/src/grovelinefinder/CMakeLists.txt
index f2ed0893..ed7ffcff 100644
--- a/src/grovelinefinder/CMakeLists.txt
+++ b/src/grovelinefinder/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "grovelinefinder")
 set (libdescription "Line Finder")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iLineFinder.hpp)
 upm_module_init(mraa)
diff --git a/src/grovevdiv/CMakeLists.txt b/src/grovevdiv/CMakeLists.txt
index b2508ec2..ddab90ce 100644
--- a/src/grovevdiv/CMakeLists.txt
+++ b/src/grovevdiv/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "grovevdiv")
 set (libdescription "Voltage Divider")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iVDiv.hpp)
 upm_module_init(mraa)
diff --git a/src/gsr/CMakeLists.txt b/src/gsr/CMakeLists.txt
index 2b3ec8ad..1b8d6d65 100644
--- a/src/gsr/CMakeLists.txt
+++ b/src/gsr/CMakeLists.txt
@@ -5,4 +5,5 @@ upm_mixed_module_init (NAME gsr
     CPP_HDR gsr.hpp
     CPP_SRC gsr.cxx
     FTI_SRC gsr_fti.c
+    IFACE_HDR iEC.hpp
     REQUIRES mraa)
diff --git a/src/h3lis331dl/h3lis331dl.i b/src/h3lis331dl/h3lis331dl.i
index dbcdce0d..c97ef096 100644
--- a/src/h3lis331dl/h3lis331dl.i
+++ b/src/h3lis331dl/h3lis331dl.i
@@ -2,7 +2,7 @@
 %module (package="upm") h3lis331dl
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -18,7 +18,7 @@
 %ignore i2cContext;
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/hcsr04/hcsr04.i b/src/hcsr04/hcsr04.i
index 0088abe0..745fb3b8 100644
--- a/src/hcsr04/hcsr04.i
+++ b/src/hcsr04/hcsr04.i
@@ -2,14 +2,14 @@
 %module (package="upm") hcsr04
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_hcsr04)
diff --git a/src/hlg150h/CMakeLists.txt b/src/hlg150h/CMakeLists.txt
index ee975d4b..7c41a0bd 100644
--- a/src/hlg150h/CMakeLists.txt
+++ b/src/hlg150h/CMakeLists.txt
@@ -2,4 +2,4 @@ set (libname "hlg150h")
 set (libdescription "150W Constant Voltage/current LED Driver")
 set (module_src ${libname}.cxx mraa-utils.cxx)
 set (module_hpp ${libname}.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/hlg150h/hlg150h.hpp b/src/hlg150h/hlg150h.hpp
index 9d03a16d..07b3ac05 100644
--- a/src/hlg150h/hlg150h.hpp
+++ b/src/hlg150h/hlg150h.hpp
@@ -22,12 +22,12 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "interfaces/iLightController.hpp"
 // #include "mraa/gpio.hpp"
 #include "mraa/pwm.hpp"
 
 namespace upm
 {
+    #define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
 
 /**
  * @brief Meanwell HLG150H Lighting Power Supply Controller
@@ -53,13 +53,13 @@ namespace upm
  * @snippet hlg150h.cxx Interesting
  */
 
-class HLG150H : public upm::ILightController
+class HLG150H
 {
 public:
    HLG150H(int pinRelay, int pinPWM);
    ~HLG150H();
 
-   virtual int getBrightness();
+   int getBrightness();
    const char* getModuleName() { return "hlg150h"; }
    void setPowerOn();
    void setPowerOff();
diff --git a/src/hlg150h/hlg150h.i b/src/hlg150h/hlg150h.i
index 84b58cb6..e32e2678 100644
--- a/src/hlg150h/hlg150h.i
+++ b/src/hlg150h/hlg150h.i
@@ -4,8 +4,6 @@
 #ifdef SWIGJAVA
 %include "arrays_java.i";
 %include "../java_buffer.i"
-%typemap(javaimports) SWIGTYPE %{import upm_interfaces.*;%}
-%import "../interfaces/javaupm_iLightController.i"
 
 JAVA_JNI_LOADLIBRARY(javaupm_hlg150h)
 #endif
diff --git a/src/htu21d/htu21d.i b/src/htu21d/htu21d.i
index 7a44d998..9096d446 100644
--- a/src/htu21d/htu21d.i
+++ b/src/htu21d/htu21d.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %ignore getHumidityData(float*, float*, float*);
diff --git a/src/hwxpxx/hwxpxx.i b/src/hwxpxx/hwxpxx.i
index 7ea8fd0c..861217a6 100644
--- a/src/hwxpxx/hwxpxx.i
+++ b/src/hwxpxx/hwxpxx.i
@@ -2,14 +2,14 @@
 %module (package="upm") hwxpxx
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_hwxpxx)
diff --git a/src/ims/ims.i b/src/ims/ims.i
index 023b305b..bec9c2a6 100644
--- a/src/ims/ims.i
+++ b/src/ims/ims.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_ims)
diff --git a/src/interfaces/CMakeLists.txt b/src/interfaces/CMakeLists.txt
deleted file mode 100644
index c26d3248..00000000
--- a/src/interfaces/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-set (libname "interfaces")
-set (libdescription "CXX Interface Library")
-set (module_src ${libname}.cxx)
-
-upm_module_init()
-
-# Add a PUBLIC include directory to the CMAKE src dir
-target_include_directories (${libname} PUBLIC ${CMAKE_SOURCE_DIR}/src)
-
-# Don't add the hpp files with upm_module_init, this allows
-# them to be installed separately
-set (module_hpp iADC.hpp
-                iCO2Sensor.hpp
-                iHumiditySensor.hpp
-                iLightController.hpp
-                iLightSensor.hpp
-                iModuleStatus.hpp
-                iPressureSensor.hpp
-                iTemperatureSensor.hpp)
-# Install interfaces headers a bit differently
-install (FILES ${module_hpp} DESTINATION include/upm/${libname}
-    COMPONENT ${CMAKE_PROJECT_NAME})
diff --git a/src/interfaces/iADC.hpp b/src/interfaces/iADC.hpp
deleted file mode 100644
index a852f17f..00000000
--- a/src/interfaces/iADC.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#pragma once
-#include <stdint.h>
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief Interface for ADC Sensors
- */
-
-   class IADC : virtual public IModuleStatus
-   {
-   public:
-       virtual unsigned int getResolutionInBits() = 0;
-       virtual unsigned int getNumInputs() = 0;
-       virtual uint16_t getRawValue(unsigned int input) = 0;
-       virtual float getVoltage(unsigned int input) = 0;
-       virtual ~IADC() {}
-   };
-
-}
-
diff --git a/src/interfaces/iCO2Sensor.hpp b/src/interfaces/iCO2Sensor.hpp
deleted file mode 100644
index 1b00e12b..00000000
--- a/src/interfaces/iCO2Sensor.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#pragma once
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief Interface for CO Sensor
- */
-
-   class ICO2Sensor : virtual public IModuleStatus
-   {
-   public:
-       virtual uint16_t getPpm() = 0;
-       virtual ~ICO2Sensor() {}
-   };
-
-}
-
diff --git a/src/interfaces/iHumiditySensor.hpp b/src/interfaces/iHumiditySensor.hpp
deleted file mode 100644
index 48077d5a..00000000
--- a/src/interfaces/iHumiditySensor.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#pragma once
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief Interface for Humidity Sensors
- */
-
-   class IHumiditySensor : virtual public IModuleStatus
-   {
-   public:
-       virtual int getHumidityRelative () = 0;
-       virtual ~IHumiditySensor() {}
-   };
-
-}
-
diff --git a/src/interfaces/iLightController.hpp b/src/interfaces/iLightController.hpp
deleted file mode 100644
index 813d6c0a..00000000
--- a/src/interfaces/iLightController.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2014 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#pragma once
-
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief ILightController Interface for Light Controllers
- */
- 
-/**
- *
- * @brief Interface for Light Controllers
- 
- * This interface is used to represent light controllers
-
- * @snippet light-controllers.cxx Interesting 
- */
-
-    class ILightController : virtual public IModuleStatus
-    {
-    public:
-      /**
-       * Turn on power
-       *
-       * @throws std::runtime_error
-       */
-       virtual void setPowerOn() = 0;
-
-      /**
-       * Turn off power
-       *
-       * @throws std::runtime_error
-       */
-       virtual void setPowerOff() = 0;
-
-      /**
-       * Get power state
-       *
-       * @return true if powered, false otherwise
-       *
-       * @throws std::runtime_error
-       */
-       virtual bool isPowered() = 0;
-
-      /**
-       * Set brightness
-       *
-       * @param percent brightness as percentage
-       *
-       * @throws std::runtime_error
-       */
-       virtual void setBrightness(int percent) = 0;
-
-      /**
-       * Get brightness
-       *
-       * @return brightness as percentage
-       *
-       * @throws std::runtime_error
-       */
-       virtual int getBrightness() = 0;
-       
-       virtual ~ILightController() {}
-    };
-
-}
-
-
-
diff --git a/src/interfaces/iLightSensor.hpp b/src/interfaces/iLightSensor.hpp
deleted file mode 100644
index 31d34196..00000000
--- a/src/interfaces/iLightSensor.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#pragma once
-
-#include <stdint.h>
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief ILightSensor Interface for Light Sensors
- */
-
-/**
- *
- * @brief Interface for Light Sensors
-
- * This interface is used to represent light sensors
-
- * @snippet light-sensor.cxx Interesting
- */
-
-   class ILightSensor : virtual public IModuleStatus
-   {
-   public:
-
-	/**
-	 * Get visible illuminance in Lux.
-	 *
-	 * @return double visible illuminance in Lux
-	 */
-       virtual double getVisibleLux() = 0;
-
-
-       virtual ~ILightSensor() {}
-   };
-}
-
diff --git a/src/interfaces/iModuleStatus.hpp b/src/interfaces/iModuleStatus.hpp
deleted file mode 100644
index 1ba8ca77..00000000
--- a/src/interfaces/iModuleStatus.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2014 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#pragma once
-
-#include <stdexcept>
-
-namespace upm
-{
-/**
- * @brief Interface for Module Status. Sensor and Actuactor Interfaces Derive from this Interface.
- */
-
-#define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
-
-class IModuleStatus
-{
-public:
-   /**
-    * Returns name of module. This is the string in library name after libupm_
-
-    * @return name of module
-    */
-    virtual const char* getModuleName() = 0;
-
-   virtual ~IModuleStatus() {}
-};
-
-}
-
-
-
diff --git a/src/interfaces/iPressureSensor.hpp b/src/interfaces/iPressureSensor.hpp
deleted file mode 100644
index 7a5eebf8..00000000
--- a/src/interfaces/iPressureSensor.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2014 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-#pragma once
-#include <stdint.h>
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/*
- * @brief Interface for Pressue Sensors
- */
-
-   class IPressureSensor : virtual public IModuleStatus
-   {
-   public:
-       virtual int getPressurePa() = 0;
-       virtual ~IPressureSensor() {}
-   };
-
-}
-
diff --git a/src/interfaces/iTemperatureSensor.hpp b/src/interfaces/iTemperatureSensor.hpp
deleted file mode 100644
index bea30aed..00000000
--- a/src/interfaces/iTemperatureSensor.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Author: Henry Bruce <henry.bruce@intel.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#pragma once
-#include "iModuleStatus.hpp"
-
-namespace upm
-{
-/**
- * @brief Interface for Temperature Sensors
- */
-
-   class ITemperatureSensor : virtual public IModuleStatus
-   {
-   public:
-       virtual int getTemperatureCelsius () = 0;
-       virtual ~ITemperatureSensor() {}
-   };
-
-}
-
diff --git a/src/interfaces/interfaces.cxx b/src/interfaces/interfaces.cxx
deleted file mode 100644
index 5b0912d5..00000000
--- a/src/interfaces/interfaces.cxx
+++ /dev/null
@@ -1 +0,0 @@
-#include "iLightSensor.hpp"
diff --git a/src/interfaces/interfaces.i b/src/interfaces/interfaces.i
deleted file mode 100644
index 3f77d902..00000000
--- a/src/interfaces/interfaces.i
+++ /dev/null
@@ -1,18 +0,0 @@
-%include "../common_top.i"
-
-/* BEGIN Java syntax  ------------------------------------------------------- */
-#ifdef SWIGJAVA
-%import "../_upm.i"
-
-%include javaupm_iModuleStatus.i
-%include javaupm_iADC.i
-%include javaupm_iCO2Sensor.i
-%include javaupm_iHumiditySensor.i
-%include javaupm_iLightController.i
-%include javaupm_iLightSensor.i
-%include javaupm_iPressureSensor.i
-%include javaupm_iTemperatureSensor.i
-
-JAVA_JNI_LOADLIBRARY(javaupm_interfaces)
-#endif
-/* END Java syntax */
diff --git a/src/interfaces/javaupm_iADC.i b/src/interfaces/javaupm_iADC.i
deleted file mode 100644
index e50806b7..00000000
--- a/src/interfaces/javaupm_iADC.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::IADC);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iADC.hpp"
-%{
-	#include "iADC.hpp"
-%}
diff --git a/src/interfaces/javaupm_iCO2Sensor.i b/src/interfaces/javaupm_iCO2Sensor.i
deleted file mode 100644
index 237690ff..00000000
--- a/src/interfaces/javaupm_iCO2Sensor.i
+++ /dev/null
@@ -1,12 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::ICO2Sensor);
-#endif
-%include "stdint.i"
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iCO2Sensor.hpp"
-%{
-	#include "iCO2Sensor.hpp"
-%}
diff --git a/src/interfaces/javaupm_iHumiditySensor.i b/src/interfaces/javaupm_iHumiditySensor.i
deleted file mode 100644
index 1b680ded..00000000
--- a/src/interfaces/javaupm_iHumiditySensor.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::IHumiditySensor);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iHumiditySensor.hpp"
-%{
-	#include "iHumiditySensor.hpp"
-%}
diff --git a/src/interfaces/javaupm_iLightController.i b/src/interfaces/javaupm_iLightController.i
deleted file mode 100644
index 3c47d1db..00000000
--- a/src/interfaces/javaupm_iLightController.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::ILightController);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%{
-#include "iLightController.hpp"
-%}
-%include "iLightController.hpp"
diff --git a/src/interfaces/javaupm_iLightSensor.i b/src/interfaces/javaupm_iLightSensor.i
deleted file mode 100644
index 429e18a8..00000000
--- a/src/interfaces/javaupm_iLightSensor.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::ILightSensor);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iLightSensor.hpp"
-%{
-	#include "iLightSensor.hpp"
-%}
diff --git a/src/interfaces/javaupm_iModuleStatus.i b/src/interfaces/javaupm_iModuleStatus.i
deleted file mode 100644
index f8286767..00000000
--- a/src/interfaces/javaupm_iModuleStatus.i
+++ /dev/null
@@ -1,8 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::IModuleStatus);
-#endif
-%include "iModuleStatus.hpp"
-%{
-	#include "iModuleStatus.hpp"
-%}
diff --git a/src/interfaces/javaupm_iPressureSensor.i b/src/interfaces/javaupm_iPressureSensor.i
deleted file mode 100644
index 67ef7f66..00000000
--- a/src/interfaces/javaupm_iPressureSensor.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::IPressureSensor);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iPressureSensor.hpp"
-%{
-	#include "iPressureSensor.hpp"
-%}
diff --git a/src/interfaces/javaupm_iTemperatureSensor.i b/src/interfaces/javaupm_iTemperatureSensor.i
deleted file mode 100644
index 6da971af..00000000
--- a/src/interfaces/javaupm_iTemperatureSensor.i
+++ /dev/null
@@ -1,11 +0,0 @@
-#if SWIG_VERSION >= 0x030009
-    %include <swiginterface.i>
-    %interface_impl(upm::ITemperatureSensor);
-#endif
-%include "interfaces.i"
-%include "javaupm_iModuleStatus.i"
-
-%include "iTemperatureSensor.hpp"
-%{
-	#include "iTemperatureSensor.hpp"
-%}
diff --git a/src/lidarlitev3/lidarlitev3.i b/src/lidarlitev3/lidarlitev3.i
index 692cb0d2..6e511d77 100644
--- a/src/lidarlitev3/lidarlitev3.i
+++ b/src/lidarlitev3/lidarlitev3.i
@@ -2,14 +2,14 @@
 %module (package="upm") lidarlitev3
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_lidarlitev3)
diff --git a/src/linefinder/CMakeLists.txt b/src/linefinder/CMakeLists.txt
index 193728f3..4e77dd33 100644
--- a/src/linefinder/CMakeLists.txt
+++ b/src/linefinder/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME linefinder
     CPP_HDR linefinder.hpp
     CPP_SRC linefinder.cxx
     FTI_SRC linefinder_fti.c
+    IFACE_HDR iLineFinder.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/lis2ds12/lis2ds12.i b/src/lis2ds12/lis2ds12.i
index 34f634d4..439eab70 100644
--- a/src/lis2ds12/lis2ds12.i
+++ b/src/lis2ds12/lis2ds12.i
@@ -2,7 +2,7 @@
 %module (package="upm") lis2ds12
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -12,7 +12,7 @@
 #%ignore installISR(LIS2DS12_INTERRUPT_PINS_T , int ,  mraa::Edge, void *, void *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lis3dh/lis3dh.i b/src/lis3dh/lis3dh.i
index 96d646cc..fcf20444 100644
--- a/src/lis3dh/lis3dh.i
+++ b/src/lis3dh/lis3dh.i
@@ -2,7 +2,7 @@
 %module (package="upm") lis3dh
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -16,7 +16,7 @@
 %enddef
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lp8860/CMakeLists.txt b/src/lp8860/CMakeLists.txt
index 2c1e4cf0..87cdd2f0 100644
--- a/src/lp8860/CMakeLists.txt
+++ b/src/lp8860/CMakeLists.txt
@@ -2,4 +2,4 @@ set (libname "lp8860")
 set (libdescription "LED Lighting Controller")
 set (module_src ${libname}.cxx mraa-utils.cxx)
 set (module_hpp ${libname}.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/lp8860/lp8860.hpp b/src/lp8860/lp8860.hpp
index 99dac61f..48e4e619 100644
--- a/src/lp8860/lp8860.hpp
+++ b/src/lp8860/lp8860.hpp
@@ -22,11 +22,12 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "interfaces/iLightController.hpp"
 #include "mraa/i2c.hpp"
 
 namespace upm
 {
+    #define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
+
 /**
  * @brief LP8860 LED Lighting Controller
  * @defgroup lp8860 libupm-lp8860
@@ -51,12 +52,12 @@ namespace upm
  *
  * @snippet lp8860.cxx Interesting
  */
-class LP8860 : public upm::ILightController
+class LP8860
 {
 public:
    LP8860(int gpioPower, int i2cBus);
    ~LP8860();
-   virtual const char* getModuleName() { return "lp8860"; }
+   const char* getModuleName() { return "lp8860"; }
    bool isPowered();
    void setPowerOn();
    void setPowerOff();
diff --git a/src/lp8860/lp8860.i b/src/lp8860/lp8860.i
index 6b638ffe..b9759bea 100644
--- a/src/lp8860/lp8860.i
+++ b/src/lp8860/lp8860.i
@@ -2,9 +2,6 @@
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
-%typemap(javaimports) SWIGTYPE %{import upm_interfaces.*;%}
-%import "../interfaces/javaupm_iLightController.i"
-
 JAVA_JNI_LOADLIBRARY(javaupm_lp8860)
 #endif
 /* END Java syntax */
diff --git a/src/lsm303agr/lsm303agr.i b/src/lsm303agr/lsm303agr.i
index cef48f81..0098c304 100644
--- a/src/lsm303agr/lsm303agr.i
+++ b/src/lsm303agr/lsm303agr.i
@@ -2,7 +2,7 @@
 %module (package="upm") lsm303agr
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -14,7 +14,7 @@
 %ignore installISR(LSM303AGR_INTERRUPT_PINS_T , int ,  mraa::Edge , void *, void *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lsm303d/lsm303d.i b/src/lsm303d/lsm303d.i
index 238ed88f..39072460 100644
--- a/src/lsm303d/lsm303d.i
+++ b/src/lsm303d/lsm303d.i
@@ -2,7 +2,7 @@
 %module (package="upm") lsm303d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -13,7 +13,7 @@
 %ignore getAccelerometer(float *, float *, float *);
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lsm6ds3h/lsm6ds3h.i b/src/lsm6ds3h/lsm6ds3h.i
index ff938a01..bc4b299d 100644
--- a/src/lsm6ds3h/lsm6ds3h.i
+++ b/src/lsm6ds3h/lsm6ds3h.i
@@ -2,14 +2,14 @@
 %module (package="upm") lsm6ds3h
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lsm6dsl/lsm6dsl.i b/src/lsm6dsl/lsm6dsl.i
index 8dbeb361..0ccb4d5e 100644
--- a/src/lsm6dsl/lsm6dsl.i
+++ b/src/lsm6dsl/lsm6dsl.i
@@ -2,14 +2,14 @@
 %module (package="upm") lsm6dsl
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/lsm9ds0/lsm9ds0.i b/src/lsm9ds0/lsm9ds0.i
index 46620fb4..c9c1920d 100644
--- a/src/lsm9ds0/lsm9ds0.i
+++ b/src/lsm9ds0/lsm9ds0.i
@@ -2,7 +2,7 @@
 %module (package="upm") lsm9ds0
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -12,7 +12,7 @@
 %include "../java_buffer.i"
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/max31723/CMakeLists.txt b/src/max31723/CMakeLists.txt
index cdf7db74..d3b57749 100644
--- a/src/max31723/CMakeLists.txt
+++ b/src/max31723/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "max31723")
 set (libdescription "SPI/3-wire Digital Thermometer")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iTemperature.hpp)
 upm_module_init(mraa)
diff --git a/src/max44000/CMakeLists.txt b/src/max44000/CMakeLists.txt
index 48a47020..e6028451 100644
--- a/src/max44000/CMakeLists.txt
+++ b/src/max44000/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "max44000")
 set (libdescription "Ambient and Infrared Proximity Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iProximity.hpp)
 upm_module_init(mraa)
diff --git a/src/max44000/max44000.i b/src/max44000/max44000.i
index 508c1986..baa9d54d 100644
--- a/src/max44000/max44000.i
+++ b/src/max44000/max44000.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") max44000
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_max44000)
 #endif
 /* END Java syntax */
diff --git a/src/max44009/CMakeLists.txt b/src/max44009/CMakeLists.txt
index d337298c..2c8ba69e 100644
--- a/src/max44009/CMakeLists.txt
+++ b/src/max44009/CMakeLists.txt
@@ -3,4 +3,4 @@ set (libdescription "I2C Low-power Digital Ambient Light Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
 set (module_iface iLight.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/max44009/max44009.i b/src/max44009/max44009.i
index 3bc02a7b..3bdfa3f5 100644
--- a/src/max44009/max44009.i
+++ b/src/max44009/max44009.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_max44009)
diff --git a/src/mb704x/mb704x.i b/src/mb704x/mb704x.i
index 6c2792be..6c5f8a7d 100644
--- a/src/mb704x/mb704x.i
+++ b/src/mb704x/mb704x.i
@@ -2,14 +2,14 @@
 %module (package="upm") mb704x
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_mb704x)
diff --git a/src/mcp9808/CMakeLists.txt b/src/mcp9808/CMakeLists.txt
index 306b1e83..11d4f047 100644
--- a/src/mcp9808/CMakeLists.txt
+++ b/src/mcp9808/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "mcp9808")
 set (libdescription "High Accuracy I2C Temperature Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iTemperature.hpp)
 upm_module_init(mraa)
diff --git a/src/mlx90614/CMakeLists.txt b/src/mlx90614/CMakeLists.txt
index bde35e22..94c348c7 100644
--- a/src/mlx90614/CMakeLists.txt
+++ b/src/mlx90614/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "mlx90614")
 set (libdescription "Digital No-contact Infrared Thermometer")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iTemperature.hpp)
 upm_module_init(mraa)
diff --git a/src/mma7455/mma7455.i b/src/mma7455/mma7455.i
index c5eb9282..11eba372 100644
--- a/src/mma7455/mma7455.i
+++ b/src/mma7455/mma7455.i
@@ -2,7 +2,7 @@
 %module (package="upm") mma7455
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -13,7 +13,7 @@
 %apply short *OUTPUT { short * ptrX, short * ptrY, short * ptrZ };
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/mma7660/mma7660.i b/src/mma7660/mma7660.i
index d4c9b8c0..860f2b63 100644
--- a/src/mma7660/mma7660.i
+++ b/src/mma7660/mma7660.i
@@ -2,7 +2,7 @@
 %module (package="upm") mma7660
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -12,7 +12,7 @@
 %include "../java_buffer.i"
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/mpu9150/mpu9150.i b/src/mpu9150/mpu9150.i
index d150edd8..d18648c2 100644
--- a/src/mpu9150/mpu9150.i
+++ b/src/mpu9150/mpu9150.i
@@ -2,7 +2,7 @@
 %module (package="upm") mpu9150
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
@@ -13,7 +13,7 @@
 %include "../java_buffer.i"
 
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 
 import java.util.AbstractList;
 import java.lang.Float;
diff --git a/src/ms5611/CMakeLists.txt b/src/ms5611/CMakeLists.txt
index b911fb8f..89842c8e 100644
--- a/src/ms5611/CMakeLists.txt
+++ b/src/ms5611/CMakeLists.txt
@@ -3,4 +3,4 @@ set (libdescription "Barometric Pressure and Temperature Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
 set (module_iface iPressure.hpp iTemperature.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/ms5611/ms5611.i b/src/ms5611/ms5611.i
index 29bf121f..c5a8b081 100644
--- a/src/ms5611/ms5611.i
+++ b/src/ms5611/ms5611.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_ms5611)
diff --git a/src/ms5803/ms5803.i b/src/ms5803/ms5803.i
index c77d8beb..ee6d6fa1 100644
--- a/src/ms5803/ms5803.i
+++ b/src/ms5803/ms5803.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %include "arrays_java.i"
diff --git a/src/otp538u/CMakeLists.txt b/src/otp538u/CMakeLists.txt
index 2a01bd67..51d96749 100644
--- a/src/otp538u/CMakeLists.txt
+++ b/src/otp538u/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME otp538u
     CPP_HDR otp538u.hpp
     CPP_SRC otp538u.cxx
     FTI_SRC otp538u_fti.c
+    IFACE_HDR iTemperature.hpp
     CPP_WRAPS_C
     REQUIRES mraa utilities-c)
diff --git a/src/rhusb/rhusb.i b/src/rhusb/rhusb.i
index 620ce9d8..e172600c 100644
--- a/src/rhusb/rhusb.i
+++ b/src/rhusb/rhusb.i
@@ -2,14 +2,14 @@
 %module (package="upm") rhusb
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %include "arrays_java.i";
diff --git a/src/rotary/CMakeLists.txt b/src/rotary/CMakeLists.txt
index 4c6289ad..7e461154 100644
--- a/src/rotary/CMakeLists.txt
+++ b/src/rotary/CMakeLists.txt
@@ -5,4 +5,5 @@ upm_mixed_module_init (NAME rotary
     CPP_HDR rotary.hpp
     CPP_SRC rotary.cxx
     FTI_SRC rotary_fti.c
+    IFACE_HDR iAngle.hpp
     REQUIRES mraa)
diff --git a/src/rotaryencoder/CMakeLists.txt b/src/rotaryencoder/CMakeLists.txt
index 473e5a97..5ad83162 100644
--- a/src/rotaryencoder/CMakeLists.txt
+++ b/src/rotaryencoder/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME rotaryencoder
     CPP_HDR rotaryencoder.hpp
     CPP_SRC rotaryencoder.cxx
     FTI_SRC rotaryencoder_fti.c
+    IFACE_HDR iAngle.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/rotaryencoder/rotaryencoder.i b/src/rotaryencoder/rotaryencoder.i
index 25bec23d..3e0fe98f 100644
--- a/src/rotaryencoder/rotaryencoder.i
+++ b/src/rotaryencoder/rotaryencoder.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") rotaryencoder
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 %ignore signalAISR;
 
 JAVA_JNI_LOADLIBRARY(javaupm_rotaryencoder)
diff --git a/src/sht1x/sht1x.i b/src/sht1x/sht1x.i
index bbdab458..07523642 100644
--- a/src/sht1x/sht1x.i
+++ b/src/sht1x/sht1x.i
@@ -2,14 +2,14 @@
 %module (package="upm") sht1x
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_sht1x)
diff --git a/src/si1132/CMakeLists.txt b/src/si1132/CMakeLists.txt
index e7a38f11..11a24403 100644
--- a/src/si1132/CMakeLists.txt
+++ b/src/si1132/CMakeLists.txt
@@ -3,4 +3,4 @@ set (libdescription "UV and Ambient Light Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
 set (module_iface iLight.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/si1132/si1132.i b/src/si1132/si1132.i
index 6c208598..ee312470 100644
--- a/src/si1132/si1132.i
+++ b/src/si1132/si1132.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 #ifndef ANDROID
diff --git a/src/si7005/CMakeLists.txt b/src/si7005/CMakeLists.txt
index 770c6d4b..e933c7fe 100644
--- a/src/si7005/CMakeLists.txt
+++ b/src/si7005/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "si7005")
 set (libdescription "Digital I2C Humidity and Temperature Sensor")
 set (module_src ${libname}.cxx mraa-utils.cxx)
 set (module_hpp ${libname}.hpp)
-upm_module_init(mraa interfaces)
+set (module_iface iHumidity.hpp iTemperature.hpp)
+upm_module_init(mraa)
diff --git a/src/si7005/si7005.i b/src/si7005/si7005.i
index 5167adc7..984a3fbf 100644
--- a/src/si7005/si7005.i
+++ b/src/si7005/si7005.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") si7005
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_si7005)
 #endif
 /* END Java syntax */
diff --git a/src/swigme.i.in b/src/swigme.i.in
index 02251321..6b99c5eb 100644
--- a/src/swigme.i.in
+++ b/src/swigme.i.in
@@ -1,9 +1,9 @@
 /* This SWIG .i file is generated from UPM CMake.  If additional functionality
  * is required, custom .i files can be placed in the library directory.
  */
-@PYTHON_NEW_INTERFACES@
+@PYTHON_INTERFACES@
 
-@IMPORT_NEW_INTERFACES@
+@IMPORT_INTERFACES@
 
 /* Common SWIG syntax */
 %include "../common_top.i"
diff --git a/src/t3311/t3311.i b/src/t3311/t3311.i
index e65baf16..3213241a 100644
--- a/src/t3311/t3311.i
+++ b/src/t3311/t3311.i
@@ -2,14 +2,14 @@
 %module (package="upm") htu21d
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 %include "arrays_java.i";
diff --git a/src/t6713/CMakeLists.txt b/src/t6713/CMakeLists.txt
index 339ad915..71059acd 100644
--- a/src/t6713/CMakeLists.txt
+++ b/src/t6713/CMakeLists.txt
@@ -2,4 +2,4 @@ set (libname "t6713")
 set (libdescription "I2C/UART High Accuracy CO2 Sensor")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
-upm_module_init(mraa interfaces)
+upm_module_init(mraa)
diff --git a/src/t6713/t6713.hpp b/src/t6713/t6713.hpp
index 9f4533d0..eb942cd8 100644
--- a/src/t6713/t6713.hpp
+++ b/src/t6713/t6713.hpp
@@ -24,7 +24,6 @@
 
 
 #include "mraa/i2c.hpp"
-#include "interfaces/iCO2Sensor.hpp"
 
 namespace upm {
 /**
@@ -54,6 +53,8 @@ namespace upm {
  * @snippet t6713-co2-sensor.cxx Interesting
  */
 
+#define UPM_THROW(msg) throw std::runtime_error(std::string(__FUNCTION__) + ": " + (msg))
+
 namespace t6713_co2
 {
     /* COMMAND VALUES */
@@ -104,7 +105,7 @@ namespace t6713_co2
     }FUNCTION_CODES;
 }//namespace t6713_co2
 
-class T6713 : public ICO2Sensor {
+class T6713 {
     public:
         /**
         * Instantiates a T6713 object
diff --git a/src/t6713/t6713.i b/src/t6713/t6713.i
index 56db9741..d3d4b047 100644
--- a/src/t6713/t6713.i
+++ b/src/t6713/t6713.i
@@ -4,8 +4,6 @@
 #ifdef SWIGJAVA
 %include "arrays_java.i";
 %include "../java_buffer.i"
-%typemap(javaimports) SWIGTYPE %{import upm_interfaces.*;%}
-%import "../interfaces/javaupm_iCO2Sensor.i"
 
 JAVA_JNI_LOADLIBRARY(javaupm_t6713)
 #endif
diff --git a/src/teams/CMakeLists.txt b/src/teams/CMakeLists.txt
index c469a923..c81d474d 100644
--- a/src/teams/CMakeLists.txt
+++ b/src/teams/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "teams")
 set (libdescription "Veris TEAMS Temperature Transmitter")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iTemperature.hpp)
 upm_module_init(mraa)
diff --git a/src/teams/teams.i b/src/teams/teams.i
index a3cfc2f0..1c4181e0 100644
--- a/src/teams/teams.i
+++ b/src/teams/teams.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") teams
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_teams)
 #endif
 /* END Java syntax */
diff --git a/src/temperature/CMakeLists.txt b/src/temperature/CMakeLists.txt
index 6172b422..abaede04 100644
--- a/src/temperature/CMakeLists.txt
+++ b/src/temperature/CMakeLists.txt
@@ -5,4 +5,5 @@ upm_mixed_module_init (NAME temperature
     CPP_HDR temperature.hpp
     CPP_SRC temperature.cxx
     FTI_SRC temperature_fti.c
+    IFACE_HDR iTemperature.hpp
     REQUIRES mraa)
diff --git a/src/tex00/CMakeLists.txt b/src/tex00/CMakeLists.txt
index 57d3e12e..6fd0c269 100644
--- a/src/tex00/CMakeLists.txt
+++ b/src/tex00/CMakeLists.txt
@@ -2,4 +2,5 @@ set (libname "tex00")
 set (libdescription "Veris TEX00 Temperature Sensors")
 set (module_src ${libname}.cxx)
 set (module_hpp ${libname}.hpp)
+set (module_iface iTemperature.hpp)
 upm_module_init(mraa)
diff --git a/src/tex00/tex00.i b/src/tex00/tex00.i
index 1497f2a5..fc33488c 100644
--- a/src/tex00/tex00.i
+++ b/src/tex00/tex00.i
@@ -1,7 +1,17 @@
+#ifdef SWIGPYTHON
+%module (package="upm") tex00
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 JAVA_JNI_LOADLIBRARY(javaupm_tex00)
 #endif
 /* END Java syntax */
diff --git a/src/ttp223/CMakeLists.txt b/src/ttp223/CMakeLists.txt
index dc0450bc..746f2af2 100644
--- a/src/ttp223/CMakeLists.txt
+++ b/src/ttp223/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME ttp223
     CPP_HDR ttp223.hpp
     CPP_SRC ttp223.cxx
     FTI_SRC ttp223_fti.c
+    IFACE_HDR iButton.hpp
     CPP_WRAPS_C
     REQUIRES mraa)
diff --git a/src/ttp223/ttp223.i b/src/ttp223/ttp223.i
index bba2a34f..35a18340 100644
--- a/src/ttp223/ttp223.i
+++ b/src/ttp223/ttp223.i
@@ -1,8 +1,18 @@
+#ifdef SWIGPYTHON
+%module (package="upm") ttp223
+#endif
+
+%import "interfaces/interfaces.i"
+
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %module (docstring="TTP223 Touch Sensor") javaupm_ttp223
+%typemap(javaimports) SWIGTYPE %{
+import upm_interfaces.*;
+%}
+
 
 %apply int {mraa::Edge}
 
diff --git a/src/urm37/urm37.i b/src/urm37/urm37.i
index 0e4ef196..66c410db 100644
--- a/src/urm37/urm37.i
+++ b/src/urm37/urm37.i
@@ -2,13 +2,13 @@
 %module (package="upm") urm37
 #endif
 
-%import "interfaces/new_interfaces.i"
+%import "interfaces/interfaces.i"
 %include "../common_top.i"
 
 /* BEGIN Java syntax  ------------------------------------------------------- */
 #ifdef SWIGJAVA
 %typemap(javaimports) SWIGTYPE %{
-import upm_new_interfaces.*;
+import upm_interfaces.*;
 %}
 
 JAVA_JNI_LOADLIBRARY(javaupm_urm37)
diff --git a/src/vdiv/CMakeLists.txt b/src/vdiv/CMakeLists.txt
index cd831463..5bb4832b 100644
--- a/src/vdiv/CMakeLists.txt
+++ b/src/vdiv/CMakeLists.txt
@@ -5,4 +5,5 @@ upm_mixed_module_init (NAME vdiv
     CPP_HDR vdiv.hpp
     CPP_SRC vdiv.cxx
     FTI_SRC vdiv_fti.c
+    IFACE_HDR iVDiv.hpp
     REQUIRES mraa)
diff --git a/src/water/CMakeLists.txt b/src/water/CMakeLists.txt
index dd661dc2..bc076329 100644
--- a/src/water/CMakeLists.txt
+++ b/src/water/CMakeLists.txt
@@ -5,5 +5,6 @@ upm_mixed_module_init (NAME water
     CPP_HDR water.hpp
     CPP_SRC water.cxx
     FTI_SRC water_fti.c
+    IFACE_HDR iWater.hpp
     CPP_WRAPS_C
     REQUIRES mraa)