[dss-commits] digitalSTROM Server branch, master, updated. 11491310eedca6baabf234c726e3b65079887938

git version control dss-commits at forum.digitalstrom.org
Tue Jan 5 13:51:00 CET 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "digitalSTROM Server".

The branch, master has been updated
       via  11491310eedca6baabf234c726e3b65079887938 (commit)
       via  b8e0d7d5d18b41a6aebeb3a8cfd301be55718125 (commit)
       via  6c4a05987ff3f1bc5c5a87bf564e4747a0e85250 (commit)
       via  641c14860eac25e81276d251bf719c55375bade7 (commit)
      from  9b55dbe9a9987ef71ebf4e399de56130a3ea9623 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 11491310eedca6baabf234c726e3b65079887938
Author: Patrick Stählin <pstaehlin at futurelab.ch>
Date:   Tue Jan 5 13:49:59 2010 +0100

    Renamed Modulator to dSMeter.
    
    Original patch by Sebastian Kohler of aizo.

commit b8e0d7d5d18b41a6aebeb3a8cfd301be55718125
Author: Patrick Stählin <pstaehlin at futurelab.ch>
Date:   Tue Jan 5 11:40:02 2010 +0100

    Moved model xml writing to modelpersistence.cpp
    
    References #124

commit 6c4a05987ff3f1bc5c5a87bf564e4747a0e85250
Author: Patrick Stählin <pstaehlin at futurelab.ch>
Date:   Mon Jan 4 17:43:45 2010 +0100

    No need for an endsWith in this context

commit 641c14860eac25e81276d251bf719c55375bade7
Author: Patrick Stählin <pstaehlin at futurelab.ch>
Date:   Mon Jan 4 17:29:26 2010 +0100

    Fixed some memoryleaks reported by valgrind

-----------------------------------------------------------------------

Changes:
diff --git a/core/DS485Interface.h b/core/DS485Interface.h
index 5950be5..9f7a53b 100644
--- a/core/DS485Interface.h
+++ b/core/DS485Interface.h
@@ -35,15 +35,15 @@ namespace dss {
 
   class Device;
   
-	typedef boost::tuple<int, int, int, std::string, int> ModulatorSpec_t; // bus-id, sw-version, hw-version, name, device-id
+	typedef boost::tuple<int, int, int, std::string, int> DSMeterSpec_t; // bus-id, sw-version, hw-version, name, device-id
 
   class DeviceBusInterface {
   public:
     //------------------------------------------------ UDI
-    virtual uint8_t dSLinkSend(const int _modulatorID, devid_t _devAdr, uint8_t _value, uint8_t _flags) = 0;
+    virtual uint8_t dSLinkSend(const int _dsMeterID, devid_t _devAdr, uint8_t _value, uint8_t _flags) = 0;
 
     //------------------------------------------------ Device manipulation
-    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _modulatorID, int _paramID) = 0;
+    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _dsMeterID, int _paramID) = 0;
 
     virtual void setValueDevice(const Device& _device, const uint16_t _value, const uint16_t _parameterID, const int _size) = 0;
     virtual int getSensorValue(const Device& _device, const int _sensorID) = 0;
@@ -53,41 +53,41 @@ namespace dss {
 
   class StructureQueryBusInterface {
   public:
-    /** Returns an std::vector containing the modulator-spec of all modulators present. */
-    virtual std::vector<ModulatorSpec_t> getModulators() = 0;
-
-    /** Returns the modulator-spec for a modulator */
-    virtual ModulatorSpec_t getModulatorSpec(const int _modulatorID) = 0;
-
-    /** Returns a std::vector conatining the zone-ids of the specified modulator */
-    virtual std::vector<int> getZones(const int _modulatorID) = 0;
-    /** Returns the count of the zones of the specified modulator */
-    virtual int getZoneCount(const int _modulatorID) = 0;
-    /** Returns the bus-ids of the devices present in the given zone of the specified modulator */
-    virtual std::vector<int> getDevicesInZone(const int _modulatorID, const int _zoneID) = 0;
-    /** Returns the count of devices present in the given zone of the specified modulator */
-    virtual int getDevicesCountInZone(const int _modulatorID, const int _zoneID) = 0;
-
-    /** Returns the count of groups present in the given zone of the specifid modulator */
-    virtual int getGroupCount(const int _modulatorID, const int _zoneID) = 0;
-    /** Returns the a std::vector containing the group-ids of the given zone on the specified modulator */
-    virtual std::vector<int> getGroups(const int _modulatorID, const int _zoneID) = 0;
+    /** Returns an std::vector containing the dsMeter-spec of all dsMeters present. */
+    virtual std::vector<DSMeterSpec_t> getDSMeters() = 0;
+
+    /** Returns the dsMeter-spec for a dsMeter */
+    virtual DSMeterSpec_t getDSMeterSpec(const int _dsMeterID) = 0;
+
+    /** Returns a std::vector conatining the zone-ids of the specified dsMeter */
+    virtual std::vector<int> getZones(const int _dsMeterID) = 0;
+    /** Returns the count of the zones of the specified dsMeter */
+    virtual int getZoneCount(const int _dsMeterID) = 0;
+    /** Returns the bus-ids of the devices present in the given zone of the specified dsMeter */
+    virtual std::vector<int> getDevicesInZone(const int _dsMeterID, const int _zoneID) = 0;
+    /** Returns the count of devices present in the given zone of the specified dsMeter */
+    virtual int getDevicesCountInZone(const int _dsMeterID, const int _zoneID) = 0;
+
+    /** Returns the count of groups present in the given zone of the specifid dsMeter */
+    virtual int getGroupCount(const int _dsMeterID, const int _zoneID) = 0;
+    /** Returns the a std::vector containing the group-ids of the given zone on the specified dsMeter */
+    virtual std::vector<int> getGroups(const int _dsMeterID, const int _zoneID) = 0;
     /** Returns the count of devices present in the given group */
-    virtual int getDevicesInGroupCount(const int _modulatorID, const int _zoneID, const int _groupID) = 0;
+    virtual int getDevicesInGroupCount(const int _dsMeterID, const int _zoneID, const int _groupID) = 0;
     /** Returns a std::vector containing the bus-ids of the devices present in the given group */
-    virtual std::vector<int> getDevicesInGroup(const int _modulatorID, const int _zoneID, const int _groupID) = 0;
+    virtual std::vector<int> getDevicesInGroup(const int _dsMeterID, const int _zoneID, const int _groupID) = 0;
 
-    virtual std::vector<int> getGroupsOfDevice(const int _modulatorID, const int _deviceID) = 0;
+    virtual std::vector<int> getGroupsOfDevice(const int _dsMeterID, const int _deviceID) = 0;
 
     /** Returns the DSID of a given device */
-    virtual dsid_t getDSIDOfDevice(const int _modulatorID, const int _deviceID) = 0;
-    /** Returns the DSID of a given modulator */
-    virtual dsid_t getDSIDOfModulator(const int _modulatorID) = 0;
+    virtual dsid_t getDSIDOfDevice(const int _dsMeterID, const int _deviceID) = 0;
+    /** Returns the DSID of a given dsMeter */
+    virtual dsid_t getDSIDOfDSMeter(const int _dsMeterID) = 0;
 
-    virtual int getLastCalledScene(const int _modulatorID, const int _zoneID, const int _groupID) = 0;
+    virtual int getLastCalledScene(const int _dsMeterID, const int _zoneID, const int _groupID) = 0;
 
-    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _modulatorID) = 0;
-    virtual bool getEnergyBorder(const int _modulatorID, int& _lower, int& _upper) = 0;
+    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _dsMeterID) = 0;
+    virtual bool getEnergyBorder(const int _dsMeterID, int& _lower, int& _upper) = 0;
 
     virtual ~StructureQueryBusInterface() {}; // please the compiler (virtual dtor)
   }; // StructureQueryBusInterface
@@ -108,31 +108,31 @@ namespace dss {
     //------------------------------------------------ Specialized Commands (system)
 
     /** Adds the given device to the specified zone. */
-    virtual void setZoneID(const int _modulatorID, const devid_t _deviceID, const int _zoneID) = 0;
+    virtual void setZoneID(const int _dsMeterID, const devid_t _deviceID, const int _zoneID) = 0;
 
-    /** Creates a new Zone on the given modulator */
-    virtual void createZone(const int _modulatorID, const int _zoneID) = 0;
+    /** Creates a new Zone on the given dsMeter */
+    virtual void createZone(const int _dsMeterID, const int _zoneID) = 0;
 
-    /** Removes the zone \a _zoneID on the modulator \a _modulatorID */
-    virtual void removeZone(const int _modulatorID, const int _zoneID) = 0;
+    /** Removes the zone \a _zoneID on the dsMeter \a _dsMeterID */
+    virtual void removeZone(const int _dsMeterID, const int _zoneID) = 0;
 
     /** Adds a device to a given group */
-    virtual void addToGroup(const int _modulatorID, const int _groupID, const int _deviceID) = 0;
+    virtual void addToGroup(const int _dsMeterID, const int _groupID, const int _deviceID) = 0;
     /** Removes a device from a given group */
-    virtual void removeFromGroup(const int _modulatorID, const int _groupID, const int _deviceID) = 0;
+    virtual void removeFromGroup(const int _dsMeterID, const int _groupID, const int _deviceID) = 0;
 
     /** Adds a user group */
-    virtual int addUserGroup(const int _modulatorID) = 0;
+    virtual int addUserGroup(const int _dsMeterID) = 0;
     /** Removes a user group */
-    virtual void removeUserGroup(const int _modulatorID, const int _groupID) = 0;
+    virtual void removeUserGroup(const int _dsMeterID, const int _groupID) = 0;
 
 
     //------------------------------------------------ Metering
     /** Returns the current power-consumption in mW */
-    virtual unsigned long getPowerConsumption(const int _modulatorID) = 0;
+    virtual unsigned long getPowerConsumption(const int _dsMeterID) = 0;
 
     /** Returns the meter value in Wh */
-    virtual unsigned long getEnergyMeterValue(const int _modulatorID) = 0;
+    virtual unsigned long getEnergyMeterValue(const int _dsMeterID) = 0;
   };
 
   class DS485ApiError : public DSSException {
diff --git a/core/ds485/ds485.cpp b/core/ds485/ds485.cpp
index bd0c212..7629266 100644
--- a/core/ds485/ds485.cpp
+++ b/core/ds485/ds485.cpp
@@ -478,7 +478,7 @@ namespace dss {
                     m_PendingFrames.erase(m_PendingFrames.begin());
                     std::cout << "\ngot ack" << std::endl;
                   } else if(cmdAckFrame->getCommand() == CommandBusy) {
-                    std::cout << "\nmodulator is busy" << std::endl;
+                    std::cout << "\ndsMeter is busy" << std::endl;
                   } else {
                     m_PendingFrames.erase(m_PendingFrames.begin());
                     std::cout << "\n&&&&got other" << std::endl;
diff --git a/core/ds485/ds485busrequestdispatcher.cpp b/core/ds485/ds485busrequestdispatcher.cpp
index c3b05fb..5dca239 100644
--- a/core/ds485/ds485busrequestdispatcher.cpp
+++ b/core/ds485/ds485busrequestdispatcher.cpp
@@ -30,7 +30,7 @@
 namespace dss {
 
   void DS485BusRequestDispatcher::dispatchRequest(boost::shared_ptr<BusRequest> _pRequest) {
-    PacketBuilderHintsBase* hints = _pRequest->getBuilderHints();
+    boost::shared_ptr<PacketBuilderHintsBase> hints = _pRequest->getBuilderHints();
     boost::shared_ptr<DS485CommandFrame> frame(new DS485CommandFrame());
     frame->getHeader().setBroadcast(hints->isBroadcast());
     frame->getHeader().setDestination(hints->getTarget());
diff --git a/core/ds485/ds485proxy.cpp b/core/ds485/ds485proxy.cpp
index 890b2b9..c1ec7c4 100644
--- a/core/ds485/ds485proxy.cpp
+++ b/core/ds485/ds485proxy.cpp
@@ -84,9 +84,9 @@ namespace dss {
 	             (m_DS485Controller.getState() == csError)); 
   } // isReady
 
-  uint16_t DS485Proxy::deviceGetParameterValue(devid_t _id, uint8_t _modulatorID, int _paramID) {
+  uint16_t DS485Proxy::deviceGetParameterValue(devid_t _id, uint8_t _dsMeterID, int _paramID) {
     DS485CommandFrame frame;
-    frame.getHeader().setDestination(_modulatorID);
+    frame.getHeader().setDestination(_dsMeterID);
     frame.getHeader().setBroadcast(false);
     frame.getHeader().setType(1);
     frame.setCommand(CommandRequest);
@@ -97,9 +97,9 @@ namespace dss {
     return res;
   } // deviceGetParameterValue
 
-  uint16_t DS485Proxy::deviceGetFunctionID(devid_t _id, uint8_t _modulatorID) {
+  uint16_t DS485Proxy::deviceGetFunctionID(devid_t _id, uint8_t _dsMeterID) {
     DS485CommandFrame frame;
-    frame.getHeader().setDestination(_modulatorID);
+    frame.getHeader().setDestination(_dsMeterID);
     frame.getHeader().setBroadcast(false);
     frame.getHeader().setType(1);
     frame.setCommand(CommandRequest);
@@ -230,7 +230,7 @@ namespace dss {
 
   void DS485Proxy::setValueDevice(const Device& _device, const uint16_t _value, const uint16_t _parameterID, const int _size) {
     DS485CommandFrame frame;
-    frame.getHeader().setDestination(_device.getModulatorID());
+    frame.getHeader().setDestination(_device.getDSMeterID());
     frame.getHeader().setBroadcast(false);
     frame.getHeader().setType(1);
     frame.setCommand(CommandRequest);
@@ -242,7 +242,7 @@ namespace dss {
     sendFrame(frame);
   } // setValueDevice
   
-  ModulatorSpec_t DS485Proxy::modulatorSpecFromFrame(boost::shared_ptr<DS485CommandFrame> _frame) {
+  DSMeterSpec_t DS485Proxy::dsMeterSpecFromFrame(boost::shared_ptr<DS485CommandFrame> _frame) {
     int source = _frame->getHeader().getSource();
 
     PayloadDissector pd(_frame->getPayload());
@@ -272,16 +272,16 @@ namespace dss {
     log(std::string("  Name:      \"") + name + "\"");
 
     // bus-id, sw-version, hw-version, name, device-id
-    ModulatorSpec_t spec(source, swVersion, hwVersion, name, devID);
+    DSMeterSpec_t spec(source, swVersion, hwVersion, name, devID);
     return spec;
-  } // modulatorSpecFromFrame
+  } // dsMeterSpecFromFrame
 
-  std::vector<ModulatorSpec_t> DS485Proxy::getModulators() {
+  std::vector<DSMeterSpec_t> DS485Proxy::getDSMeters() {
     DS485CommandFrame cmdFrame;
     cmdFrame.getHeader().setDestination(0);
     cmdFrame.getHeader().setBroadcast(true);
     cmdFrame.setCommand(CommandRequest);
-    log("Proxy: GetModulators");
+    log("Proxy: GetDSMeters");
 
     cmdFrame.getPayload().add<uint8_t>(FunctionGetTypeRequest);
     boost::shared_ptr<FrameBucketCollector> bucket = sendFrameAndInstallBucket(cmdFrame, FunctionGetTypeRequest);
@@ -289,7 +289,7 @@ namespace dss {
 
     std::map<int, bool> resultFrom;
 
-    std::vector<ModulatorSpec_t> result;
+    std::vector<DSMeterSpec_t> result;
     while(true) {
       boost::shared_ptr<ReceivedFrame> recFrame = bucket->popFrame();
       if(recFrame == NULL) {
@@ -300,20 +300,20 @@ namespace dss {
         log(std::string("already received result from ") + intToString(source));
         continue;
       }
-      ModulatorSpec_t spec = modulatorSpecFromFrame(recFrame->getFrame());
+      DSMeterSpec_t spec = dsMeterSpecFromFrame(recFrame->getFrame());
       result.push_back(spec);
     }
 
     return result;
-  } // getModulators
+  } // getDSMeters
 
-  ModulatorSpec_t DS485Proxy::getModulatorSpec(const int _modulatorID) {
+  DSMeterSpec_t DS485Proxy::getDSMeterSpec(const int _dsMeterID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.getHeader().setBroadcast(false);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionGetTypeRequest);
-    log("Proxy: getModulatorSpec");
+    log("Proxy: getDSMeterSpec");
 
     boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionGetTypeRequest);
 
@@ -321,39 +321,39 @@ namespace dss {
       throw DS485ApiError("No frame received");
     }
 
-    ModulatorSpec_t result = modulatorSpecFromFrame(recFrame->getFrame());
+    DSMeterSpec_t result = dsMeterSpecFromFrame(recFrame->getFrame());
 
     return result;
-  } // getModulatorSpec
+  } // getDSMeterSpec
 
-  int DS485Proxy::getGroupCount(const int _modulatorID, const int _zoneID) {
+  int DS485Proxy::getGroupCount(const int _dsMeterID, const int _zoneID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetGroupsSize);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetGroupsSize);
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
-    int8_t res = int8_t(receiveSingleResult(cmdFrame, FunctionModulatorGetGroupsSize));
+    int8_t res = int8_t(receiveSingleResult(cmdFrame, FunctionDSMeterGetGroupsSize));
     if(res < 0) {
       log("GetGroupCount: Negative group count received '" + intToString(res) +
-          " on modulator " + intToString(_modulatorID) +
+          " on dsMeter " + intToString(_dsMeterID) +
           " with zone " + intToString(_zoneID));
     }
     checkResultCode(res);
-    // Every modulator should provide all standard-groups
+    // Every dsMeter should provide all standard-groups
     if(res < GroupIDStandardMax) {
       res = GroupIDStandardMax;
     }
     return res;
   } // getGroupCount
 
-  std::vector<int> DS485Proxy::getGroups(const int _modulatorID, const int _zoneID) {
+  std::vector<int> DS485Proxy::getGroups(const int _dsMeterID, const int _zoneID) {
     std::vector<int> result;
 
-    int numGroups = getGroupCount(_modulatorID, _zoneID);
-    log(std::string("Modulator has ") + intToString(numGroups) + " groups");
+    int numGroups = getGroupCount(_dsMeterID, _zoneID);
+    log(std::string("DSMeter has ") + intToString(numGroups) + " groups");
     for(int iGroup = 0; iGroup < numGroups; iGroup++) {
       DS485CommandFrame cmdFrame;
-      cmdFrame.getHeader().setDestination(_modulatorID);
+      cmdFrame.getHeader().setDestination(_dsMeterID);
       cmdFrame.setCommand(CommandRequest);
       cmdFrame.getPayload().add<uint8_t>(FunctionZoneGetGroupIdForInd);
       cmdFrame.getPayload().add<uint16_t>(_zoneID);
@@ -371,9 +371,9 @@ namespace dss {
     return result;
   } // getGroups
 
-  int DS485Proxy::getDevicesInGroupCount(const int _modulatorID, const int _zoneID, const int _groupID) {
+  int DS485Proxy::getDevicesInGroupCount(const int _dsMeterID, const int _zoneID, const int _groupID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionGroupGetDeviceCount);
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
@@ -382,7 +382,7 @@ namespace dss {
     int16_t res = int16_t(receiveSingleResult16(cmdFrame, FunctionGroupGetDeviceCount));
     if(res < 0) {
       log("GetDevicesInGroupCount: Negative count received '" + intToString(res) +
-          "' on modulator " + intToString(_modulatorID) +
+          "' on dsMeter " + intToString(_dsMeterID) +
           " with zoneID " + intToString(_zoneID) + " in group " + intToString(_groupID));
     }
     checkResultCode(res);
@@ -390,13 +390,13 @@ namespace dss {
     return res;
   } // getDevicesInGroupCount
 
-  std::vector<int> DS485Proxy::getDevicesInGroup(const int _modulatorID, const int _zoneID, const int _groupID) {
+  std::vector<int> DS485Proxy::getDevicesInGroup(const int _dsMeterID, const int _zoneID, const int _groupID) {
     std::vector<int> result;
 
-    int numDevices = getDevicesInGroupCount(_modulatorID, _zoneID, _groupID);
+    int numDevices = getDevicesInGroupCount(_dsMeterID, _zoneID, _groupID);
     for(int iDevice = 0; iDevice < numDevices; iDevice++) {
       DS485CommandFrame cmdFrame;
-      cmdFrame.getHeader().setDestination(_modulatorID);
+      cmdFrame.getHeader().setDestination(_dsMeterID);
       cmdFrame.setCommand(CommandRequest);
       cmdFrame.getPayload().add<uint8_t>(FunctionGroupGetDevKeyForInd);
       cmdFrame.getPayload().add<uint16_t>(_zoneID);
@@ -418,11 +418,11 @@ namespace dss {
     return result;
   } // getDevicesInGroup
 
-  std::vector<int> DS485Proxy::getGroupsOfDevice(const int _modulatorID, const int _deviceID) {
+  std::vector<int> DS485Proxy::getGroupsOfDevice(const int _dsMeterID, const int _deviceID) {
     std::vector<int> result;
 
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionDeviceGetGroups);
     cmdFrame.getPayload().add<uint16_t>(_deviceID);
@@ -453,22 +453,22 @@ namespace dss {
     return result;
   } // getGroupsOfDevice
 
-  std::vector<int> DS485Proxy::getZones(const int _modulatorID) {
+  std::vector<int> DS485Proxy::getZones(const int _dsMeterID) {
     std::vector<int> result;
 
-    int numZones = getZoneCount(_modulatorID);
-    log(std::string("Modulator has ") + intToString(numZones) + " zones");
+    int numZones = getZoneCount(_dsMeterID);
+    log(std::string("DSMeter has ") + intToString(numZones) + " zones");
     for(int iZone = 0; iZone < numZones; iZone++) {
       DS485CommandFrame cmdFrame;
-      cmdFrame.getHeader().setDestination(_modulatorID);
+      cmdFrame.getHeader().setDestination(_dsMeterID);
       cmdFrame.setCommand(CommandRequest);
-      cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetZoneIdForInd);
+      cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetZoneIdForInd);
       cmdFrame.getPayload().add<uint16_t>(iZone);
       log("GetZoneID");
-      int16_t tempResult = int16_t(receiveSingleResult16(cmdFrame, FunctionModulatorGetZoneIdForInd));
+      int16_t tempResult = int16_t(receiveSingleResult16(cmdFrame, FunctionDSMeterGetZoneIdForInd));
       // TODO: The following line is a workaround as described in #246
       if((tempResult < 0) && (tempResult > -20)) {
-        log("GetZones: Negative zone id " + intToString(tempResult) + " received. Modulator: " + intToString(_modulatorID) + " index: " + intToString(iZone), lsError);
+        log("GetZones: Negative zone id " + intToString(tempResult) + " received. DSMeter: " + intToString(_dsMeterID) + " index: " + intToString(iZone), lsError);
         // TODO: take this line outside the if-clause after the dSM-API has been reworked
         checkResultCode(tempResult);
       } else {
@@ -479,30 +479,30 @@ namespace dss {
     return result;
   } // getZones
 
-  int DS485Proxy::getZoneCount(const int _modulatorID) {
+  int DS485Proxy::getZoneCount(const int _dsMeterID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetZonesSize);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetZonesSize);
     log("GetZoneCount");
 
     int8_t result = int8_t(
-        receiveSingleResult(cmdFrame, FunctionModulatorGetZonesSize));
+        receiveSingleResult(cmdFrame, FunctionDSMeterGetZonesSize));
     checkResultCode(result);
     return result;
   } // getZoneCount
 
-  int DS485Proxy::getDevicesCountInZone(const int _modulatorID, const int _zoneID) {
+  int DS485Proxy::getDevicesCountInZone(const int _dsMeterID, const int _zoneID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorCountDevInZone);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterCountDevInZone);
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
     log("GetDevicesCountInZone");
 
-    log(intToString(_modulatorID) + " " + intToString(_zoneID));
+    log(intToString(_dsMeterID) + " " + intToString(_zoneID));
 
-    int16_t result = int16_t(receiveSingleResult16(cmdFrame, FunctionModulatorCountDevInZone));
+    int16_t result = int16_t(receiveSingleResult16(cmdFrame, FunctionDSMeterCountDevInZone));
     if(result < 0) {
       log("GetDevicesCountInZone: negative count '" + intToString(result) + "'", lsError);
     }
@@ -511,29 +511,29 @@ namespace dss {
     return result;
   } // getDevicesCountInZone
 
-  std::vector<int> DS485Proxy::getDevicesInZone(const int _modulatorID, const int _zoneID) {
+  std::vector<int> DS485Proxy::getDevicesInZone(const int _dsMeterID, const int _zoneID) {
     std::vector<int> result;
 
-    int numDevices = getDevicesCountInZone(_modulatorID, _zoneID);
+    int numDevices = getDevicesCountInZone(_dsMeterID, _zoneID);
     log(std::string("Found ") + intToString(numDevices) + " in zone.");
     for(int iDevice = 0; iDevice < numDevices; iDevice++) {
       DS485CommandFrame cmdFrame;
-      cmdFrame.getHeader().setDestination(_modulatorID);
+      cmdFrame.getHeader().setDestination(_dsMeterID);
       cmdFrame.setCommand(CommandRequest);
-      cmdFrame.getPayload().add<uint8_t>(FunctionModulatorDevKeyInZone);
+      cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterDevKeyInZone);
       cmdFrame.getPayload().add<uint16_t>(_zoneID);
       cmdFrame.getPayload().add<uint16_t>(iDevice);
 
-      uint16_t devID = receiveSingleResult16(cmdFrame, FunctionModulatorDevKeyInZone);
+      uint16_t devID = receiveSingleResult16(cmdFrame, FunctionDSMeterDevKeyInZone);
       checkResultCode(int16_t(devID));
       result.push_back(devID);
     }
     return result;
   } // getDevicesInZone
 
-  void DS485Proxy::setZoneID(const int _modulatorID, const devid_t _deviceID, const int _zoneID) {
+  void DS485Proxy::setZoneID(const int _dsMeterID, const devid_t _deviceID, const int _zoneID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionDeviceSetZoneID);
     cmdFrame.getPayload().add<devid_t>(_deviceID);
@@ -543,31 +543,31 @@ namespace dss {
     checkResultCode(res);
   } // setZoneID
 
-  void DS485Proxy::createZone(const int _modulatorID, const int _zoneID) {
+  void DS485Proxy::createZone(const int _dsMeterID, const int _zoneID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorAddZone);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterAddZone);
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
 
-    int16_t res = int16_t(receiveSingleResult(cmdFrame, FunctionModulatorAddZone));
+    int16_t res = int16_t(receiveSingleResult(cmdFrame, FunctionDSMeterAddZone));
     checkResultCode(res);
   } // createZone
 
-  void DS485Proxy::removeZone(const int _modulatorID, const int _zoneID) {
+  void DS485Proxy::removeZone(const int _dsMeterID, const int _zoneID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorRemoveZone);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterRemoveZone);
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
 
-    int16_t res = int16_t(receiveSingleResult(cmdFrame, FunctionModulatorAddZone));
+    int16_t res = int16_t(receiveSingleResult(cmdFrame, FunctionDSMeterAddZone));
     checkResultCode(res);
   } // removeZone
 
-  dsid_t DS485Proxy::getDSIDOfDevice(const int _modulatorID, const int _deviceID) {
+  dsid_t DS485Proxy::getDSIDOfDevice(const int _dsMeterID, const int _deviceID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionDeviceGetDSID);
     cmdFrame.getPayload().add<uint16_t>(_deviceID);
@@ -585,30 +585,30 @@ namespace dss {
     return pd.get<dsid_t>();
   } // getDSIDOfDevice
 
-  dsid_t DS485Proxy::getDSIDOfModulator(const int _modulatorID) {
+  dsid_t DS485Proxy::getDSIDOfDSMeter(const int _dsMeterID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetDSID);
-    log(std::string("Proxy: GetDSIDOfModulator ") + intToString(_modulatorID));
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetDSID);
+    log(std::string("Proxy: GetDSIDOfDSMeter ") + intToString(_dsMeterID));
 
-    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionModulatorGetDSID);
+    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionDSMeterGetDSID);
     if(recFrame == NULL) {
-      log("GetDSIDOfModulator: received no result from " + intToString(_modulatorID), lsError);
+      log("GetDSIDOfDSMeter: received no result from " + intToString(_dsMeterID), lsError);
       throw DS485ApiError("No frame received");
     }
 
     PayloadDissector pd(recFrame->getFrame()->getPayload());
     pd.get<uint8_t>(); // discard the function id
     return pd.get<dsid_t>();
-  } // getDSIDOfModulator
+  } // getDSIDOfDSMeter
 
-  int DS485Proxy::getLastCalledScene(const int _modulatorID, const int _zoneID, const int _groupID) {
+  int DS485Proxy::getLastCalledScene(const int _dsMeterID, const int _zoneID, const int _groupID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionGroupGetLastCalledScene);
-    log(std::string("Proxy: GetLastCalledScene ") + intToString(_modulatorID));
+    log(std::string("Proxy: GetLastCalledScene ") + intToString(_dsMeterID));
     cmdFrame.getPayload().add<uint16_t>(_zoneID);
     cmdFrame.getPayload().add<uint16_t>(_groupID);
 
@@ -620,19 +620,19 @@ namespace dss {
     return res;
   } // getLastCalledScene
 
-  unsigned long DS485Proxy::getPowerConsumption(const int _modulatorID) {
+  unsigned long DS485Proxy::getPowerConsumption(const int _dsMeterID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetPowerConsumption);
-    log(std::string("Proxy: GetPowerConsumption ") + intToString(_modulatorID));
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetPowerConsumption);
+    log(std::string("Proxy: GetPowerConsumption ") + intToString(_dsMeterID));
 
-    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionModulatorGetPowerConsumption);
+    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionDSMeterGetPowerConsumption);
     if(recFrame == NULL) {
       log("DS485Proxy::getPowerConsumption: received no results", lsError);
       throw DS485ApiError("No frame received");
     }
-    if(recFrame->getFrame()->getHeader().getSource() != _modulatorID) {
+    if(recFrame->getFrame()->getHeader().getSource() != _dsMeterID) {
       log("GetPowerConsumption: received result from wrong source");
     }
     PayloadDissector pd(recFrame->getFrame()->getPayload());
@@ -640,14 +640,14 @@ namespace dss {
     return pd.get<uint32_t>();
   } // getPowerConsumption
 
-  unsigned long DS485Proxy::getEnergyMeterValue(const int _modulatorID) {
+  unsigned long DS485Proxy::getEnergyMeterValue(const int _dsMeterID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetEnergyMeterValue);
-    log(std::string("Proxy: GetEnergyMeterValue ") + intToString(_modulatorID));
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetEnergyMeterValue);
+    log(std::string("Proxy: GetEnergyMeterValue ") + intToString(_dsMeterID));
 
-    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionModulatorGetEnergyMeterValue);
+    boost::shared_ptr<ReceivedFrame> recFrame = receiveSingleFrame(cmdFrame, FunctionDSMeterGetEnergyMeterValue);
     if(recFrame == NULL) {
       log("DS485Proxy::getEnergyMeterValue: received no results", lsError);
       throw DS485ApiError("No frame received");
@@ -657,13 +657,13 @@ namespace dss {
     return pd.get<uint32_t>();
   } // getEnergyMeterValue
 
-  bool DS485Proxy::getEnergyBorder(const int _modulatorID, int& _lower, int& _upper) {
+  bool DS485Proxy::getEnergyBorder(const int _dsMeterID, int& _lower, int& _upper) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
-    cmdFrame.getPayload().add<uint8_t>(FunctionModulatorGetEnergyLevel);
+    cmdFrame.getPayload().add<uint8_t>(FunctionDSMeterGetEnergyLevel);
 
-    boost::shared_ptr<FrameBucketCollector> bucket = sendFrameAndInstallBucket(cmdFrame, FunctionModulatorGetEnergyLevel);
+    boost::shared_ptr<FrameBucketCollector> bucket = sendFrameAndInstallBucket(cmdFrame, FunctionDSMeterGetEnergyLevel);
 
     bucket->waitForFrame(1000);
 
@@ -681,7 +681,7 @@ namespace dss {
 
   int DS485Proxy::getSensorValue(const Device& _device, const int _sensorID) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_device.getModulatorID());
+    cmdFrame.getHeader().setDestination(_device.getDSMeterID());
     cmdFrame.getHeader().setBroadcast(false);
     cmdFrame.getHeader().setType(1);
     cmdFrame.setCommand(CommandRequest);
@@ -729,9 +729,9 @@ namespace dss {
     }
   } // getSensorValue
 
-  uint8_t DS485Proxy::dSLinkSend(const int _modulatorID, devid_t _devAdr, uint8_t _value, uint8_t _flags) {
+  uint8_t DS485Proxy::dSLinkSend(const int _dsMeterID, devid_t _devAdr, uint8_t _value, uint8_t _flags) {
     DS485CommandFrame cmdFrame;
-    cmdFrame.getHeader().setDestination(_modulatorID);
+    cmdFrame.getHeader().setDestination(_dsMeterID);
     cmdFrame.setCommand(CommandRequest);
     cmdFrame.getPayload().add<uint8_t>(FunctionDSLinkSendDevice);
     cmdFrame.getPayload().add<uint16_t>(_devAdr);
@@ -766,19 +766,19 @@ namespace dss {
     }
   } // dsLinkSend
 
-  void DS485Proxy::addToGroup(const int _modulatorID, const int _groupID, const int _deviceID) {
+  void DS485Proxy::addToGroup(const int _dsMeterID, const int _groupID, const int _deviceID) {
 
   } // addToGroup
 
-  void DS485Proxy::removeFromGroup(const int _modulatorID, const int _groupID, const int _deviceID) {
+  void DS485Proxy::removeFromGroup(const int _dsMeterID, const int _groupID, const int _deviceID) {
 
   } // removeFromGroup
 
-  int DS485Proxy::addUserGroup(const int _modulatorID) {
+  int DS485Proxy::addUserGroup(const int _dsMeterID) {
     return 0;
   } // addUserGroup
 
-  void DS485Proxy::removeUserGroup(const int _modulatorID, const int _groupID) {
+  void DS485Proxy::removeUserGroup(const int _dsMeterID, const int _groupID) {
 
   } // removeUserGroup
 
@@ -874,26 +874,26 @@ namespace dss {
 
   const char* FunctionIDToString(const int _functionID) {
     switch(_functionID) {
-    case  FunctionModulatorAddZone:
-      return "Modulator Add Zone";
-    case  FunctionModulatorRemoveZone:
-      return "Modulator Remove Zone";
-    case  FunctionModulatorRemoveAllZones:
-      return "Modulator Remove All Zones";
-    case  FunctionModulatorCountDevInZone:
-      return "Modulator Count Dev In Zone";
-    case  FunctionModulatorDevKeyInZone:
-      return "Modulator Dev Key In Zone";
-    case  FunctionModulatorGetGroupsSize:
-      return "Modulator Get Groups Size";
-    case  FunctionModulatorGetZonesSize:
-      return "Modulator Get Zones Size";
-    case  FunctionModulatorGetZoneIdForInd:
-      return "Modulator Get Zone Id For Index";
-    case  FunctionModulatorAddToGroup:
-      return "Modulator Add To Group";
-    case  FunctionModulatorRemoveFromGroup:
-      return "Modulator Remove From Group";
+    case  FunctionDSMeterAddZone:
+      return "DSMeter Add Zone";
+    case  FunctionDSMeterRemoveZone:
+      return "DSMeter Remove Zone";
+    case  FunctionDSMeterRemoveAllZones:
+      return "DSMeter Remove All Zones";
+    case  FunctionDSMeterCountDevInZone:
+      return "DSMeter Count Dev In Zone";
+    case  FunctionDSMeterDevKeyInZone:
+      return "DSMeter Dev Key In Zone";
+    case  FunctionDSMeterGetGroupsSize:
+      return "DSMeter Get Groups Size";
+    case  FunctionDSMeterGetZonesSize:
+      return "DSMeter Get Zones Size";
+    case  FunctionDSMeterGetZoneIdForInd:
+      return "DSMeter Get Zone Id For Index";
+    case  FunctionDSMeterAddToGroup:
+      return "DSMeter Add To Group";
+    case  FunctionDSMeterRemoveFromGroup:
+      return "DSMeter Remove From Group";
     case  FunctionGroupAddDeviceToGroup:
       return "Group Add Device";
     case  FunctionGroupRemoveDeviceFromGroup:
@@ -957,17 +957,17 @@ namespace dss {
     case FunctionDeviceGetSensorValue:
       return "Function Device Get Sensor Value";
 
-    case FunctionModulatorGetDSID:
-      return "Function Modulator Get DSID";
+    case FunctionDSMeterGetDSID:
+      return "Function DSMeter Get DSID";
 
-    case FunctionModulatorGetPowerConsumption:
-    	return "Function Modulator Get PowerConsumption";
-    case FunctionModulatorGetEnergyMeterValue:
-      return "Function Modulator Get Energy-Meter Value";
-    case FunctionModulatorGetEnergyLevel:
-      return "Function Modulator Get Energy-Level";
-    case FunctionModulatorSetEnergyLevel:
-      return "Function Modulator Set Energy-Level";
+    case FunctionDSMeterGetPowerConsumption:
+    	return "Function DSMeter Get PowerConsumption";
+    case FunctionDSMeterGetEnergyMeterValue:
+      return "Function DSMeter Get Energy-Meter Value";
+    case FunctionDSMeterGetEnergyLevel:
+      return "Function DSMeter Get Energy-Level";
+    case FunctionDSMeterSetEnergyLevel:
+      return "Function DSMeter Set Energy-Level";
 
     case FunctionGetTypeRequest:
       return "Function Get Type";
@@ -1163,18 +1163,18 @@ namespace dss {
             } else if(functionID == EventNewDS485Device) {
               pd.get<uint8_t>(); // functionID
               int modID = pd.get<uint16_t>();
-              ModelEvent* pEvent = new ModelEvent(ModelEvent::etNewModulator);
+              ModelEvent* pEvent = new ModelEvent(ModelEvent::etNewDSMeter);
               pEvent->addParameter(modID);
               raiseModelEvent(pEvent);
             } else if(functionID == EventLostDS485Device) {
               pd.get<uint8_t>(); // functionID
               int modID = pd.get<uint16_t>();
-              ModelEvent* pEvent = new ModelEvent(ModelEvent::etLostModulator);
+              ModelEvent* pEvent = new ModelEvent(ModelEvent::etLostDSMeter);
               pEvent->addParameter(modID);
               raiseModelEvent(pEvent);
             } else if(functionID == EventDeviceReady) {
               int modID = frame->getHeader().getDestination();
-              ModelEvent* pEvent = new ModelEvent(ModelEvent::etModulatorReady);
+              ModelEvent* pEvent = new ModelEvent(ModelEvent::etDSMeterReady);
               pEvent->addParameter(modID);
               raiseModelEvent(pEvent);
             }
@@ -1195,23 +1195,23 @@ namespace dss {
 
             PayloadDissector pd2(frame->getPayload());
             pd2.get<uint8_t>();
-            if (functionID == FunctionModulatorGetPowerConsumption) {   
+            if (functionID == FunctionDSMeterGetPowerConsumption) {   
               /* hard optimized */
-              //getDSS().getApartment().getModulatorByBusID((int)(frame->getHeader().getSource())).setPowerConsumption(pd2.get<uint32_t>());
+              //getDSS().getApartment().getDSMeterByBusID((int)(frame->getHeader().getSource())).setPowerConsumption(pd2.get<uint32_t>());
                 int modID = frame->getHeader().getSource();
                 ModelEvent* pEvent = new ModelEvent(ModelEvent::etPowerConsumption);
                 pEvent->addParameter(modID);
                 pEvent->addParameter(pd2.get<uint32_t>());
                 raiseModelEvent(pEvent);
-            } else if (functionID == FunctionModulatorGetEnergyMeterValue) {
+            } else if (functionID == FunctionDSMeterGetEnergyMeterValue) {
               /* hard optimized */
-              //getDSS().getApartment().getModulatorByBusID((int)(frame->getHeader().getSource())).setEnergyMeterValue(pd2.get<uint32_t>());
+              //getDSS().getApartment().getDSMeterByBusID((int)(frame->getHeader().getSource())).setEnergyMeterValue(pd2.get<uint32_t>());
                 int modID = frame->getHeader().getSource();
                 ModelEvent* pEvent = new ModelEvent(ModelEvent::etEnergyMeterValue);
                 pEvent->addParameter(modID);
                 pEvent->addParameter(pd2.get<uint32_t>());
                 raiseModelEvent(pEvent);
-            } else if (functionID == FunctionModulatorGetDSID) {
+            } else if (functionID == FunctionDSMeterGetDSID) {
               int sourceID = frame->getHeader().getSource();
               ModelEvent* pEvent = new ModelEvent(ModelEvent::etDS485DeviceDiscovered);
               pEvent->addParameter(sourceID);
diff --git a/core/ds485/ds485proxy.h b/core/ds485/ds485proxy.h
index 8002f82..d8d8e3f 100644
--- a/core/ds485/ds485proxy.h
+++ b/core/ds485/ds485proxy.h
@@ -162,7 +162,7 @@ namespace dss {
     CommandFrameSharedPtrVector m_IncomingFrames;
     bool m_InitializeDS485Controller;
 
-    ModulatorSpec_t modulatorSpecFromFrame(boost::shared_ptr<DS485CommandFrame> _frame);
+    DSMeterSpec_t dsMeterSpecFromFrame(boost::shared_ptr<DS485CommandFrame> _frame);
     void checkResultCode(const int _resultCode);
     void raiseModelEvent(ModelEvent* _pEvent);
   protected:
@@ -192,46 +192,46 @@ namespace dss {
     void removeFrameBucket(FrameBucketBase* _bucket);
 
     //------------------------------------------------ Specialized Commands (system)
-    virtual std::vector<ModulatorSpec_t> getModulators();
-    virtual ModulatorSpec_t getModulatorSpec(const int _modulatorID);
+    virtual std::vector<DSMeterSpec_t> getDSMeters();
+    virtual DSMeterSpec_t getDSMeterSpec(const int _dsMeterID);
 
-    virtual std::vector<int> getZones(const int _modulatorID);
-    virtual int getZoneCount(const int _modulatorID);
-    virtual std::vector<int> getDevicesInZone(const int _modulatorID, const int _zoneID);
-    virtual int getDevicesCountInZone(const int _modulatorID, const int _zoneID);
+    virtual std::vector<int> getZones(const int _dsMeterID);
+    virtual int getZoneCount(const int _dsMeterID);
+    virtual std::vector<int> getDevicesInZone(const int _dsMeterID, const int _zoneID);
+    virtual int getDevicesCountInZone(const int _dsMeterID, const int _zoneID);
 
-    virtual void setZoneID(const int _modulatorID, const devid_t _deviceID, const int _zoneID);
-    virtual void createZone(const int _modulatorID, const int _zoneID);
-    virtual void removeZone(const int _modulatorID, const int _zoneID);
+    virtual void setZoneID(const int _dsMeterID, const devid_t _deviceID, const int _zoneID);
+    virtual void createZone(const int _dsMeterID, const int _zoneID);
+    virtual void removeZone(const int _dsMeterID, const int _zoneID);
 
-    virtual int getGroupCount(const int _modulatorID, const int _zoneID);
-    virtual std::vector<int> getGroups(const int _modulatorID, const int _zoneID);
-    virtual int getDevicesInGroupCount(const int _modulatorID, const int _zoneID, const int _groupID);
-    virtual std::vector<int> getDevicesInGroup(const int _modulatorID, const int _zoneID, const int _groupID);
+    virtual int getGroupCount(const int _dsMeterID, const int _zoneID);
+    virtual std::vector<int> getGroups(const int _dsMeterID, const int _zoneID);
+    virtual int getDevicesInGroupCount(const int _dsMeterID, const int _zoneID, const int _groupID);
+    virtual std::vector<int> getDevicesInGroup(const int _dsMeterID, const int _zoneID, const int _groupID);
 
-    virtual std::vector<int> getGroupsOfDevice(const int _modulatorID, const int _deviceID);
+    virtual std::vector<int> getGroupsOfDevice(const int _dsMeterID, const int _deviceID);
 
-    virtual void addToGroup(const int _modulatorID, const int _groupID, const int _deviceID);
-    virtual void removeFromGroup(const int _modulatorID, const int _groupID, const int _deviceID);
+    virtual void addToGroup(const int _dsMeterID, const int _groupID, const int _deviceID);
+    virtual void removeFromGroup(const int _dsMeterID, const int _groupID, const int _deviceID);
 
-    virtual int addUserGroup(const int _modulatorID);
-    virtual void removeUserGroup(const int _modulatorID, const int _groupID);
+    virtual int addUserGroup(const int _dsMeterID);
+    virtual void removeUserGroup(const int _dsMeterID, const int _groupID);
 
-    virtual dsid_t getDSIDOfDevice(const int _modulatorID, const int _deviceID);
-    virtual dsid_t getDSIDOfModulator(const int _modulatorID);
+    virtual dsid_t getDSIDOfDevice(const int _dsMeterID, const int _deviceID);
+    virtual dsid_t getDSIDOfDSMeter(const int _dsMeterID);
 
-    virtual int getLastCalledScene(const int _modulatorID, const int _zoneID, const int _groupID);
+    virtual int getLastCalledScene(const int _dsMeterID, const int _zoneID, const int _groupID);
 
-    virtual unsigned long getPowerConsumption(const int _modulatorID);
-    virtual unsigned long getEnergyMeterValue(const int _modulatorID);
-    virtual bool getEnergyBorder(const int _modulatorID, int& _lower, int& _upper);
+    virtual unsigned long getPowerConsumption(const int _dsMeterID);
+    virtual unsigned long getEnergyMeterValue(const int _dsMeterID);
+    virtual bool getEnergyBorder(const int _dsMeterID, int& _lower, int& _upper);
 
     //------------------------------------------------ UDI
-    virtual uint8_t dSLinkSend(const int _modulatorID, devid_t _devAdr, uint8_t _value, uint8_t _flags);
+    virtual uint8_t dSLinkSend(const int _dsMeterID, devid_t _devAdr, uint8_t _value, uint8_t _flags);
 
     //------------------------------------------------ Device
-    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _modulatorID, int _paramID);
-    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _modulatorID);
+    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _dsMeterID, int _paramID);
+    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _dsMeterID);
 
     void setValueDevice(const Device& _device, const uint16_t _value, const uint16_t _parameterID, const int _size);
     virtual int getSensorValue(const Device& _device, const int _sensorID);
diff --git a/core/ds485const.h b/core/ds485const.h
index 40e111d..fe9e445 100644
--- a/core/ds485const.h
+++ b/core/ds485const.h
@@ -44,16 +44,16 @@ namespace dss {
   const uint8_t CommandEvent = 0x0f;
 
   // dSS => dSM function constants
-  const uint8_t FunctionModulatorAddZone = 0x00;
-  const uint8_t FunctionModulatorRemoveZone = 0x01;
-  const uint8_t FunctionModulatorRemoveAllZones = 0x02;
-  const uint8_t FunctionModulatorCountDevInZone = 0x03;
-  const uint8_t FunctionModulatorDevKeyInZone = 0x04;
-  const uint8_t FunctionModulatorGetGroupsSize = 0x05;
-  const uint8_t FunctionModulatorGetZonesSize  = 0x06;
-  const uint8_t FunctionModulatorGetZoneIdForInd = 0x07;
-  const uint8_t FunctionModulatorAddToGroup = 0x08;
-  const uint8_t FunctionModulatorRemoveFromGroup = 0x09;
+  const uint8_t FunctionDSMeterAddZone = 0x00;
+  const uint8_t FunctionDSMeterRemoveZone = 0x01;
+  const uint8_t FunctionDSMeterRemoveAllZones = 0x02;
+  const uint8_t FunctionDSMeterCountDevInZone = 0x03;
+  const uint8_t FunctionDSMeterDevKeyInZone = 0x04;
+  const uint8_t FunctionDSMeterGetGroupsSize = 0x05;
+  const uint8_t FunctionDSMeterGetZonesSize  = 0x06;
+  const uint8_t FunctionDSMeterGetZoneIdForInd = 0x07;
+  const uint8_t FunctionDSMeterAddToGroup = 0x08;
+  const uint8_t FunctionDSMeterRemoveFromGroup = 0x09;
   const uint8_t FunctionGroupAddDeviceToGroup = 0x10;
   const uint8_t FunctionGroupRemoveDeviceFromGroup = 0x11;
   const uint8_t FunctionGroupGetDeviceCount = 0x12;
@@ -103,11 +103,11 @@ namespace dss {
   const uint8_t FunctionDeviceGetSensorValue = 0x69;
   
   const uint8_t FunctionGetTypeRequest = 0x90;
-  const uint8_t FunctionModulatorGetDSID = 0x91;
-  const uint8_t FunctionModulatorGetPowerConsumption = 0x94;
-  const uint8_t FunctionModulatorGetEnergyMeterValue = 0x95;
-  const uint8_t FunctionModulatorSetEnergyLevel = 0x96;
-  const uint8_t FunctionModulatorGetEnergyLevel = 0x97;
+  const uint8_t FunctionDSMeterGetDSID = 0x91;
+  const uint8_t FunctionDSMeterGetPowerConsumption = 0x94;
+  const uint8_t FunctionDSMeterGetEnergyMeterValue = 0x95;
+  const uint8_t FunctionDSMeterSetEnergyLevel = 0x96;
+  const uint8_t FunctionDSMeterGetEnergyLevel = 0x97;
 
   const uint8_t FunctionDeviceGetTransmissionQuality = 0x9f;
 
@@ -180,7 +180,7 @@ namespace dss {
 
   const uint64_t DSIDHeader = 0x3504175FE0000000ll;
 
-  // error codes as received by the modulator
+  // error codes as received by the dsMeter
   const int kDS485Ok = 1;
   const int kDS485NoIDForIndexFound = -1;
   const int kDS485ZoneNotFound = -2;
diff --git a/core/ds485types.h b/core/ds485types.h
index 8fa1ca8..ad6b5c0 100644
--- a/core/ds485types.h
+++ b/core/ds485types.h
@@ -31,7 +31,7 @@ namespace dss {
   /** Bus id of a device */
   typedef uint16_t devid_t;
 
-  /** DSID of a device/modulator */
+  /** DSID of a device/dsMeter */
 
   typedef struct dsid{
     uint64_t upper;
diff --git a/core/metering/fake_meter.cpp b/core/metering/fake_meter.cpp
index 2959bb1..1cbe0df 100644
--- a/core/metering/fake_meter.cpp
+++ b/core/metering/fake_meter.cpp
@@ -95,11 +95,11 @@ namespace dss {
 
       DateTime now;
       unsigned long consumption = 0;
-      foreach(Modulator* modulator, getDSS().getApartment().getModulators()) {
+      foreach(DSMeter* dsMeter, getDSS().getApartment().getDSMeters()) {
         try {
-      	  consumption += modulator->getPowerConsumption();
+      	  consumption += dsMeter->getPowerConsumption();
         } catch(std::runtime_error& err) {
-          log("Could not poll modulator " + modulator->getDSID().toString() + ". Message: " + err.what());
+          log("Could not poll dsMeter " + dsMeter->getDSID().toString() + ". Message: " + err.what());
         }
       }
       if(addJitter) {
diff --git a/core/metering/metering.cpp b/core/metering/metering.cpp
index 0c30895..d98d8c9 100644
--- a/core/metering/metering.cpp
+++ b/core/metering/metering.cpp
@@ -70,7 +70,7 @@ namespace dss {
 
 //#define LOG_TIMING
 
-  void Metering::checkModulators(boost::shared_ptr<MeteringConfigChain> _config) {
+  void Metering::checkDSMeters(boost::shared_ptr<MeteringConfigChain> _config) {
     SeriesReader<CurrentValue> reader;
     SeriesWriter<CurrentValue> writer;
 
@@ -79,22 +79,22 @@ namespace dss {
 #ifdef LOG_TIMING
     Timestamp checkingAll;
 #endif
-    std::vector<Modulator*>& modulators = DSS::getInstance()->getApartment().getModulators();
-    for(std::vector<Modulator*>::iterator ipModulator = modulators.begin(), e = modulators.end();
-        ipModulator != e; ++ipModulator)
+    std::vector<DSMeter*>& dsMeters = DSS::getInstance()->getApartment().getDSMeters();
+    for(std::vector<DSMeter*>::iterator ipDSMeter = dsMeters.begin(), e = dsMeters.end();
+        ipDSMeter != e; ++ipDSMeter)
     {
-      if(!(*ipModulator)->isPresent()) {
+      if(!(*ipDSMeter)->isPresent()) {
         continue;
       }
 #ifdef LOG_TIMING
-      Timestamp checkingModulator;
+      Timestamp checkingDSMeter;
       Timestamp startedLoading;
 #endif
       std::vector<boost::shared_ptr<Series<CurrentValue> > > series;
       for(int iConfig = 0; iConfig < _config->size(); iConfig++) {
         // Load series from file
-        std::string fileName = m_MeteringStorageLocation + (*ipModulator)->getDSID().toString() + "_" + _config->getFilenameSuffix(iConfig) + ".xml";
-        log("Metering::checkModulators: Trying to load series from '" + fileName + "'");
+        std::string fileName = m_MeteringStorageLocation + (*ipDSMeter)->getDSID().toString() + "_" + _config->getFilenameSuffix(iConfig) + ".xml";
+        log("Metering::checkDSMeters: Trying to load series from '" + fileName + "'");
         if(boost::filesystem::exists(fileName)) {
           Timestamp startedLoadingSingle;
           boost::shared_ptr<Series<CurrentValue> > s = boost::shared_ptr<Series<CurrentValue> >(reader.readFromXML(fileName));
@@ -104,14 +104,14 @@ namespace dss {
           if(s.get() != NULL) {
             series.push_back(s);
           } else {
-            log("Metering::checkModulators: Failed to load series");
+            log("Metering::checkDSMeters: Failed to load series");
             return; // TODO: another strategy would be moving the file out of our way and just create an empty one
           }
         } else {
           boost::shared_ptr<Series<CurrentValue> > newSeries((new Series<CurrentValue>(_config->getResolution(iConfig), _config->getNumberOfValues(iConfig))));
           newSeries->setUnit(_config->getUnit());
           newSeries->setComment(_config->getComment());
-          newSeries->setFromDSID((*ipModulator)->getDSID());
+          newSeries->setFromDSID((*ipDSMeter)->getDSID());
           series.push_back(newSeries);
         }
       }
@@ -128,9 +128,9 @@ namespace dss {
         }
       }
       if(series.empty()) {
-        log("Metering::checkModulators: No series configured, check your config");
+        log("Metering::checkDSMeters: No series configured, check your config");
       } else {
-        log("Metering::checkModulators: Series loaded, updating");
+        log("Metering::checkDSMeters: Series loaded, updating");
         // Update series
 
         unsigned long value;
@@ -140,12 +140,12 @@ namespace dss {
 #endif
         try {
           if(_config->isEnergy()) {
-            value = (*ipModulator)->getEnergyMeterValue();
+            value = (*ipDSMeter)->getEnergyMeterValue();
           } else {
-            value = (*ipModulator)->getPowerConsumption();
+            value = (*ipDSMeter)->getPowerConsumption();
           }
         } catch(std::runtime_error& err) {
-          log("Could not poll modulator " + (*ipModulator)->getDSID().toString() + ". Message: " + err.what());
+          log("Could not poll dsMeter " + (*ipDSMeter)->getDSID().toString() + ". Message: " + err.what());
         }
 #ifdef LOG_TIMING
         cout << "fetching value: " << Timestamp().getDifference(fetchingValue) << endl;
@@ -160,15 +160,15 @@ namespace dss {
         Timestamp startedWriting;
 #endif
         // Store series
-        log("Metering::checkModulators: Writing series back...");
+        log("Metering::checkDSMeters: Writing series back...");
         for(int iConfig = 0; iConfig < _config->size(); iConfig++) {
 #ifdef LOG_TIMING
           Timestamp startedWritingSingle;
 #endif
           // Write series to file
-          std::string fileName = m_MeteringStorageLocation + (*ipModulator)->getDSID().toString() + "_" + _config->getFilenameSuffix(iConfig) + ".xml";
+          std::string fileName = m_MeteringStorageLocation + (*ipDSMeter)->getDSID().toString() + "_" + _config->getFilenameSuffix(iConfig) + ".xml";
           Series<CurrentValue>* s = series[iConfig].get();
-          log("Metering::checkModulators: Trying to save series to '" + fileName + "'");
+          log("Metering::checkDSMeters: Trying to save series to '" + fileName + "'");
           writer.writeToXML(*s, fileName);
 #ifdef LOG_TIMING
           cout << "writing single: " << Timestamp().getDifference(startedWritingSingle) << endl;
@@ -179,32 +179,32 @@ namespace dss {
 #endif
       }
 #ifdef LOG_TIMING
-      cout << "checkingModulator: " << Timestamp().getDifference(checkingModulator) << endl;
+      cout << "checkingDSMeter: " << Timestamp().getDifference(checkingDSMeter) << endl;
 #endif
     }
 #ifdef LOG_TIMING
     cout << "checking all: " << Timestamp().getDifference(checkingAll) << endl;
 #endif
-  } // checkModulators
+  } // checkDSMeters
 
   //#undef LOG_TIMING
 
   void Metering::execute() {
-    // check modulators periodically
+    // check dsMeters periodically
     while(DSS::getInstance()->getApartment().isInitializing()) {
       sleepSeconds(1);
     }
     while(!m_Terminated) {
       int sleepTimeSec = 60000;
 
-      log("Metering::execute: Checking modulators");
+      log("Metering::execute: Checking dsMeters");
       for(unsigned int iConfig = 0; iConfig < m_Config.size(); iConfig++) {
         if(m_Config[iConfig]->needsRun()) {
-          checkModulators(m_Config[iConfig]);
+          checkDSMeters(m_Config[iConfig]);
         }
         sleepTimeSec = std::min(sleepTimeSec, m_Config[iConfig]->getCheckIntervalSeconds());
       }
-      log("Metering::execute: Done checking modulators");
+      log("Metering::execute: Done checking dsMeters");
       sleepSeconds(sleepTimeSec);
     }
   } // execute
diff --git a/core/metering/metering.h b/core/metering/metering.h
index 940d4af..9efecbd 100644
--- a/core/metering/metering.h
+++ b/core/metering/metering.h
@@ -44,7 +44,7 @@ namespace dss {
     std::string m_MeteringStorageLocation;
     std::vector<boost::shared_ptr<MeteringConfigChain> > m_Config;
   private:
-    void checkModulators(boost::shared_ptr<MeteringConfigChain> _config);
+    void checkDSMeters(boost::shared_ptr<MeteringConfigChain> _config);
 
     virtual void execute();
   protected:
diff --git a/core/metering/series.h b/core/metering/series.h
index 14eb36f..466deb4 100644
--- a/core/metering/series.h
+++ b/core/metering/series.h
@@ -259,8 +259,9 @@ namespace dss {
     const std::string& get(const std::string& _key) const { return m_Properties.get(_key); }
     const Properties& getProperties() const { return m_Properties; }
     
-    std::deque<value_type>* getExpandedValues() {
-      std::deque<value_type>* expandedQueue = new std::deque<value_type>;
+    boost::shared_ptr<std::deque<value_type> > getExpandedValues() {
+      boost::shared_ptr<std::deque<value_type> > result(new std::deque<value_type>);
+      std::deque<value_type>* expandedQueue = result.get();
       
       typename QueueType::iterator iValue = m_Values.begin(), e = m_Values.end();
 
@@ -278,7 +279,7 @@ namespace dss {
         }
         iCurrentTimeStamp = iCurrentTimeStamp.addSeconds(-m_Resolution);
       }
-      return expandedQueue;
+      return result;
     }
 
   }; // Series
diff --git a/core/model/CMakeLists.txt b/core/model/CMakeLists.txt
index 2d00c21..1673177 100644
--- a/core/model/CMakeLists.txt
+++ b/core/model/CMakeLists.txt
@@ -1 +1,5 @@
-add_library(model apartment.cpp group.cpp devicecontainer.cpp set.cpp modulator.cpp device.cpp nonaddressablemodelitem.cpp addressablemodelitem.cpp physicalmodelitem.cpp deviceinterface.cpp devicereference.cpp zone.cpp modelevent.cpp scenehelper.cpp busscanner.cpp busrequest.cpp)
+add_library(model apartment.cpp group.cpp devicecontainer.cpp set.cpp
+	modulator.cpp device.cpp nonaddressablemodelitem.cpp
+	addressablemodelitem.cpp physicalmodelitem.cpp deviceinterface.cpp
+	devicereference.cpp zone.cpp modelevent.cpp scenehelper.cpp
+	busscanner.cpp busrequest.cpp modelpersistence.cpp)
diff --git a/core/model/apartment.cpp b/core/model/apartment.cpp
index 82d536c..19febf7 100644
--- a/core/model/apartment.cpp
+++ b/core/model/apartment.cpp
@@ -26,30 +26,6 @@
 
 #include <boost/filesystem.hpp>
 
-#include <Poco/DOM/Document.h>
-#include <Poco/DOM/Element.h>
-#include <Poco/DOM/Node.h>
-#include <Poco/DOM/Attr.h>
-#include <Poco/DOM/Text.h>
-#include <Poco/DOM/ProcessingInstruction.h>
-#include <Poco/DOM/AutoPtr.h>
-#include <Poco/DOM/DOMWriter.h>
-#include <Poco/DOM/DOMParser.h>
-#include <Poco/XML/XMLWriter.h>
-#include <Poco/SAX/InputSource.h>
-
-using Poco::XML::Document;
-using Poco::XML::Element;
-using Poco::XML::Attr;
-using Poco::XML::Text;
-using Poco::XML::ProcessingInstruction;
-using Poco::XML::AutoPtr;
-using Poco::XML::DOMWriter;
-using Poco::XML::DOMParser;
-using Poco::XML::XMLWriter;
-using Poco::XML::InputSource;
-using Poco::XML::Node;
-
 #include "core/DS485Interface.h"
 #include "core/ds485const.h"
 #include "core/dss.h"
@@ -89,7 +65,7 @@ namespace dss {
   Apartment::~Apartment() {
     scrubVector(m_Devices);
     scrubVector(m_Zones);
-    scrubVector(m_Modulators);
+    scrubVector(m_DSMeters);
   } // dtor
 
   void Apartment::initialize() {
@@ -147,50 +123,50 @@ namespace dss {
     _zone.addGroup(grp);
   } // addDefaultGroupsToZone
 
-  void Apartment::modulatorReady(int _modulatorBusID) {
-    log("Modulator with id: " + intToString(_modulatorBusID) + " is ready", lsInfo);
+  void Apartment::dsMeterReady(int _dsMeterBusID) {
+    log("DSMeter with id: " + intToString(_dsMeterBusID) + " is ready", lsInfo);
     try {
       try {
-        Modulator& mod = getModulatorByBusID(_modulatorBusID);
+        DSMeter& mod = getDSMeterByBusID(_dsMeterBusID);
         BusScanner scanner(*m_pDS485Interface->getStructureQueryBusInterface(), *this);
-        if(scanner.scanModulator(mod)) {
-          boost::shared_ptr<Event> modulatorReadyEvent(new Event("modulator_ready"));
-          modulatorReadyEvent->setProperty("modulator", mod.getDSID().toString());
-          raiseEvent(modulatorReadyEvent);
+        if(scanner.scanDSMeter(mod)) {
+          boost::shared_ptr<Event> dsMeterReadyEvent(new Event("dsMeter_ready"));
+          dsMeterReadyEvent->setProperty("dsMeter", mod.getDSID().toString());
+          raiseEvent(dsMeterReadyEvent);
         }
       } catch(DS485ApiError& e) {
-        log(std::string("Exception caught while scanning modulator " + intToString(_modulatorBusID) + " : ") + e.what(), lsFatal);
+        log(std::string("Exception caught while scanning dsMeter " + intToString(_dsMeterBusID) + " : ") + e.what(), lsFatal);
 
-        ModelEvent* pEvent = new ModelEvent(ModelEvent::etModulatorReady);
-        pEvent->addParameter(_modulatorBusID);
+        ModelEvent* pEvent = new ModelEvent(ModelEvent::etDSMeterReady);
+        pEvent->addParameter(_dsMeterBusID);
         addModelEvent(pEvent);
       }
     } catch(ItemNotFoundException& e) {
-      log("No modulator for bus-id (" + intToString(_modulatorBusID) + ") found, re-discovering devices");
+      log("No dsMeter for bus-id (" + intToString(_dsMeterBusID) + ") found, re-discovering devices");
       discoverDS485Devices();
     }
-  } // modulatorReady
+  } // dsMeterReady
 
-  void Apartment::setPowerConsumption(int _modulatorBusID, unsigned long _value) {
-    getModulatorByBusID(_modulatorBusID).setPowerConsumption(_value);
+  void Apartment::setPowerConsumption(int _dsMeterBusID, unsigned long _value) {
+    getDSMeterByBusID(_dsMeterBusID).setPowerConsumption(_value);
   } // powerConsumption
 
-  void Apartment::setEnergyMeterValue(int _modulatorBusID, unsigned long _value) {
-    getModulatorByBusID(_modulatorBusID).setEnergyMeterValue(_value);
+  void Apartment::setEnergyMeterValue(int _dsMeterBusID, unsigned long _value) {
+    getDSMeterByBusID(_dsMeterBusID).setEnergyMeterValue(_value);
   } // energyMeterValue
 
   void Apartment::discoverDS485Devices() {
-    // temporary mark all modulators as absent
-    foreach(Modulator* pModulator, m_Modulators) {
-      pModulator->setIsPresent(false);
+    // temporary mark all dsMeters as absent
+    foreach(DSMeter* pDSMeter, m_DSMeters) {
+      pDSMeter->setIsPresent(false);
     }
 
-    // Request the dsid of all modulators
+    // Request the dsid of all dsMeters
     DS485CommandFrame requestFrame;
     requestFrame.getHeader().setBroadcast(true);
     requestFrame.getHeader().setDestination(0);
     requestFrame.setCommand(CommandRequest);
-    requestFrame.getPayload().add<uint8_t>(FunctionModulatorGetDSID);
+    requestFrame.getPayload().add<uint8_t>(FunctionDSMeterGetDSID);
     if(DSS::hasInstance()) {
       DSS::getInstance()->getDS485Interface().sendFrame(requestFrame);
     }
@@ -198,7 +174,8 @@ namespace dss {
 
   void Apartment::writeConfiguration() {
     if(DSS::hasInstance()) {
-      writeConfigurationToXML(DSS::getInstance()->getPropertySystem().getStringValue(getConfigPropertyBasePath() + "configfile"));
+      ModelPersistence persistence(*this);
+      persistence.writeConfigurationToXML(DSS::getInstance()->getPropertySystem().getStringValue(getConfigPropertyBasePath() + "configfile"));
     }
   } // writeConfiguration
 
@@ -237,18 +214,18 @@ namespace dss {
           onDSLinkInterrupt(event.getParameter(0), event.getParameter(1), event.getParameter(2));
         }
         break;
-      case ModelEvent::etNewModulator:
+      case ModelEvent::etNewDSMeter:
         discoverDS485Devices();
         break;
-      case ModelEvent::etLostModulator:
+      case ModelEvent::etLostDSMeter:
         discoverDS485Devices();
         break;
-      case ModelEvent::etModulatorReady:
+      case ModelEvent::etDSMeterReady:
         if(event.getParameterCount() != 1) {
-          log("Expected exactly 1 parameter for ModelEvent::etModulatorReady");
+          log("Expected exactly 1 parameter for ModelEvent::etDSMeterReady");
         } else {
           try{
-            Modulator& mod = getModulatorByBusID(event.getParameter(0));
+            DSMeter& mod = getDSMeterByBusID(event.getParameter(0));
             mod.setIsPresent(true);
             mod.setIsValid(false);
           } catch(ItemNotFoundException& e) {
@@ -288,16 +265,16 @@ namespace dss {
                          ((uint32_t(event.getParameter(5)) & 0x00ffff) << 16) | (uint32_t(event.getParameter(6)) & 0x00ffff));
           log ("Discovered device with busID: " + intToString(busID) + " and dsid: " + newDSID.toString());
           try{
-             getModulatorByDSID(newDSID).setBusID(busID);
+             getDSMeterByDSID(newDSID).setBusID(busID);
              log ("dSM present");
-             getModulatorByDSID(newDSID).setIsPresent(true);
+             getDSMeterByDSID(newDSID).setIsPresent(true);
           } catch(ItemNotFoundException& e) {
              log ("dSM not present");
-             Modulator& modulator = allocateModulator(newDSID);
-             modulator.setBusID(busID);
-             modulator.setIsPresent(true);
-             modulator.setIsValid(false);
-             ModelEvent* pEvent = new ModelEvent(ModelEvent::etModulatorReady);
+             DSMeter& dsMeter = allocateDSMeter(newDSID);
+             dsMeter.setBusID(busID);
+             dsMeter.setIsPresent(true);
+             dsMeter.setIsValid(false);
+             ModelEvent* pEvent = new ModelEvent(ModelEvent::etDSMeterReady);
              pEvent->addParameter(busID);
              addModelEvent(pEvent);
           }
@@ -314,10 +291,10 @@ namespace dss {
     } else {
       m_NewModelEvent.waitFor(1000);
       bool hadToUpdate = false;
-      foreach(Modulator* pModulator, m_Modulators) {
-        if(pModulator->isPresent()) {
-          if(!pModulator->isValid()) {
-            modulatorReady(pModulator->getBusID());
+      foreach(DSMeter* pDSMeter, m_DSMeters) {
+        if(pDSMeter->isPresent()) {
+          if(!pDSMeter->isValid()) {
+            dsMeterReady(pDSMeter->getBusID());
             hadToUpdate = true;
             break;
           }
@@ -340,11 +317,8 @@ namespace dss {
   void Apartment::readConfiguration() {
     if(DSS::hasInstance()) {
       std::string configFileName = DSS::getInstance()->getPropertySystem().getStringValue(getConfigPropertyBasePath() + "configfile");
-      if(!boost::filesystem::exists(configFileName)) {
-        log(std::string("Apartment::execute: Could not open config-file for apartment: '") + configFileName + "'", lsWarning);
-      } else {
-        readConfigurationFromXML(configFileName);
-      }
+      ModelPersistence persistence(*this);
+      persistence.readConfigurationFromXML(configFileName);
     }
   } // readConfiguration
 
@@ -375,7 +349,7 @@ namespace dss {
       raiseEvent(runningEvent);
     }
 
-    // load devices/modulators/etc. from a config-file
+    // load devices/dsMeters/etc. from a config-file
     readConfiguration();
 
     {
@@ -405,224 +379,6 @@ namespace dss {
     }
   } // addModelEvent
 
-  const int ApartmentConfigVersion = 1;
-
-  void Apartment::readConfigurationFromXML(const std::string& _fileName) {
-    setName("dSS");
-    std::ifstream inFile(_fileName.c_str());
-
-    InputSource input(inFile);
-    DOMParser parser;
-    AutoPtr<Document> pDoc = parser.parse(&input);
-    Element* rootNode = pDoc->documentElement();
-
-    if(rootNode->localName() == "config") {
-      if(rootNode->hasAttribute("version") && (strToInt(rootNode->getAttribute("version")) == ApartmentConfigVersion)) {
-        Node* curNode = rootNode->firstChild();
-        while(curNode != NULL) {
-          std::string nodeName = curNode->localName();
-          if(nodeName == "devices") {
-            loadDevices(curNode);
-          } else if(nodeName == "modulators") {
-            loadModulators(curNode);
-          } else if(nodeName == "zones") {
-            loadZones(curNode);
-          } else if(nodeName == "apartment") {
-            Element* elem = dynamic_cast<Element*>(curNode);
-            if(elem != NULL) {
-              Element* nameElem = elem->getChildElement("name");
-              if(nameElem->hasChildNodes()) {
-                setName(nameElem->firstChild()->nodeValue());
-              }
-            }
-          }
-          curNode = curNode->nextSibling();
-        }
-      } else {
-        log("Config file has the wrong version");
-      }
-    }
-  } // readConfigurationFromXML
-
-  void Apartment::loadDevices(Node* _node) {
-    Node* curNode = _node->firstChild();
-    while(curNode != NULL) {
-      if(curNode->localName() == "device") {
-        Element* elem = dynamic_cast<Element*>(curNode);
-        if((elem != NULL) && elem->hasAttribute("dsid")) {
-          dsid_t dsid = dsid_t::fromString(elem->getAttribute("dsid"));
-          std::string name;
-          Element* nameElem = elem->getChildElement("name");
-          if((nameElem != NULL) && nameElem->hasChildNodes()) {
-            name = nameElem->firstChild()->nodeValue();
-          }
-
-          DateTime firstSeen;
-          if(elem->hasAttribute("firstSeen")) {
-            firstSeen = DateTime(dateFromISOString(elem->getAttribute("firstSeen").c_str()));
-          }
-
-          Device& newDevice = allocateDevice(dsid);
-          if(!name.empty()) {
-            newDevice.setName(name);
-          }
-          newDevice.setFirstSeen(firstSeen);
-          Element* propertiesElem = elem->getChildElement("properties");
-          if(propertiesElem != NULL) {
-            newDevice.publishToPropertyTree();
-            newDevice.getPropertyNode()->loadChildrenFromNode(propertiesElem);
-          }
-        }
-      }
-      curNode = curNode->nextSibling();
-    }
-  } // loadDevices
-
-  void Apartment::loadModulators(Node* _node) {
-    Node* curNode = _node->firstChild();
-    while(curNode != NULL) {
-      if(curNode->localName() == "modulator") {
-        Element* elem = dynamic_cast<Element*>(curNode);
-        if((elem != NULL) && elem->hasAttribute("id")) {
-          dsid_t id = dsid_t::fromString(elem->getAttribute("id"));
-          std::string name;
-          Element* nameElem = elem->getChildElement("name");
-          if((nameElem != NULL) && nameElem->hasChildNodes()) {
-            name = nameElem->firstChild()->nodeValue();
-          }
-          Modulator& newModulator = allocateModulator(id);
-          if(!name.empty()) {
-            newModulator.setName(name);
-          }
-        }
-      }
-      curNode = curNode->nextSibling();
-    }
-  } // loadModulators
-
-  void Apartment::loadZones(Node* _node) {
-    Node* curNode = _node->firstChild();
-    while(curNode != NULL) {
-      if(curNode->localName() == "zone") {
-        Element* elem = dynamic_cast<Element*>(curNode);
-        if((elem != NULL) && elem->hasAttribute("id")) {
-          int id = strToInt(elem->getAttribute("id"));
-          std::string name;
-          Element* nameElem = elem->getChildElement("name");
-          if((nameElem != NULL) && nameElem->hasChildNodes()) {
-            name = nameElem->firstChild()->nodeValue();
-          }
-          Zone& newZone = allocateZone(id);
-          if(!name.empty()) {
-            newZone.setName(name);
-          }
-        }
-      }
-      curNode = curNode->nextSibling();
-    }
-  } // loadZones
-
-  void DeviceToXML(const Device* _pDevice, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
-    AutoPtr<Element> pDeviceNode = _pDocument->createElement("device");
-    pDeviceNode->setAttribute("dsid", _pDevice->getDSID().toString());
-    if(!_pDevice->getName().empty()) {
-      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
-      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pDevice->getName());
-      pNameNode->appendChild(txtNode);
-      pDeviceNode->appendChild(pNameNode);
-    }
-    pDeviceNode->setAttribute("firstSeen", _pDevice->getFirstSeen());
-    if(_pDevice->getPropertyNode() != NULL) {
-      AutoPtr<Element> pPropertiesNode = _pDocument->createElement("properties");
-      pDeviceNode->appendChild(pPropertiesNode);
-      _pDevice->getPropertyNode()->saveChildrenAsXML(_pDocument, pPropertiesNode, PropertyNode::Archive);
-    }
-
-    _parentNode->appendChild(pDeviceNode);
-  } // deviceToXML
-
-  void ZoneToXML(const Zone* _pZone, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
-    AutoPtr<Element> pZoneNode = _pDocument->createElement("zone");
-    pZoneNode->setAttribute("id", intToString(_pZone->getID()));
-    if(!_pZone->getName().empty()) {
-      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
-      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pZone->getName());
-      pNameNode->appendChild(txtNode);
-      pZoneNode->appendChild(pNameNode);
-    }
-    _parentNode->appendChild(pZoneNode);
-  } // zoneToXML
-
-  void ModulatorToXML(const Modulator* _pModulator, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
-    AutoPtr<Element> pModulatorNode = _pDocument->createElement("modulator");
-    pModulatorNode->setAttribute("id", _pModulator->getDSID().toString());
-    if(!_pModulator->getName().empty()) {
-      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
-      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pModulator->getName());
-      pNameNode->appendChild(txtNode);
-      pModulatorNode->appendChild(pNameNode);
-    }
-    _parentNode->appendChild(pModulatorNode);
-  } // modulatorToXML
-
-  void Apartment::writeConfigurationToXML(const std::string& _fileName) {
-    log("Writing apartment config to '" + _fileName + "'", lsInfo);
-    AutoPtr<Document> pDoc = new Document;
-
-    AutoPtr<ProcessingInstruction> pXMLHeader = pDoc->createProcessingInstruction("xml", "version='1.0' encoding='utf-8'");
-    pDoc->appendChild(pXMLHeader);
-
-    AutoPtr<Element> pRoot = pDoc->createElement("config");
-    pRoot->setAttribute("version", intToString(ApartmentConfigVersion));
-    pDoc->appendChild(pRoot);
-
-    // apartment
-    AutoPtr<Element> pApartment = pDoc->createElement("apartment");
-    pRoot->appendChild(pApartment);
-    AutoPtr<Element> pApartmentName = pDoc->createElement("name");
-    AutoPtr<Text> pApartmentNameText = pDoc->createTextNode(getName());
-    pApartmentName->appendChild(pApartmentNameText);
-    pApartment->appendChild(pApartmentName);
-
-    // devices
-    AutoPtr<Element> pDevices = pDoc->createElement("devices");
-    pRoot->appendChild(pDevices);
-    foreach(Device* pDevice, m_Devices) {
-      DeviceToXML(pDevice, pDevices, pDoc);
-    }
-
-    // zones
-    AutoPtr<Element> pZones = pDoc->createElement("zones");
-    pRoot->appendChild(pZones);
-    foreach(Zone* pZone, m_Zones) {
-      ZoneToXML(pZone, pZones, pDoc);
-    }
-
-    // modulators
-    AutoPtr<Element> pModulators = pDoc->createElement("modulators");
-    pRoot->appendChild(pModulators);
-    foreach(Modulator* pModulator, m_Modulators) {
-      ModulatorToXML(pModulator, pModulators, pDoc);
-    }
-
-    std::string tmpOut = _fileName + ".tmp";
-    std::ofstream ofs(tmpOut.c_str());
-
-    if(ofs) {
-      DOMWriter writer;
-      writer.setNewLine("\n");
-      writer.setOptions(XMLWriter::PRETTY_PRINT);
-      writer.writeNode(ofs, pDoc);
-
-      ofs.close();
-
-      // move it to the desired location
-      rename(tmpOut.c_str(), _fileName.c_str());
-    } else {
-      log("Could not open file '" + tmpOut + "' for writing", lsFatal);
-    }
-  } // writeConfigurationToXML
-
   Device& Apartment::getDeviceByDSID(const dsid_t _dsid) const {
     foreach(Device* dev, m_Devices) {
       if(dev->getDSID() == _dsid) {
@@ -641,10 +397,10 @@ namespace dss {
     throw ItemNotFoundException(_dsid.toString());
   } // getDeviceByShortAddress
 
-  Device& Apartment::getDeviceByShortAddress(const Modulator& _modulator, const devid_t _deviceID) const {
+  Device& Apartment::getDeviceByShortAddress(const DSMeter& _dsMeter, const devid_t _deviceID) const {
     foreach(Device* dev, m_Devices) {
       if((dev->getShortAddress() == _deviceID) &&
-          (_modulator.getBusID() == dev->getModulatorID())) {
+          (_dsMeter.getBusID() == dev->getDSMeterID())) {
         return *dev;
       }
     }
@@ -691,36 +447,36 @@ namespace dss {
     return m_Zones;
   } // getZones
 
-  Modulator& Apartment::getModulator(const std::string& _modName) {
-    foreach(Modulator* modulator, m_Modulators) {
-      if(modulator->getName() == _modName) {
-        return *modulator;
+  DSMeter& Apartment::getDSMeter(const std::string& _modName) {
+    foreach(DSMeter* dsMeter, m_DSMeters) {
+      if(dsMeter->getName() == _modName) {
+        return *dsMeter;
       }
     }
     throw ItemNotFoundException(_modName);
-  } // getModulator(name)
+  } // getDSMeter(name)
 
-  Modulator& Apartment::getModulatorByBusID(const int _busId) {
-    foreach(Modulator* modulator, m_Modulators) {
-      if(modulator->getBusID() == _busId) {
-        return *modulator;
+  DSMeter& Apartment::getDSMeterByBusID(const int _busId) {
+    foreach(DSMeter* dsMeter, m_DSMeters) {
+      if(dsMeter->getBusID() == _busId) {
+        return *dsMeter;
       }
     }
     throw ItemNotFoundException(intToString(_busId));
-  } // getModulatorByBusID
+  } // getDSMeterByBusID
 
-  Modulator& Apartment::getModulatorByDSID(const dsid_t _dsid) {
-    foreach(Modulator* modulator, m_Modulators) {
-      if(modulator->getDSID() == _dsid) {
-        return *modulator;
+  DSMeter& Apartment::getDSMeterByDSID(const dsid_t _dsid) {
+    foreach(DSMeter* dsMeter, m_DSMeters) {
+      if(dsMeter->getDSID() == _dsid) {
+        return *dsMeter;
       }
     }
     throw ItemNotFoundException(_dsid.toString());
-  } // getModulatorByDSID
+  } // getDSMeterByDSID
 
-  std::vector<Modulator*>& Apartment::getModulators() {
-    return m_Modulators;
-  } // getModulators
+  std::vector<DSMeter*>& Apartment::getDSMeters() {
+    return m_DSMeters;
+  } // getDSMeters
 
   // Group queries
   Group& Apartment::getGroup(const std::string& _name) {
@@ -757,17 +513,17 @@ namespace dss {
     return *pResult;
   } // allocateDevice
 
-  Modulator& Apartment::allocateModulator(const dsid_t _dsid) {
-    foreach(Modulator* modulator, m_Modulators) {
-      if((modulator)->getDSID() == _dsid) {
-        return *modulator;
+  DSMeter& Apartment::allocateDSMeter(const dsid_t _dsid) {
+    foreach(DSMeter* dsMeter, m_DSMeters) {
+      if((dsMeter)->getDSID() == _dsid) {
+        return *dsMeter;
       }
     }
 
-    Modulator* pResult = new Modulator(_dsid);
-    m_Modulators.push_back(pResult);
+    DSMeter* pResult = new DSMeter(_dsid);
+    m_DSMeters.push_back(pResult);
     return *pResult;
-  } // allocateModulator
+  } // allocateDSMeter
 
   Zone& Apartment::allocateZone(int _zoneID) {
     if(getPropertyNode() != NULL) {
@@ -810,17 +566,17 @@ namespace dss {
     }
   } // removeDevice
 
-  void Apartment::removeModulator(dsid_t _modulator) {
-    for(std::vector<Modulator*>::iterator ipModulator = m_Modulators.begin(), e = m_Modulators.end();
-        ipModulator != e; ++ipModulator) {
-      Modulator* pModulator = *ipModulator;
-      if(pModulator->getDSID() == _modulator) {
-        m_Modulators.erase(ipModulator);
-        delete pModulator;
+  void Apartment::removeDSMeter(dsid_t _dsMeter) {
+    for(std::vector<DSMeter*>::iterator ipDSMeter = m_DSMeters.begin(), e = m_DSMeters.end();
+        ipDSMeter != e; ++ipDSMeter) {
+      DSMeter* pDSMeter = *ipDSMeter;
+      if(pDSMeter->getDSID() == _dsMeter) {
+        m_DSMeters.erase(ipDSMeter);
+        delete pDSMeter;
         return;
       }
     }
-  } // removeModulator
+  } // removeDSMeter
 
   class SetLastCalledSceneAction : public IDeviceAction {
   protected:
@@ -879,31 +635,31 @@ namespace dss {
 
   } // onGroupCallScene
 
-  void Apartment::onDeviceCallScene(const int _modulatorID, const int _deviceID, const int _sceneID) {
+  void Apartment::onDeviceCallScene(const int _dsMeterID, const int _deviceID, const int _sceneID) {
     try {
       if(_sceneID < 0 || _sceneID > MaxSceneNumber) {
-        log("onDeviceCallScene: _sceneID is out of bounds. modulator-id '" + intToString(_modulatorID) + "' for device '" + intToString(_deviceID) + "' scene: " + intToString(_sceneID), lsError);
+        log("onDeviceCallScene: _sceneID is out of bounds. dsMeter-id '" + intToString(_dsMeterID) + "' for device '" + intToString(_deviceID) + "' scene: " + intToString(_sceneID), lsError);
         return;
       }
-      Modulator& mod = getModulatorByBusID(_modulatorID);
+      DSMeter& mod = getDSMeterByBusID(_dsMeterID);
       try {
-        log("OnDeviceCallScene: modulator-id '" + intToString(_modulatorID) + "' for device '" + intToString(_deviceID) + "' scene: " + intToString(_sceneID));
+        log("OnDeviceCallScene: dsMeter-id '" + intToString(_dsMeterID) + "' for device '" + intToString(_deviceID) + "' scene: " + intToString(_sceneID));
         DeviceReference devRef = mod.getDevices().getByBusID(_deviceID);
         if(SceneHelper::rememberScene(_sceneID & 0x00ff)) {
           devRef.getDevice().setLastCalledScene(_sceneID & 0x00ff);
         }
       } catch(ItemNotFoundException& e) {
-        log("OnDeviceCallScene: Could not find device with bus-id '" + intToString(_deviceID) + "' on modulator '" + intToString(_modulatorID) + "' scene:" + intToString(_sceneID), lsError);
+        log("OnDeviceCallScene: Could not find device with bus-id '" + intToString(_deviceID) + "' on dsMeter '" + intToString(_dsMeterID) + "' scene:" + intToString(_sceneID), lsError);
       }
     } catch(ItemNotFoundException& e) {
-      log("OnDeviceCallScene: Could not find modulator with bus-id '" + intToString(_modulatorID) + "'", lsError);
+      log("OnDeviceCallScene: Could not find dsMeter with bus-id '" + intToString(_dsMeterID) + "'", lsError);
     }
   } // onDeviceCallScene
 
   void Apartment::onAddDevice(const int _modID, const int _zoneID, const int _devID, const int _functionID) {
     // get full dsid
     log("New Device found");
-    log("  Modulator: " + intToString(_modID));
+    log("  DSMeter: " + intToString(_modID));
     log("  Zone:      " + intToString(_zoneID));
     log("  BusID:     " + intToString(_devID));
     log("  FID:       " + intToString(_functionID));
@@ -914,10 +670,10 @@ namespace dss {
 
     log("  DSID:      " + dsid.toString());
 
-    // remove from old modulator
+    // remove from old dsMeter
     try {
-      Modulator& oldModulator = getModulatorByBusID(dev.getModulatorID());
-      oldModulator.removeDevice(devRef);
+      DSMeter& oldDSMeter = getDSMeterByBusID(dev.getDSMeterID());
+      oldDSMeter.removeDevice(devRef);
     } catch(std::runtime_error&) {
     }
 
@@ -926,25 +682,25 @@ namespace dss {
       try {
         Zone& oldZone = getZone(dev.getZoneID());
         oldZone.removeDevice(devRef);
-        // TODO: check if the zone is empty on the modulator and remove it in that case
+        // TODO: check if the zone is empty on the dsMeter and remove it in that case
       } catch(std::runtime_error&) {
       }
     }
 
     // update device
-    dev.setModulatorID(_modID);
+    dev.setDSMeterID(_modID);
     dev.setZoneID(_zoneID);
     dev.setShortAddress(_devID);
     dev.setFunctionID(_functionID);
     dev.setIsPresent(true);
 
-    // add to new modulator
-    Modulator& modulator = getModulatorByBusID(_modID);
-    modulator.addDevice(devRef);
+    // add to new dsMeter
+    DSMeter& dsMeter = getDSMeterByBusID(_modID);
+    dsMeter.addDevice(devRef);
 
     // add to new zone
     Zone& newZone = allocateZone(_zoneID);
-    newZone.addToModulator(modulator);
+    newZone.addToDSMeter(dsMeter);
     newZone.addDevice(devRef);
 
     // get groups of device
@@ -966,14 +722,14 @@ namespace dss {
   void Apartment::onDSLinkInterrupt(const int _modID, const int _devID, const int _priority) {
     // get full dsid
     log("dSLinkInterrupt:");
-    log("  Modulator: " + intToString(_modID));
+    log("  DSMeter: " + intToString(_modID));
     log("  DevID:     " + intToString(_devID));
     log("  Priority:  " + intToString(_priority));
 
     try {
-      Modulator& modulator = getModulatorByBusID(_modID);
+      DSMeter& dsMeter = getDSMeterByBusID(_modID);
       try {
-        Device& device = getDeviceByShortAddress(modulator, _devID);
+        Device& device = getDeviceByShortAddress(dsMeter, _devID);
         PropertyNodePtr deviceNode = device.getPropertyNode();
         if(deviceNode == NULL) {
           return;
@@ -1015,7 +771,7 @@ namespace dss {
         return;
       }
     } catch(ItemNotFoundException& ex) {
-      log("Apartment::onDSLinkInterrupt: Unknown Modulator with ID " + intToString(_modID), lsFatal);
+      log("Apartment::onDSLinkInterrupt: Unknown DSMeter with ID " + intToString(_modID), lsFatal);
       return;
     }
   } // onDSLinkInterrupt
diff --git a/core/model/apartment.h b/core/model/apartment.h
index 60b41fd..c8018cf 100644
--- a/core/model/apartment.h
+++ b/core/model/apartment.h
@@ -38,17 +38,12 @@
 #include "core/thread.h"
 #include "core/syncevent.h"
 #include "core/DS485Interface.h"
-
-namespace Poco {
-  namespace XML {
-    class Node;
-  }
-}
+#include "modelpersistence.h"
 
 namespace dss {
 
   class Zone;
-  class Modulator;
+  class DSMeter;
   class Device;
   class Group;
   class Event;
@@ -69,7 +64,7 @@ namespace dss {
   {
   private:
     std::vector<Zone*> m_Zones;
-    std::vector<Modulator*> m_Modulators;
+    std::vector<DSMeter*> m_DSMeters;
     std::vector<Device*> m_Devices;
     bool m_IsInitializing;
 
@@ -81,19 +76,18 @@ namespace dss {
     DS485Interface* m_pDS485Interface;
     BusRequestDispatcher* m_pBusRequestDispatcher;
   private:
-    void loadDevices(Poco::XML::Node* _node);
-    void loadModulators(Poco::XML::Node* _node);
-    void loadZones(Poco::XML::Node* _node);
-
     void addDefaultGroupsToZone(Zone& _zone);
     void handleModelEvents();
-    void modulatorReady(int _modulatorBusID);
-    void setPowerConsumption(int _modulatorBusID, unsigned long _value);
-    void setEnergyMeterValue(int _modulatorBusID, unsigned long _value);
+    void dsMeterReady(int _dsMeterBusID);
+    void setPowerConsumption(int _dsMeterBusID, unsigned long _value);
+    void setEnergyMeterValue(int _dsMeterBusID, unsigned long _value);
     void discoverDS485Devices();
 
     void raiseEvent(boost::shared_ptr<Event> _pEvent);
     void waitForInterface();
+
+    void readConfiguration();
+    void writeConfiguration();
   protected:
     virtual void doStart();
   public:
@@ -105,22 +99,15 @@ namespace dss {
     /** Returns a set containing all devices of the set */
     virtual Set getDevices() const;
 
-    /** Loads the datamodel and marks the contained items as "stale" */
-    void readConfigurationFromXML(const std::string& _fileName);
-    void readConfiguration();
-
-    void writeConfigurationToXML(const std::string& _fileName);
-    void writeConfiguration();
-
     /** Returns a reference to the device with the DSID \a _dsid */
     Device& getDeviceByDSID(const dsid_t _dsid) const;
     /** @copydoc getDeviceByDSID */
     Device& getDeviceByDSID(const dsid_t _dsid);
     /** Returns a reference to the device with the name \a _name*/
     Device& getDeviceByName(const std::string& _name);
-    /** Returns a device by it's short-address and modulator */
-    Device& getDeviceByShortAddress(const Modulator& _modulator, const devid_t _deviceID) const;
-
+    /** Returns a device by it's short-address and dsMeter */
+    Device& getDeviceByShortAddress(const DSMeter& _dsMeter, const devid_t _deviceID) const;
+    std::vector<Device*>& getDevicesVector() { return m_Devices; }
     /** Allocates a device and returns a reference to it.
      *  If there is a stale device with the same dsid, this device gets "activated"
      */
@@ -140,16 +127,16 @@ namespace dss {
       */
     Zone& allocateZone(int _zoneID);
 
-    Modulator& allocateModulator(const dsid_t _dsid);
+    DSMeter& allocateDSMeter(const dsid_t _dsid);
 
-    /** Returns a Modulator by name */
-    Modulator& getModulator(const std::string& _modName);
-    /** Returns a Modulator by DSID  */
-    Modulator& getModulatorByDSID(const dsid_t _dsid);
-    /** Returns a Modulator by bus-id */
-    Modulator& getModulatorByBusID(const int _busID);
-    /** Returns a vector of all modulators */
-    std::vector<Modulator*>& getModulators();
+    /** Returns a DSMeter by name */
+    DSMeter& getDSMeter(const std::string& _modName);
+    /** Returns a DSMeter by DSID  */
+    DSMeter& getDSMeterByDSID(const dsid_t _dsid);
+    /** Returns a DSMeter by bus-id */
+    DSMeter& getDSMeterByBusID(const int _busID);
+    /** Returns a vector of all dsMeters */
+    std::vector<DSMeter*>& getDSMeters();
 
     /** Returns a Group by name */
     Group& getGroup(const std::string& _name);
@@ -164,7 +151,7 @@ namespace dss {
 
     void removeZone(int _zoneID);
     void removeDevice(dsid_t _device);
-    void removeModulator(dsid_t _modulator);
+    void removeDSMeter(dsid_t _dsMeter);
   public:
 
     /** Returns the root-node for the apartment tree */
@@ -180,7 +167,7 @@ namespace dss {
     void onGroupCallScene(const int _zoneID, const int _groupID, const int _sceneID);
     /** Called by the DS485Proxy if a device-call-scene frame was intercepted.
      *  Updates the state of the device. */
-    void onDeviceCallScene(const int _modulatorID, const int _deviceID, const int _sceneID);
+    void onDeviceCallScene(const int _dsMeterID, const int _deviceID, const int _sceneID);
     /** Called by the DS485Proxy if an add-device frame was intercepted.
      *  Adds the device to the model. */
     void onAddDevice(const int _modID, const int _zoneID, const int _devID, const int _functionID);
diff --git a/core/model/busrequest.cpp b/core/model/busrequest.cpp
index 1fe9053..7075e54 100644
--- a/core/model/busrequest.cpp
+++ b/core/model/busrequest.cpp
@@ -72,7 +72,7 @@ namespace dss {
     }
 
     virtual uint16_t getTarget() {
-      return getDevice()->getModulatorID();
+      return getDevice()->getDSMeterID();
     }
 
     virtual bool isBroadcast() {
@@ -90,16 +90,16 @@ namespace dss {
     uint16_t m_FunctionID;
   };
 
-  PacketBuilderHintsBase* EnableDeviceCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> EnableDeviceCommandBusRequest::getBuilderHints() {
     DeviceCommandPacketBuilderHints* result = new DeviceCommandPacketBuilderHints(this);
     result->setFunctionID(FunctionDeviceEnable);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   }
 
-  PacketBuilderHintsBase* DisableDeviceCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> DisableDeviceCommandBusRequest::getBuilderHints() {
     DeviceCommandPacketBuilderHints* result = new DeviceCommandPacketBuilderHints(this);
     result->setFunctionID(FunctionDeviceDisable);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   }
   
   class CommandBusRequestPacketBuilderHints : public PacketBuilderHints {
@@ -131,7 +131,7 @@ namespace dss {
 
     virtual uint16_t getTarget() {
       if(targetIsDevice()) {
-        return m_pDevice->getModulatorID();
+        return m_pDevice->getDSMeterID();
       }
       return 0;
     }
@@ -220,68 +220,68 @@ namespace dss {
     }
   };
   
-  PacketBuilderHintsBase* CallSceneCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> CallSceneCommandBusRequest::getBuilderHints() {
     SceneCommandPacketBuilderHints* result = new SceneCommandPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceCallScene);
     result->setFunctionIDForGroup(FunctionGroupCallScene);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* SaveSceneCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> SaveSceneCommandBusRequest::getBuilderHints() {
     SceneCommandPacketBuilderHints* result = new SceneCommandPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceSaveScene);
     result->setFunctionIDForGroup(FunctionGroupSaveScene);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* UndoSceneCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> UndoSceneCommandBusRequest::getBuilderHints() {
     SceneCommandPacketBuilderHints* result = new SceneCommandPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceUndoScene);
     result->setFunctionIDForGroup(FunctionGroupUndoScene);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* IncreaseValueCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> IncreaseValueCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceIncreaseValue);
     result->setFunctionIDForGroup(FunctionGroupIncreaseValue);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* DecreaseValueCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> DecreaseValueCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceDecreaseValue);
     result->setFunctionIDForGroup(FunctionGroupDecreaseValue);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* StartDimUpCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> StartDimUpCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceStartDimInc);
     result->setFunctionIDForGroup(FunctionGroupStartDimInc);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* StartDimDownCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> StartDimDownCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceStartDimDec);
     result->setFunctionIDForGroup(FunctionGroupStartDimDec);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* EndDimCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> EndDimCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceEndDim);
     result->setFunctionIDForGroup(FunctionGroupEndDim);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
 
-  PacketBuilderHintsBase* SetValueCommandBusRequest::getBuilderHints() {
+  boost::shared_ptr<PacketBuilderHintsBase> SetValueCommandBusRequest::getBuilderHints() {
     CommandBusRequestPacketBuilderHints* result = new CommandBusRequestPacketBuilderHints(this);
     result->setFunctionIDForDevice(FunctionDeviceSetValue);
     result->setFunctionIDForGroup(FunctionGroupSetValue);
     result->addParameter(m_Value);
-    return result;
+    return boost::shared_ptr<PacketBuilderHintsBase>(result);
   } // getBuilderHints
   
 } // namespace dss
diff --git a/core/model/busrequest.h b/core/model/busrequest.h
index 399ec75..7083372 100644
--- a/core/model/busrequest.h
+++ b/core/model/busrequest.h
@@ -24,6 +24,8 @@
 
 #include <stdint.h>
 
+#include <boost/shared_ptr.hpp>
+
 namespace dss {
   class AddressableModelItem;
   class Device;
@@ -43,7 +45,7 @@ namespace dss {
 
   class BusRequest {
   public:
-    virtual PacketBuilderHintsBase* getBuilderHints() = 0;
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints() = 0;
     virtual ~BusRequest() {}; // please the compiler (virtual dtor)
   };
 
@@ -65,12 +67,12 @@ namespace dss {
   
   class EnableDeviceCommandBusRequest : public DeviceCommandBusRequest {
   public:
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class DisableDeviceCommandBusRequest : public DeviceCommandBusRequest {
   public:
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class SceneCommandBusRequest : public CommandBusRequest {
@@ -83,35 +85,35 @@ namespace dss {
 
   class CallSceneCommandBusRequest : public SceneCommandBusRequest {
   public:
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class SaveSceneCommandBusRequest : public SceneCommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
   
   class UndoSceneCommandBusRequest : public SceneCommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class IncreaseValueCommandBusRequest : public CommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class DecreaseValueCommandBusRequest : public CommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class StartDimUpCommandBusRequest : public CommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
   
   class StartDimDownCommandBusRequest : public CommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class EndDimCommandBusRequest : public CommandBusRequest {
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   };
 
   class SetValueCommandBusRequest : public CommandBusRequest {
@@ -124,7 +126,7 @@ namespace dss {
       return m_Value;
     }
   private:
-    virtual PacketBuilderHintsBase* getBuilderHints();
+    virtual boost::shared_ptr<PacketBuilderHintsBase> getBuilderHints();
   private:
     uint16_t m_Value;
   };
diff --git a/core/model/busscanner.cpp b/core/model/busscanner.cpp
index 6f01991..865b871 100644
--- a/core/model/busscanner.cpp
+++ b/core/model/busscanner.cpp
@@ -42,116 +42,116 @@ namespace dss {
   {
   }
 
-  bool BusScanner::scanModulator(Modulator& _modulator) {
-    _modulator.setIsPresent(true);
-    _modulator.setIsValid(false);
+  bool BusScanner::scanDSMeter(DSMeter& _dsMeter) {
+    _dsMeter.setIsPresent(true);
+    _dsMeter.setIsValid(false);
 
-    int modulatorID = _modulator.getBusID();
+    int dsMeterID = _dsMeter.getBusID();
 
-    log("scanModulator: Start " + intToString(modulatorID) , lsInfo);
+    log("scanDSMeter: Start " + intToString(dsMeterID) , lsInfo);
     std::vector<int> zoneIDs;
     try {
-      zoneIDs = m_Interface.getZones(modulatorID);
+      zoneIDs = m_Interface.getZones(dsMeterID);
     } catch(DS485ApiError& e) {
-      log("scanModulator: Error getting ZoneIDs", lsFatal);
+      log("scanDSMeter: Error getting ZoneIDs", lsFatal);
       return false;
     }
 
     int levelOrange, levelRed;
     try {
-      if(m_Interface.getEnergyBorder(modulatorID, levelOrange, levelRed)) {
-        _modulator.setEnergyLevelOrange(levelOrange);
-        _modulator.setEnergyLevelRed(levelRed);
+      if(m_Interface.getEnergyBorder(dsMeterID, levelOrange, levelRed)) {
+        _dsMeter.setEnergyLevelOrange(levelOrange);
+        _dsMeter.setEnergyLevelRed(levelRed);
       }
     } catch(DS485ApiError& e) {
-      log("scanModulator: Error getting EnergyLevels", lsFatal);
+      log("scanDSMeter: Error getting EnergyLevels", lsFatal);
       return false;
     }
 
     try {
-      ModulatorSpec_t spec = m_Interface.getModulatorSpec(modulatorID);
-      _modulator.setSoftwareVersion(spec.get<1>());
-      _modulator.setHardwareVersion(spec.get<2>());
-      _modulator.setHardwareName(spec.get<3>());
-      _modulator.setDeviceType(spec.get<4>());
+      DSMeterSpec_t spec = m_Interface.getDSMeterSpec(dsMeterID);
+      _dsMeter.setSoftwareVersion(spec.get<1>());
+      _dsMeter.setHardwareVersion(spec.get<2>());
+      _dsMeter.setHardwareName(spec.get<3>());
+      _dsMeter.setDeviceType(spec.get<4>());
     } catch(DS485ApiError& e) {
-      log("scanModulator: Error getting dSMSpecs", lsFatal);
+      log("scanDSMeter: Error getting dSMSpecs", lsFatal);
       return false;
     }
 
     bool firstZone = true;
     foreach(int zoneID, zoneIDs) {
-      log("scanModulator:  Found zone with id: " + intToString(zoneID));
+      log("scanDSMeter:  Found zone with id: " + intToString(zoneID));
       Zone& zone = m_Apartment.allocateZone(zoneID);
-      zone.addToModulator(_modulator);
+      zone.addToDSMeter(_dsMeter);
       zone.setIsPresent(true);
       if(firstZone) {
-        zone.setFirstZoneOnModulator(modulatorID);
+        zone.setFirstZoneOnDSMeter(dsMeterID);
         firstZone = false;
       }
       std::vector<int> devices;
       try {
-        devices = m_Interface.getDevicesInZone(modulatorID, zoneID);
+        devices = m_Interface.getDevicesInZone(dsMeterID, zoneID);
       } catch(DS485ApiError& e) {
-        log("scanModulator: Error getting getDevicesInZone", lsFatal);
+        log("scanDSMeter: Error getting getDevicesInZone", lsFatal);
         return false;
       }
       foreach(int devID, devices) {
         dsid_t dsid;
         try {
-          dsid = m_Interface.getDSIDOfDevice(modulatorID, devID);
+          dsid = m_Interface.getDSIDOfDevice(dsMeterID, devID);
         } catch(DS485ApiError& e) {
-            log("scanModulator: Error getting getDSIDOfDevice", lsFatal);
+            log("scanDSMeter: Error getting getDSIDOfDevice", lsFatal);
             return false;
         }
 
         int functionID = 0;
         try {
-          functionID = m_Interface.deviceGetFunctionID(devID, modulatorID);
+          functionID = m_Interface.deviceGetFunctionID(devID, dsMeterID);
         } catch(DS485ApiError& e) {
-          log("scanModulator: Error getting cmdGetFunctionID", lsFatal);
+          log("scanDSMeter: Error getting cmdGetFunctionID", lsFatal);
           return false;
         }
-        log("scanModulator:    Found device with id: " + intToString(devID));
-        log("scanModulator:    DSID:        " + dsid.toString());
-        log("scanModulator:    Function ID: " + unsignedLongIntToHexString(functionID));
+        log("scanDSMeter:    Found device with id: " + intToString(devID));
+        log("scanDSMeter:    DSID:        " + dsid.toString());
+        log("scanDSMeter:    Function ID: " + unsignedLongIntToHexString(functionID));
         Device& dev = m_Apartment.allocateDevice(dsid);
         dev.setShortAddress(devID);
-        dev.setModulatorID(modulatorID);
+        dev.setDSMeterID(dsMeterID);
         dev.setZoneID(zoneID);
         dev.setFunctionID(functionID);
 
-        std::vector<int> groupIdperDevices = m_Interface.getGroupsOfDevice(modulatorID, devID);
-        std::vector<int> groupIDsPerDevice = m_Interface.getGroupsOfDevice(modulatorID,devID);
+        std::vector<int> groupIdperDevices = m_Interface.getGroupsOfDevice(dsMeterID, devID);
+        std::vector<int> groupIDsPerDevice = m_Interface.getGroupsOfDevice(dsMeterID,devID);
         foreach(int groupID, groupIDsPerDevice) {
-          log(std::string("scanModulator: adding device ") + intToString(devID) + " to group " + intToString(groupID));
+          log(std::string("scanDSMeter: adding device ") + intToString(devID) + " to group " + intToString(groupID));
           dev.addToGroup(groupID);
         }
 
         DeviceReference devRef(dev, &m_Apartment);
         zone.addDevice(devRef);
-        _modulator.addDevice(devRef);
+        _dsMeter.addDevice(devRef);
         dev.setIsPresent(true);
       }
       std::vector<int> groupIDs;
       try {
-        groupIDs = m_Interface.getGroups(modulatorID, zoneID);
+        groupIDs = m_Interface.getGroups(dsMeterID, zoneID);
       } catch(DS485ApiError& e) {
-        log("scanModulator: Error getting getGroups", lsFatal);
+        log("scanDSMeter: Error getting getGroups", lsFatal);
         return false;
       }
 
       foreach(int groupID, groupIDs) {
         if(groupID == 0) {
-          log("scanModulator:    Group ID is zero, bailing out... (modulatorID: "
-              + intToString(modulatorID) +
+          log("scanDSMeter:    Group ID is zero, bailing out... (dsMeterID: "
+              + intToString(dsMeterID) +
               "zoneID: " + intToString(zoneID) + ")",
               lsError);
           continue;
         }
-        log("scanModulator:    Found group with id: " + intToString(groupID));
+        log("scanDSMeter:    Found group with id: " + intToString(groupID));
         if(zone.getGroup(groupID) == NULL) {
-          log(" scanModulator:    Adding new group to zone");
+          log(" scanDSMeter:    Adding new group to zone");
           zone.addGroup(new Group(groupID, zone.getID(), m_Apartment));
         }
         try {
@@ -161,29 +161,29 @@ namespace dss {
           Group* pGroup = new Group(groupID, 0, m_Apartment);
           m_Apartment.getZone(0).addGroup(pGroup);
           pGroup->setIsPresent(true);
-          log("scanModulator:     Adding new group to zone 0");
+          log("scanDSMeter:     Adding new group to zone 0");
         }
 
         // get last called scene for zone, group
         try {
-          int lastCalledScene = m_Interface.getLastCalledScene(modulatorID, zoneID, groupID);
+          int lastCalledScene = m_Interface.getLastCalledScene(dsMeterID, zoneID, groupID);
           Group* pGroup = zone.getGroup(groupID);
           assert(pGroup != NULL);
-          log("scanModulator: zoneID: " + intToString(zoneID) + " groupID: " + intToString(groupID) + " lastScene: " + intToString(lastCalledScene));
+          log("scanDSMeter: zoneID: " + intToString(zoneID) + " groupID: " + intToString(groupID) + " lastScene: " + intToString(lastCalledScene));
           if(lastCalledScene < 0 || lastCalledScene > MaxSceneNumber) {
-            log("scanModulator: _sceneID is out of bounds. zoneID: " + intToString(zoneID) + " groupID: " + intToString(groupID) + " scene: " + intToString(lastCalledScene), lsError);
+            log("scanDSMeter: _sceneID is out of bounds. zoneID: " + intToString(zoneID) + " groupID: " + intToString(groupID) + " scene: " + intToString(lastCalledScene), lsError);
           } else {
             m_Apartment.onGroupCallScene(zoneID, groupID, lastCalledScene);
           }
         } catch(DS485ApiError& error) {
-          log(std::string("scanModulator: Error getting last called scene '") + error.what() + "'", lsError);
+          log(std::string("scanDSMeter: Error getting last called scene '") + error.what() + "'", lsError);
         }
       }
     }
-    _modulator.setIsValid(true);
+    _dsMeter.setIsValid(true);
     return true;
 
-  } // scanModulator
+  } // scanDSMeter
 
   void BusScanner::log(const std::string& _line, aLogSeverity _severity) {
     Logger::getInstance()->log(_line, _severity);
diff --git a/core/model/busscanner.h b/core/model/busscanner.h
index bcc54eb..71a9a88 100644
--- a/core/model/busscanner.h
+++ b/core/model/busscanner.h
@@ -29,12 +29,12 @@ namespace dss {
 
   class StructureQueryBusInterface;
   class Apartment;
-  class Modulator;
+  class DSMeter;
   
   class BusScanner {
   public:
     BusScanner(StructureQueryBusInterface& _interface, Apartment& _apartment);
-    bool scanModulator(Modulator& _modulator);
+    bool scanDSMeter(DSMeter& _dsMeter);
   private:
     void log(const std::string& _line, aLogSeverity _severity = lsDebug);
   private:
diff --git a/core/model/device.cpp b/core/model/device.cpp
index 2167fc0..493fa72 100644
--- a/core/model/device.cpp
+++ b/core/model/device.cpp
@@ -53,7 +53,7 @@ namespace dss {
         m_pPropertyNode = m_pApartment->getPropertyNode()->createProperty("zones/zone0/" + m_DSID.toString());
 //        m_pPropertyNode->createProperty("name")->linkToProxy(PropertyProxyMemberFunction<Device, std::string>(*this, &Device::getName, &Device::setName));
         m_pPropertyNode->createProperty("name")->linkToProxy(PropertyProxyReference<std::string>(m_Name));
-        m_pPropertyNode->createProperty("ModulatorID")->linkToProxy(PropertyProxyReference<int>(m_ModulatorID, false));
+        m_pPropertyNode->createProperty("DSMeterID")->linkToProxy(PropertyProxyReference<int>(m_DSMeterID, false));
         m_pPropertyNode->createProperty("ZoneID")->linkToProxy(PropertyProxyReference<int>(m_ZoneID, false));
         if(m_pPropertyNode->getProperty("interrupt/mode") == NULL) {
           PropertyNodePtr interruptNode = m_pPropertyNode->createProperty("interrupt");
@@ -102,7 +102,7 @@ namespace dss {
   } // setRawValue
 
   double Device::getValue(const int _parameterNr) {
-    return m_pApartment->getDeviceBusInterface()->deviceGetParameterValue(m_ShortAddress, m_ModulatorID,  _parameterNr);
+    return m_pApartment->getDeviceBusInterface()->deviceGetParameterValue(m_ShortAddress, m_DSMeterID,  _parameterNr);
   } // getValue
 
   void Device::nextScene() {
@@ -148,13 +148,13 @@ namespace dss {
     return m_DSID;
   } // getDSID;
 
-  int Device::getModulatorID() const {
-    return m_ModulatorID;
-  } // getModulatorID
+  int Device::getDSMeterID() const {
+    return m_DSMeterID;
+  } // getDSMeterID
 
-  void Device::setModulatorID(const int _modulatorID) {
-    m_ModulatorID = _modulatorID;
-  } // setModulatorID
+  void Device::setDSMeterID(const int _dsMeterID) {
+    m_DSMeterID = _dsMeterID;
+  } // setDSMeterID
 
   int Device::getZoneID() const {
     return m_ZoneID;
@@ -250,7 +250,7 @@ namespace dss {
     if(_writeOnly) {
       flags |= DSLinkSendWriteOnly;
     }
-    return m_pApartment->getDeviceBusInterface()->dSLinkSend(m_ModulatorID, m_ShortAddress, _value, flags);
+    return m_pApartment->getDeviceBusInterface()->dSLinkSend(m_DSMeterID, m_ShortAddress, _value, flags);
   } // dsLinkSend
 
   int Device::getSensorValue(const int _sensorID) {
diff --git a/core/model/device.h b/core/model/device.h
index 1b7441f..09997d8 100644
--- a/core/model/device.h
+++ b/core/model/device.h
@@ -46,7 +46,7 @@ namespace dss {
     std::string m_Name;
     dsid_t m_DSID;
     devid_t m_ShortAddress;
-    int m_ModulatorID;
+    int m_DSMeterID;
     int m_ZoneID;
     std::bitset<63> m_GroupBitmask;
     std::vector<int> m_Groups;
@@ -136,10 +136,10 @@ namespace dss {
     void setShortAddress(const devid_t _shortAddress);
     /** Returns the DSID of the device */
     dsid_t getDSID() const;
-    /** Returns the id of the modulator the device is connected to */
-    int getModulatorID() const;
-    /** Sets the modulatorID of the device. */
-    void setModulatorID(const int _modulatorID);
+    /** Returns the id of the dsMeter the device is connected to */
+    int getDSMeterID() const;
+    /** Sets the dsMeterID of the device. */
+    void setDSMeterID(const int _dsMeterID);
 
     /** Returns the zone ID the device resides in. */
     int getZoneID() const;
diff --git a/core/model/modelevent.h b/core/model/modelevent.h
index dbe4e26..ecdcac5 100644
--- a/core/model/modelevent.h
+++ b/core/model/modelevent.h
@@ -38,9 +38,9 @@ namespace dss {
                    etNewDevice,       /**< A new device has been detected */
                    etModelDirty,      /**< A parameter that will be stored in \c apartment.xml has been changed. */
                    etDSLinkInterrupt,  /**< An interrupt has occured */
-                   etNewModulator, /**< A new modulator has joined the bus */
-                   etLostModulator, /**< We've lost a modulator on the bus */
-                   etModulatorReady, /**< A modulator has completed its scanning cycle and is now ready */
+                   etNewDSMeter, /**< A new dsMeter has joined the bus */
+                   etLostDSMeter, /**< We've lost a dsMeter on the bus */
+                   etDSMeterReady, /**< A dsMeter has completed its scanning cycle and is now ready */
                    etBusReady, /**< The bus transitioned into ready state */
                    etPowerConsumption, /**< Powerconsumption message happened */
                    etEnergyMeterValue, /**< Powerconsumption message happened */
diff --git a/core/model/modelpersistence.cpp b/core/model/modelpersistence.cpp
new file mode 100644
index 0000000..bbfa0d4
--- /dev/null
+++ b/core/model/modelpersistence.cpp
@@ -0,0 +1,284 @@
+/*
+    Copyright (c) 2010 digitalSTROM.org, Zurich, Switzerland
+
+    Author: Patrick Staehlin, futureLAB AG <pstaehlin at futurelab.ch>
+
+    This file is part of digitalSTROM Server.
+
+    digitalSTROM Server is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    digitalSTROM Server is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with digitalSTROM Server. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "modelpersistence.h"
+
+#include <Poco/DOM/Document.h>
+#include <Poco/DOM/Element.h>
+#include <Poco/DOM/Node.h>
+#include <Poco/DOM/Attr.h>
+#include <Poco/DOM/Text.h>
+#include <Poco/DOM/ProcessingInstruction.h>
+#include <Poco/DOM/AutoPtr.h>
+#include <Poco/DOM/DOMWriter.h>
+#include <Poco/DOM/DOMParser.h>
+#include <Poco/XML/XMLWriter.h>
+#include <Poco/SAX/InputSource.h>
+
+#include "core/foreach.h"
+#include "core/base.h"
+#include "core/propertysystem.h"
+#include "core/model/apartment.h"
+#include "core/model/device.h"
+#include "core/model/zone.h"
+#include "core/model/modulator.h"
+
+using Poco::XML::Document;
+using Poco::XML::Element;
+using Poco::XML::Attr;
+using Poco::XML::Text;
+using Poco::XML::ProcessingInstruction;
+using Poco::XML::AutoPtr;
+using Poco::XML::DOMWriter;
+using Poco::XML::DOMParser;
+using Poco::XML::XMLWriter;
+using Poco::XML::InputSource;
+using Poco::XML::Node;
+
+namespace dss {
+
+  ModelPersistence::ModelPersistence(Apartment& _apartment)
+  : m_Apartment(_apartment)
+  { } // ctor
+
+  ModelPersistence::~ModelPersistence() {
+  } // dtor
+
+  const int ApartmentConfigVersion = 1;
+
+  void ModelPersistence::readConfigurationFromXML(const std::string& _fileName) {
+    m_Apartment.setName("dSS");
+    std::ifstream inFile(_fileName.c_str());
+
+    InputSource input(inFile);
+    DOMParser parser;
+    AutoPtr<Document> pDoc = parser.parse(&input);
+    Element* rootNode = pDoc->documentElement();
+
+    if(rootNode->localName() == "config") {
+      if(rootNode->hasAttribute("version") && (strToInt(rootNode->getAttribute("version")) == ApartmentConfigVersion)) {
+        Node* curNode = rootNode->firstChild();
+        while(curNode != NULL) {
+          std::string nodeName = curNode->localName();
+          if(nodeName == "devices") {
+            loadDevices(curNode);
+          } else if(nodeName == "dsMeters") {
+            loadDSMeters(curNode);
+          } else if(nodeName == "zones") {
+            loadZones(curNode);
+          } else if(nodeName == "apartment") {
+            Element* elem = dynamic_cast<Element*>(curNode);
+            if(elem != NULL) {
+              Element* nameElem = elem->getChildElement("name");
+              if(nameElem->hasChildNodes()) {
+                m_Apartment.setName(nameElem->firstChild()->nodeValue());
+              }
+            }
+          }
+          curNode = curNode->nextSibling();
+        }
+      } else {
+        m_Apartment.log("Config file has the wrong version");
+      }
+    }
+  } // readConfigurationFromXML
+
+  void ModelPersistence::loadDevices(Node* _node) {
+    Node* curNode = _node->firstChild();
+    while(curNode != NULL) {
+      if(curNode->localName() == "device") {
+        Element* elem = dynamic_cast<Element*>(curNode);
+        if((elem != NULL) && elem->hasAttribute("dsid")) {
+          dsid_t dsid = dsid_t::fromString(elem->getAttribute("dsid"));
+          std::string name;
+          Element* nameElem = elem->getChildElement("name");
+          if((nameElem != NULL) && nameElem->hasChildNodes()) {
+            name = nameElem->firstChild()->nodeValue();
+          }
+
+          DateTime firstSeen;
+          if(elem->hasAttribute("firstSeen")) {
+            firstSeen = DateTime(dateFromISOString(elem->getAttribute("firstSeen").c_str()));
+          }
+
+          Device& newDevice = m_Apartment.allocateDevice(dsid);
+          if(!name.empty()) {
+            newDevice.setName(name);
+          }
+          newDevice.setFirstSeen(firstSeen);
+          Element* propertiesElem = elem->getChildElement("properties");
+          if(propertiesElem != NULL) {
+            newDevice.publishToPropertyTree();
+            newDevice.getPropertyNode()->loadChildrenFromNode(propertiesElem);
+          }
+        }
+      }
+      curNode = curNode->nextSibling();
+    }
+  } // loadDevices
+
+  void ModelPersistence::loadDSMeters(Node* _node) {
+    Node* curNode = _node->firstChild();
+    while(curNode != NULL) {
+      if(curNode->localName() == "dsMeter") {
+        Element* elem = dynamic_cast<Element*>(curNode);
+        if((elem != NULL) && elem->hasAttribute("id")) {
+          dsid_t id = dsid_t::fromString(elem->getAttribute("id"));
+          std::string name;
+          Element* nameElem = elem->getChildElement("name");
+          if((nameElem != NULL) && nameElem->hasChildNodes()) {
+            name = nameElem->firstChild()->nodeValue();
+          }
+          DSMeter& newDSMeter = m_Apartment.allocateDSMeter(id);
+          if(!name.empty()) {
+            newDSMeter.setName(name);
+          }
+        }
+      }
+      curNode = curNode->nextSibling();
+    }
+  } // loadDSMeters
+
+  void ModelPersistence::loadZones(Node* _node) {
+    Node* curNode = _node->firstChild();
+    while(curNode != NULL) {
+      if(curNode->localName() == "zone") {
+        Element* elem = dynamic_cast<Element*>(curNode);
+        if((elem != NULL) && elem->hasAttribute("id")) {
+          int id = strToInt(elem->getAttribute("id"));
+          std::string name;
+          Element* nameElem = elem->getChildElement("name");
+          if((nameElem != NULL) && nameElem->hasChildNodes()) {
+            name = nameElem->firstChild()->nodeValue();
+          }
+          Zone& newZone = m_Apartment.allocateZone(id);
+          if(!name.empty()) {
+            newZone.setName(name);
+          }
+        }
+      }
+      curNode = curNode->nextSibling();
+    }
+  } // loadZones
+
+  void deviceToXML(const Device* _pDevice, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
+    AutoPtr<Element> pDeviceNode = _pDocument->createElement("device");
+    pDeviceNode->setAttribute("dsid", _pDevice->getDSID().toString());
+    if(!_pDevice->getName().empty()) {
+      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
+      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pDevice->getName());
+      pNameNode->appendChild(txtNode);
+      pDeviceNode->appendChild(pNameNode);
+    }
+    pDeviceNode->setAttribute("firstSeen", _pDevice->getFirstSeen());
+    if(_pDevice->getPropertyNode() != NULL) {
+      AutoPtr<Element> pPropertiesNode = _pDocument->createElement("properties");
+      pDeviceNode->appendChild(pPropertiesNode);
+      _pDevice->getPropertyNode()->saveChildrenAsXML(_pDocument, pPropertiesNode, PropertyNode::Archive);
+    }
+
+    _parentNode->appendChild(pDeviceNode);
+  } // deviceToXML
+
+  void zoneToXML(const Zone* _pZone, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
+    AutoPtr<Element> pZoneNode = _pDocument->createElement("zone");
+    pZoneNode->setAttribute("id", intToString(_pZone->getID()));
+    if(!_pZone->getName().empty()) {
+      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
+      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pZone->getName());
+      pNameNode->appendChild(txtNode);
+      pZoneNode->appendChild(pNameNode);
+    }
+    _parentNode->appendChild(pZoneNode);
+  } // zoneToXML
+
+  void dsMeterToXML(const DSMeter* _pDSMeter, AutoPtr<Element>& _parentNode, AutoPtr<Document>& _pDocument) {
+    AutoPtr<Element> pDSMeterNode = _pDocument->createElement("dsMeter");
+    pDSMeterNode->setAttribute("id", _pDSMeter->getDSID().toString());
+    if(!_pDSMeter->getName().empty()) {
+      AutoPtr<Element> pNameNode = _pDocument->createElement("name");
+      AutoPtr<Text> txtNode = _pDocument->createTextNode(_pDSMeter->getName());
+      pNameNode->appendChild(txtNode);
+      pDSMeterNode->appendChild(pNameNode);
+    }
+    _parentNode->appendChild(pDSMeterNode);
+  } // dsMeterToXML
+
+  void ModelPersistence::writeConfigurationToXML(const std::string& _fileName) {
+    m_Apartment.log("Writing apartment config to '" + _fileName + "'", lsInfo);
+    AutoPtr<Document> pDoc = new Document;
+
+    AutoPtr<ProcessingInstruction> pXMLHeader = pDoc->createProcessingInstruction("xml", "version='1.0' encoding='utf-8'");
+    pDoc->appendChild(pXMLHeader);
+
+    AutoPtr<Element> pRoot = pDoc->createElement("config");
+    pRoot->setAttribute("version", intToString(ApartmentConfigVersion));
+    pDoc->appendChild(pRoot);
+
+    // apartment
+    AutoPtr<Element> pApartment = pDoc->createElement("apartment");
+    pRoot->appendChild(pApartment);
+    AutoPtr<Element> pApartmentName = pDoc->createElement("name");
+    AutoPtr<Text> pApartmentNameText = pDoc->createTextNode(m_Apartment.getName());
+    pApartmentName->appendChild(pApartmentNameText);
+    pApartment->appendChild(pApartmentName);
+
+    // devices
+    AutoPtr<Element> pDevices = pDoc->createElement("devices");
+    pRoot->appendChild(pDevices);
+    foreach(Device* pDevice, m_Apartment.getDevicesVector()) {
+      deviceToXML(pDevice, pDevices, pDoc);
+    }
+
+    // zones
+    AutoPtr<Element> pZones = pDoc->createElement("zones");
+    pRoot->appendChild(pZones);
+    foreach(Zone* pZone, m_Apartment.getZones()) {
+      zoneToXML(pZone, pZones, pDoc);
+    }
+
+    // dsMeters
+    AutoPtr<Element> pDSMeters = pDoc->createElement("dsMeters");
+    pRoot->appendChild(pDSMeters);
+    foreach(DSMeter* pDSMeter, m_Apartment.getDSMeters()) {
+      dsMeterToXML(pDSMeter, pDSMeters, pDoc);
+    }
+
+    std::string tmpOut = _fileName + ".tmp";
+    std::ofstream ofs(tmpOut.c_str());
+
+    if(ofs) {
+      DOMWriter writer;
+      writer.setNewLine("\n");
+      writer.setOptions(XMLWriter::PRETTY_PRINT);
+      writer.writeNode(ofs, pDoc);
+
+      ofs.close();
+
+      // move it to the desired location
+      rename(tmpOut.c_str(), _fileName.c_str());
+    } else {
+      m_Apartment.log("Could not open file '" + tmpOut + "' for writing", lsFatal);
+    }
+  } // writeConfigurationToXML
+
+}
diff --git a/core/model/modelpersistence.h b/core/model/modelpersistence.h
new file mode 100644
index 0000000..4ffa405
--- /dev/null
+++ b/core/model/modelpersistence.h
@@ -0,0 +1,56 @@
+/*
+    Copyright (c) 2010 digitalSTROM.org, Zurich, Switzerland
+
+    Author: Patrick Staehlin, futureLAB AG <pstaehlin at futurelab.ch>
+
+    This file is part of digitalSTROM Server.
+
+    digitalSTROM Server is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    digitalSTROM Server is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with digitalSTROM Server. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+#ifndef MODELPERSISTENCE_H_
+#define MODELPERSISTENCE_H_
+
+#include <iosfwd>
+
+namespace Poco {
+  namespace XML {
+    class Node;
+  }
+}
+
+namespace dss {
+
+  class Apartment;
+
+  class ModelPersistence {
+  public:
+    ModelPersistence(Apartment& _apartment);
+    virtual ~ModelPersistence();
+
+    void readConfigurationFromXML(const std::string& _fileName);
+    void writeConfigurationToXML(const std::string& _fileName);
+  private:
+    void loadDevices(Poco::XML::Node* _node);
+    void loadDSMeters(Poco::XML::Node* _node);
+    void loadZones(Poco::XML::Node* _node);
+  private:
+    Apartment& m_Apartment;
+  }; // ModelPersistence
+
+} // namespace dss
+
+#endif /* MODELPERSISTENCE_H_ */
diff --git a/core/model/modulator.cpp b/core/model/modulator.cpp
index 3a5d7f7..03804c2 100644
--- a/core/model/modulator.cpp
+++ b/core/model/modulator.cpp
@@ -29,9 +29,9 @@
 
 namespace dss {
 
-  //================================================== Modulator
+  //================================================== DSMeter
 
-  Modulator::Modulator(const dsid_t _dsid)
+  DSMeter::DSMeter(const dsid_t _dsid)
   : m_DSID(_dsid),
     m_BusID(0xFF),
     m_PowerConsumption(0),
@@ -40,38 +40,38 @@ namespace dss {
   {
   } // ctor
 
-  Set Modulator::getDevices() const {
+  Set DSMeter::getDevices() const {
     return m_ConnectedDevices;
   } // getDevices
 
-  void Modulator::addDevice(const DeviceReference& _device) {
+  void DSMeter::addDevice(const DeviceReference& _device) {
     if(!contains(m_ConnectedDevices, _device)) {
       m_ConnectedDevices.push_back(_device);
     } else {
-      Logger::getInstance()->log("Modulator::addDevice: DUPLICATE DEVICE Detected modulator: " + intToString(m_BusID) + " device: " + _device.getDSID().toString(), lsFatal);
+      Logger::getInstance()->log("DSMeter::addDevice: DUPLICATE DEVICE Detected dsMeter: " + intToString(m_BusID) + " device: " + _device.getDSID().toString(), lsFatal);
     }
   } // addDevice
 
-  void Modulator::removeDevice(const DeviceReference& _device) {
+  void DSMeter::removeDevice(const DeviceReference& _device) {
     DeviceIterator pos = find(m_ConnectedDevices.begin(), m_ConnectedDevices.end(), _device);
     if(pos != m_ConnectedDevices.end()) {
       m_ConnectedDevices.erase(pos);
     }
   } // removeDevice
 
-  dsid_t Modulator::getDSID() const {
+  dsid_t DSMeter::getDSID() const {
     return m_DSID;
   } // getDSID
 
-  int Modulator::getBusID() const {
+  int DSMeter::getBusID() const {
     return m_BusID;
   } // getBusID
 
-  void Modulator::setBusID(const int _busID) {
+  void DSMeter::setBusID(const int _busID) {
     m_BusID = _busID;
   } // setBusID
 
-  unsigned long Modulator::getPowerConsumption() {
+  unsigned long DSMeter::getPowerConsumption() {
     DateTime now;
     if(!now.addSeconds(-1).before(m_PowerConsumptionAge)) {
       m_PowerConsumption =  DSS::getInstance()->getDS485Interface().getPowerConsumption(m_BusID);
@@ -80,7 +80,7 @@ namespace dss {
     return m_PowerConsumption;
   } // getPowerConsumption
 
-  unsigned long Modulator::getEnergyMeterValue() {
+  unsigned long DSMeter::getEnergyMeterValue() {
     DateTime now;
     if(!now.addSeconds(-1).before(m_EnergyMeterValueAge)) {
       m_EnergyMeterValue = DSS::getInstance()->getDS485Interface().getEnergyMeterValue(m_BusID);
@@ -91,7 +91,7 @@ namespace dss {
 
 
   /** set the consumption in mW */
-  void Modulator::setPowerConsumption(unsigned long _value)
+  void DSMeter::setPowerConsumption(unsigned long _value)
   {
     DateTime now;
     m_PowerConsumptionAge = now;
@@ -99,18 +99,18 @@ namespace dss {
   }
 
   /** set the meter value in Wh */
-  void Modulator::setEnergyMeterValue(unsigned long _value)
+  void DSMeter::setEnergyMeterValue(unsigned long _value)
   {
     DateTime now;
     m_EnergyMeterValueAge = now;
     m_EnergyMeterValue = _value;
   }
 
-  unsigned long Modulator::getCachedPowerConsumption() {
+  unsigned long DSMeter::getCachedPowerConsumption() {
     return m_PowerConsumption;
   } // getPowerConsumption
 
-  unsigned long Modulator::getCachedEnergyMeterValue() {
+  unsigned long DSMeter::getCachedEnergyMeterValue() {
     return m_EnergyMeterValue;
   } // getEnergyMeterValue
 
diff --git a/core/model/modulator.h b/core/model/modulator.h
index c861135..96bd7fa 100644
--- a/core/model/modulator.h
+++ b/core/model/modulator.h
@@ -34,8 +34,8 @@
 
 namespace dss {
 
-  /** Represents a Modulator */
-  class Modulator : public DeviceContainer,
+  /** Represents a DSMeter */
+  class DSMeter : public DeviceContainer,
                     public PhysicalModelItem {
   private:
     dsid_t m_DSID;
@@ -53,19 +53,19 @@ namespace dss {
     int m_DeviceType;
     bool m_IsValid;
   public:
-    /** Constructs a modulator with the given dsid. */
-    Modulator(const dsid_t _dsid);
-    virtual ~Modulator() {};
+    /** Constructs a dsMeter with the given dsid. */
+    DSMeter(const dsid_t _dsid);
+    virtual ~DSMeter() {};
     virtual Set getDevices() const;
 
-    /** Returns the DSID of the Modulator */
+    /** Returns the DSID of the DSMeter */
     dsid_t getDSID() const;
-    /** Returns the bus id of the Modulator */
+    /** Returns the bus id of the DSMeter */
     int getBusID() const;
-    /** Sets the bus id of the Modulator */
+    /** Sets the bus id of the DSMeter */
     void setBusID(const int _busID);
 
-    /** Adds a DeviceReference to the modulators devices list */
+    /** Adds a DeviceReference to the dsMeters devices list */
     void addDevice(const DeviceReference& _device);
 
     /** Removes the device identified by the reference. */
@@ -92,10 +92,10 @@ namespace dss {
     /** Returns the red energy level */
     int getEnergyLevelRed() const { return m_EnergyLevelRed; }
     /** Sets the orange energy level.
-     * @note This has no effect on the modulator as of now. */
+     * @note This has no effect on the dsMeter as of now. */
     void setEnergyLevelRed(const int _value) { m_EnergyLevelRed = _value; }
     /** Sets the red energy level.
-     * @note This has no effect on the modulator as of now. */
+     * @note This has no effect on the dsMeter as of now. */
     void setEnergyLevelOrange(const int _value) { m_EnergyLevelOrange = _value; }
 
     int getHardwareVersion() const { return m_HardwareVersion; }
@@ -107,10 +107,10 @@ namespace dss {
     int getDeviceType() { return m_DeviceType; }
     void setDeviceType(const int _value) { m_DeviceType = _value; }
 
-    /** Returns true if the modulator has been read-out completely. */
+    /** Returns true if the dsMeter has been read-out completely. */
     bool isValid() const { return m_IsValid; }
     void setIsValid(const bool _value) { m_IsValid = _value; }
-  }; // Modulator
+  }; // DSMeter
 
   
 } // namespace dss
diff --git a/core/model/set.cpp b/core/model/set.cpp
index 5aa6366..43bf2c2 100644
--- a/core/model/set.cpp
+++ b/core/model/set.cpp
@@ -151,19 +151,19 @@ namespace dss {
     }
   } // getByZone(name)
 
-  Set Set::getByModulator(const int _modulatorID) const {
+  Set Set::getByDSMeter(const int _dsMeterID) const {
     Set result;
     foreach(const DeviceReference& dev, m_ContainedDevices) {
-      if(dev.getDevice().getModulatorID() == _modulatorID) {
+      if(dev.getDevice().getDSMeterID() == _dsMeterID) {
         result.addDevice(dev);
       }
     }
     return result;
-  } // getByModulator
+  } // getByDSMeter
 
-  Set Set::getByModulator(const Modulator& _modulator) const {
-    return getByModulator(_modulator.getBusID());
-  } // getByModulator
+  Set Set::getByDSMeter(const DSMeter& _dsMeter) const {
+    return getByDSMeter(_dsMeter.getBusID());
+  } // getByDSMeter
 
   Set Set::getByFunctionID(const int _functionID) const {
     Set result;
@@ -357,7 +357,7 @@ namespace dss {
       return result;
     }
   private:
-    typedef std::pair<std::vector<Group*>, Set> FittingResultPerModulator;
+    typedef std::pair<std::vector<Group*>, Set> FittingResultPerDSMeter;
     typedef std::map<const Zone*, Set> HashMapZoneSet;
     static const bool OptimizerDebug = false;
 
diff --git a/core/model/set.h b/core/model/set.h
index f58c9b8..ae70a15 100644
--- a/core/model/set.h
+++ b/core/model/set.h
@@ -30,7 +30,7 @@ namespace dss {
 
   class Device;
   class Group;
-  class Modulator;
+  class DSMeter;
   
   /** Abstract interface to select certain Devices from a set */
   class IDeviceSelector {
@@ -78,15 +78,15 @@ namespace dss {
      */
     Set getSubset(const IDeviceSelector& _selector) const;
     /** Returns a subset of the devices which are member of the given group
-    * Note that these groups could be spanned over multiple modulators.
+    * Note that these groups could be spanned over multiple dsMeters.
      */
     Set getByGroup(int _groupNr) const;
     /** Returns a subset of the devices which are member of the given group
-     * Note that these groups could be spanned over multiple modulators.
+     * Note that these groups could be spanned over multiple dsMeters.
      */
     Set getByGroup(const Group& _group) const;
     /** Returns a subset of the devices which are member of the given group
-     * Note that these groups could be spanned over multiple modulators.
+     * Note that these groups could be spanned over multiple dsMeters.
      */
     Set getByGroup(const std::string& _name) const;
 
@@ -99,10 +99,10 @@ namespace dss {
     /** Returns a subset that contains all devices belonging to Zone \a _zoneName */
     Set getByZone(const std::string& _zoneName) const;
 
-    /** Returns a subset that contains all devices belonging to Modulator \a _modulatorID */
-    Set getByModulator(const int _modulatorID) const;
-    /** Returns a subset that contains all devices belonging to Modulator \a _modulator */
-    Set getByModulator(const Modulator& _modulator) const;
+    /** Returns a subset that contains all devices belonging to DSMeter \a _dsMeterID */
+    Set getByDSMeter(const int _dsMeterID) const;
+    /** Returns a subset that contains all devices belonging to DSMeter \a _dsMeter */
+    Set getByDSMeter(const DSMeter& _dsMeter) const;
 
     /** Returns a subset that contains all devices that have the presence state of \a _present */
     Set getByPresence(const bool _present) const;
diff --git a/core/model/zone.cpp b/core/model/zone.cpp
index 39df0c7..3b37c52 100644
--- a/core/model/zone.cpp
+++ b/core/model/zone.cpp
@@ -38,8 +38,8 @@ namespace dss {
 
   Zone::~Zone() {
     scrubVector(m_Groups);
-    // we don't own our modulators
-    m_Modulators.clear();
+    // we don't own our dsMeters
+    m_DSMeters.clear();
   } // dtor
 
   Set Zone::getDevices() const {
@@ -118,29 +118,29 @@ namespace dss {
     m_ZoneID = _value;
   } // setZoneID
 
-  void Zone::addToModulator(const Modulator& _modulator) {
-    // make sure the zone is connected to the modulator
-    if(find(m_Modulators.begin(), m_Modulators.end(), &_modulator) == m_Modulators.end()) {
-      m_Modulators.push_back(&_modulator);
+  void Zone::addToDSMeter(const DSMeter& _dsMeter) {
+    // make sure the zone is connected to the dsMeter
+    if(find(m_DSMeters.begin(), m_DSMeters.end(), &_dsMeter) == m_DSMeters.end()) {
+      m_DSMeters.push_back(&_dsMeter);
     }
-  } // addToModulator
+  } // addToDSMeter
 
-  void Zone::removeFromModulator(const Modulator& _modulator) {
-    m_Modulators.erase(find(m_Modulators.begin(), m_Modulators.end(), &_modulator));
-  } // removeFromModulator
+  void Zone::removeFromDSMeter(const DSMeter& _dsMeter) {
+    m_DSMeters.erase(find(m_DSMeters.begin(), m_DSMeters.end(), &_dsMeter));
+  } // removeFromDSMeter
 
-  std::vector<int> Zone::getModulators() const {
+  std::vector<int> Zone::getDSMeters() const {
     std::vector<int> result;
-    for(std::vector<const Modulator*>::const_iterator iModulator = m_Modulators.begin(), e = m_Modulators.end();
-        iModulator != e; ++iModulator) {
-      result.push_back((*iModulator)->getBusID());
+    for(std::vector<const DSMeter*>::const_iterator iDSMeter = m_DSMeters.begin(), e = m_DSMeters.end();
+        iDSMeter != e; ++iDSMeter) {
+      result.push_back((*iDSMeter)->getBusID());
     }
     return result;
-  } // getModulators
+  } // getDSMeters
 
-  bool Zone::registeredOnModulator(const Modulator& _modulator) const {
-    return find(m_Modulators.begin(), m_Modulators.end(), &_modulator) != m_Modulators.end();
-  } // registeredOnModulator
+  bool Zone::registeredOnDSMeter(const DSMeter& _dsMeter) const {
+    return find(m_DSMeters.begin(), m_DSMeters.end(), &_dsMeter) != m_DSMeters.end();
+  } // registeredOnDSMeter
 
   unsigned long Zone::getPowerConsumption() {
     return getDevices().getPowerConsumption();
diff --git a/core/model/zone.h b/core/model/zone.h
index 2defd2b..dec913f 100644
--- a/core/model/zone.h
+++ b/core/model/zone.h
@@ -33,14 +33,14 @@
 #include "physicalmodelitem.h"
 
 namespace dss {
-  class Modulator;
+  class DSMeter;
   class Group;
   class UserGroup;
   class Set;
   class DeviceReference;
  
     /** Represents a Zone.
-   * A Zone houses multiple devices. It can span over multiple modulators.
+   * A Zone houses multiple devices. It can span over multiple dsMeters.
    */
   class Zone : public DeviceContainer,
                public NonAddressableModelItem,
@@ -49,21 +49,21 @@ namespace dss {
   private:
     int m_ZoneID;
     DeviceVector m_Devices;
-    std::vector<const Modulator*> m_Modulators;
+    std::vector<const DSMeter*> m_DSMeters;
     std::vector<Group*> m_Groups;
-    int m_FirstZoneOnModulator;
+    int m_FirstZoneOnDSMeter;
   public:
     Zone(const int _id)
     : m_ZoneID(_id),
-          m_FirstZoneOnModulator(-1)
+          m_FirstZoneOnDSMeter(-1)
     {}
     virtual ~Zone();
     virtual Set getDevices() const;
 
-    /** Adds the Zone to a modulator. */
-    void addToModulator(const Modulator& _modulator);
-    /** Removes the Zone from a modulator. */
-    void removeFromModulator(const Modulator& _modulator);
+    /** Adds the Zone to a dsMeter. */
+    void addToDSMeter(const DSMeter& _dsMeter);
+    /** Removes the Zone from a dsMeter. */
+    void removeFromDSMeter(const DSMeter& _dsMeter);
 
     /** Adds a device to the zone.
      * This will permanently add the device to the zone.
@@ -90,16 +90,16 @@ namespace dss {
     /** Sets the zones id */
     void setZoneID(const int _value);
 
-    /** Returns the ID of the modulator the zone is the first
+    /** Returns the ID of the dsMeter the zone is the first
       * zone on.
-      * @return The modulator id, or -1
+      * @return The dsMeter id, or -1
       */
-    int getFirstZoneOnModulator() { return m_FirstZoneOnModulator; }
-    void setFirstZoneOnModulator(const int _value) { m_FirstZoneOnModulator = _value; }
+    int getFirstZoneOnDSMeter() { return m_FirstZoneOnDSMeter; }
+    void setFirstZoneOnDSMeter(const int _value) { m_FirstZoneOnDSMeter = _value; }
 
-    /** Returns a list of the modulators the zone is registered with. */
-    std::vector<int> getModulators() const;
-    bool registeredOnModulator(const Modulator& _modulator) const;
+    /** Returns a list of the dsMeters the zone is registered with. */
+    std::vector<int> getDSMeters() const;
+    bool registeredOnDSMeter(const DSMeter& _dsMeter) const;
 
     virtual void nextScene();
     virtual void previousScene();
diff --git a/core/propertysystem.cpp b/core/propertysystem.cpp
index c3f9064..b780d4e 100644
--- a/core/propertysystem.cpp
+++ b/core/propertysystem.cpp
@@ -271,6 +271,22 @@ namespace dss {
     {
       (*it)->alias(PropertyNodePtr());
     }
+    if(m_LinkedToProxy) {
+      m_LinkedToProxy = false;
+      switch(m_PropVal.valueType) {
+      case vTypeInteger:
+        delete m_Proxy.intProxy;
+        break;
+      case vTypeString:
+        delete m_Proxy.stringProxy;
+        break;
+      case vTypeBoolean:
+        delete m_Proxy.boolProxy;
+        break;
+      case vTypeNone:
+        break;
+      }
+    }
     // remove from alias targets list
     if(m_Aliased) {
       m_Aliased = false;
diff --git a/core/scripting/modeljs.cpp b/core/scripting/modeljs.cpp
index 4349052..ffbb67a 100644
--- a/core/scripting/modeljs.cpp
+++ b/core/scripting/modeljs.cpp
@@ -319,7 +319,7 @@ namespace dss {
     if((ext != NULL) && (set != NULL) && (argc >= 1)) {
       try {
         int dsmeterID = ctx->convertTo<int>(argv[0]);
-        Set result = set->getByModulator(dsmeterID);
+        Set result = set->getByDSMeter(dsmeterID);
         JSObject* resultObj = ext->createJSSet(*ctx, result);
         *rval = OBJECT_TO_JSVAL(resultObj);
         return JS_TRUE;
@@ -700,7 +700,7 @@ namespace dss {
           *rval = INT_TO_JSVAL(dev->getDevice().getZoneID());
           return JS_TRUE;
         case 4:
-          *rval = INT_TO_JSVAL(dev->getDevice().getModulatorID());
+          *rval = INT_TO_JSVAL(dev->getDevice().getDSMeterID());
           return JS_TRUE;
         case 5:
           *rval = INT_TO_JSVAL(dev->getDevice().getFunctionID());
diff --git a/core/sim/dsid_js.cpp b/core/sim/dsid_js.cpp
index 75b81d0..c68eee7 100644
--- a/core/sim/dsid_js.cpp
+++ b/core/sim/dsid_js.cpp
@@ -30,7 +30,7 @@ namespace dss {
 
   class DSIDJS : public DSIDInterface {
   public:
-    DSIDJS(const DSModulatorSim& _simulator, dsid_t _dsid,
+    DSIDJS(const DSDSMeterSim& _simulator, dsid_t _dsid,
            devid_t _shortAddress, boost::shared_ptr<ScriptContext> _pContext,
            const std::string& _fileName)
     : DSIDInterface(_simulator, _dsid, _shortAddress),
@@ -354,9 +354,9 @@ namespace dss {
     m_pScriptEnvironment->addExtension(new DSIDScriptExtension(m_Simulator));
   } // ctor
 
-  DSIDInterface* DSIDJSCreator::createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) {
+  DSIDInterface* DSIDJSCreator::createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) {
     boost::shared_ptr<ScriptContext> pContext(m_pScriptEnvironment->getContext());
-    DSIDJS* result = new DSIDJS(_modulator, _dsid, _shortAddress, pContext, m_FileName);
+    DSIDJS* result = new DSIDJS(_dsMeter, _dsid, _shortAddress, pContext, m_FileName);
     return result;
   } // createDSID
 
diff --git a/core/sim/dsid_js.h b/core/sim/dsid_js.h
index 483f75f..e73ae52 100644
--- a/core/sim/dsid_js.h
+++ b/core/sim/dsid_js.h
@@ -35,7 +35,7 @@ namespace dss {
   class DSIDJSCreator : public DSIDCreator {
   public:
     DSIDJSCreator(const std::string& _fileName, const std::string& _pluginName, DSSim& _simulator);
-    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator);
+    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter);
   private:
     boost::scoped_ptr<ScriptEnvironment> m_pScriptEnvironment;
     std::string m_FileName;
diff --git a/core/sim/dsid_plugin.cpp b/core/sim/dsid_plugin.cpp
index 4b35771..cacba42 100644
--- a/core/sim/dsid_plugin.cpp
+++ b/core/sim/dsid_plugin.cpp
@@ -36,7 +36,7 @@ namespace dss {
     const int m_Handle;
     struct dsid_interface* m_Interface;
   public:
-    DSIDPlugin(const DSModulatorSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress, void* _soHandle, const int _handle)
+    DSIDPlugin(const DSDSMeterSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress, void* _soHandle, const int _handle)
     : DSIDInterface(_simulator, _dsid, _shortAddress),
       m_SOHandle(_soHandle),
       m_Handle(_handle)
@@ -179,9 +179,9 @@ namespace dss {
     }
   } // ctor
 
-  DSIDInterface* DSIDPluginCreator::createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) {
+  DSIDInterface* DSIDPluginCreator::createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) {
     int handle = (*createInstance)();
-    return new DSIDPlugin(_modulator, _dsid, _shortAddress, m_SOHandle, handle);
+    return new DSIDPlugin(_dsMeter, _dsid, _shortAddress, m_SOHandle, handle);
   } // createDSID
 
 } // namespace dss
diff --git a/core/sim/dsid_plugin.h b/core/sim/dsid_plugin.h
index bbca27d..f9e7ab0 100644
--- a/core/sim/dsid_plugin.h
+++ b/core/sim/dsid_plugin.h
@@ -34,7 +34,7 @@ namespace dss {
   public:
     DSIDPluginCreator(void* _soHandle, const char* _pluginName);
 
-    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator);
+    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter);
   }; // DSIDPluginCreator
 
 } // namespace dss
diff --git a/core/sim/dsidsim.cpp b/core/sim/dsidsim.cpp
index 63f05c4..a6b824d 100644
--- a/core/sim/dsidsim.cpp
+++ b/core/sim/dsidsim.cpp
@@ -25,7 +25,7 @@
 namespace dss {
   //================================================== DSIDSim
 
-  DSIDSim::DSIDSim(const DSModulatorSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress)
+  DSIDSim::DSIDSim(const DSDSMeterSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress)
   : DSIDInterface(_simulator, _dsid, _shortAddress),
     m_Enabled(true),
     m_CurrentValue(0),
diff --git a/core/sim/dsidsim.h b/core/sim/dsidsim.h
index b95a8a1..a89ede0 100644
--- a/core/sim/dsidsim.h
+++ b/core/sim/dsidsim.h
@@ -37,14 +37,14 @@ namespace dss {
     time_t m_DimmStartTime;
     bool m_DimmingUp;
     std::vector<int> m_Parameters;
-    DSModulatorSim* m_Modulator;
+    DSDSMeterSim* m_DSMeter;
     std::vector<uint8_t> m_ValuesForScene;
     uint8_t m_CurrentValue;
     int m_DimTimeMS;
     int m_SimpleConsumption;
     Properties m_ConfigParameter;
   public:
-    DSIDSim(const DSModulatorSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress);
+    DSIDSim(const DSDSMeterSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress);
     virtual ~DSIDSim() {}
 
     virtual void callScene(const int _sceneNr);
@@ -78,7 +78,7 @@ namespace dss {
     int m_DefaultColor;
     bool m_IsBell;
   public:
-    DSIDSimSwitch(const DSModulatorSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress, const int _numButtons)
+    DSIDSimSwitch(const DSDSMeterSim& _simulator, const dsid_t _dsid, const devid_t _shortAddress, const int _numButtons)
     : DSIDSim(_simulator, _dsid, _shortAddress),
       m_NumberOfButtons(_numButtons),
       m_DefaultColor(GroupIDYellow),
diff --git a/core/sim/dssim.cpp b/core/sim/dssim.cpp
index f8ba649..bdb0103 100644
--- a/core/sim/dssim.cpp
+++ b/core/sim/dssim.cpp
@@ -76,8 +76,8 @@ namespace dss {
 
     virtual ~DSIDSimCreator() {};
 
-    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) {
-      return new DSIDSim(_modulator, _dsid, _shortAddress);
+    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) {
+      return new DSIDSim(_dsMeter, _dsid, _shortAddress);
     }
   };
 
@@ -91,8 +91,8 @@ namespace dss {
 
     virtual ~DSIDSimSwitchCreator() {};
 
-    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) {
-      return new DSIDSimSwitch(_modulator, _dsid, _shortAddress, 9);
+    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) {
+      return new DSIDSimSwitch(_dsMeter, _dsid, _shortAddress, 9);
     }
   };
 
@@ -154,14 +154,14 @@ namespace dss {
         if(rootNode->hasAttribute("version") && (strToInt(rootNode->getAttribute("version")) == theConfigFileVersion)) {
           Node* curNode = rootNode->firstChild();
           while(curNode != NULL) {
-            if(curNode->localName() == "modulator") {
-              DSModulatorSim* modulator = NULL;
+            if(curNode->localName() == "dsMeter") {
+              DSDSMeterSim* dsMeter = NULL;
               try {
-                modulator = new DSModulatorSim(this);
-                modulator->initializeFromNode(curNode);
-                m_Modulators.push_back(modulator);
+                dsMeter = new DSDSMeterSim(this);
+                dsMeter->initializeFromNode(curNode);
+                m_DSMeters.push_back(dsMeter);
               } catch(std::runtime_error&) {
-                delete modulator;
+                delete dsMeter;
               }
             }
             curNode = curNode->nextSibling();
@@ -236,8 +236,8 @@ namespace dss {
   } // ready
 
   bool DSSim::isSimAddress(const uint8_t _address) {
-    foreach(DSModulatorSim& modulator, m_Modulators) {
-      if(modulator.getID() == _address) {
+    foreach(DSDSMeterSim& dsMeter, m_DSMeters) {
+      if(dsMeter.getID() == _address) {
         return true;
       }
     }
@@ -245,8 +245,8 @@ namespace dss {
   } // isSimAddress
 
   void DSSim::process(DS485Frame& _frame) {
-    foreach(DSModulatorSim& modulator, m_Modulators) {
-      modulator.process(_frame);
+    foreach(DSDSMeterSim& dsMeter, m_DSMeters) {
+      dsMeter.process(_frame);
     }
   } // process
 
@@ -256,8 +256,8 @@ namespace dss {
 
   DSIDInterface* DSSim::getSimulatedDevice(const dsid_t& _dsid) {
     DSIDInterface* result = NULL;
-    foreach(DSModulatorSim& modulator, m_Modulators) {
-      result = modulator.getSimulatedDevice(_dsid);
+    foreach(DSDSMeterSim& dsMeter, m_DSMeters) {
+      result = dsMeter.getSimulatedDevice(_dsid);
       if(result != NULL) {
         break;
       }
@@ -266,23 +266,23 @@ namespace dss {
   } // getSimulatedDevice
 
 
-  //================================================== DSModulatorSim
+  //================================================== DSDSMeterSim
 
-  DSModulatorSim::DSModulatorSim(DSSim* _pSimulation)
+  DSDSMeterSim::DSDSMeterSim(DSSim* _pSimulation)
   : m_pSimulation(_pSimulation),
     m_EnergyLevelOrange(200),
     m_EnergyLevelRed(400)
   {
-    m_ModulatorDSID = dsid_t(DSIDHeader, SimulationPrefix);
+    m_DSMeterDSID = dsid_t(DSIDHeader, SimulationPrefix);
     m_ID = 70;
     m_Name = "Simulated dSM";
-  } // dSModulatorSim
+  } // dSDSMeterSim
 
-  void DSModulatorSim::log(const std::string& _message, aLogSeverity _severity) {
+  void DSDSMeterSim::log(const std::string& _message, aLogSeverity _severity) {
     m_pSimulation->log(_message, _severity);
   } // log
 
-  bool DSModulatorSim::initializeFromNode(Node* _node) {
+  bool DSDSMeterSim::initializeFromNode(Node* _node) {
     Element* elem = dynamic_cast<Element*>(_node);
     if(elem == NULL) {
       return false;
@@ -291,9 +291,9 @@ namespace dss {
       m_ID = strToIntDef(elem->getAttribute("busid"), 70);
     }
     if(elem->hasAttribute("dsid")) {
-      m_ModulatorDSID = dsid_t::fromString(elem->getAttribute("dsid"));
-      m_ModulatorDSID.upper = (m_ModulatorDSID.upper & 0x000000000000000Fll) | DSIDHeader;
-      m_ModulatorDSID.lower = (m_ModulatorDSID.lower & 0x002FFFFF) | SimulationPrefix;
+      m_DSMeterDSID = dsid_t::fromString(elem->getAttribute("dsid"));
+      m_DSMeterDSID.upper = (m_DSMeterDSID.upper & 0x000000000000000Fll) | DSIDHeader;
+      m_DSMeterDSID.lower = (m_DSMeterDSID.lower & 0x002FFFFF) | SimulationPrefix;
     }
     if(elem->hasAttribute("orange")) {
       m_EnergyLevelOrange = strToIntDef(elem->getAttribute("orange"), m_EnergyLevelOrange);
@@ -312,7 +312,7 @@ namespace dss {
     return true;
   } // initializeFromNode
 
-  void DSModulatorSim::loadDevices(Node* _node, const int _zoneID) {
+  void DSDSMeterSim::loadDevices(Node* _node, const int _zoneID) {
     Node* curNode = _node->firstChild();
     while(curNode != NULL) {
       Element* elem = dynamic_cast<Element*>(curNode);
@@ -383,7 +383,7 @@ namespace dss {
     }
   } // loadDevices
 
-  void DSModulatorSim::loadGroups(Node* _node, const int _zoneID) {
+  void DSDSMeterSim::loadGroups(Node* _node, const int _zoneID) {
     Node* curNode = _node->firstChild();
     while(curNode != NULL) {
       if(curNode->localName() == "group") {
@@ -413,12 +413,12 @@ namespace dss {
     }
   } // loadGroups
 
-  void DSModulatorSim::addDeviceToGroup(DSIDInterface* _device, int _groupID) {
+  void DSDSMeterSim::addDeviceToGroup(DSIDInterface* _device, int _groupID) {
     m_DevicesOfGroupInZone[std::pair<const int, const int>(_device->getZoneID(), _groupID)].push_back(_device);
     m_GroupsPerDevice[_device->getShortAddress()].push_back(_groupID);
   } // addDeviceToGroup
 
-  void DSModulatorSim::loadZones(Node* _node) {
+  void DSDSMeterSim::loadZones(Node* _node) {
     Node* curNode = _node->firstChild();
     while(curNode != NULL) {
       if(curNode->localName() == "zone") {
@@ -439,11 +439,11 @@ namespace dss {
     }
   } // loadZones
 
-  void DSModulatorSim::deviceCallScene(int _deviceID, const int _sceneID) {
+  void DSDSMeterSim::deviceCallScene(int _deviceID, const int _sceneID) {
     lookupDevice(_deviceID).callScene(_sceneID);
   } // deviceCallScene
 
-  void DSModulatorSim::groupCallScene(const int _zoneID, const int _groupID, const int _sceneID) {
+  void DSDSMeterSim::groupCallScene(const int _zoneID, const int _groupID, const int _sceneID) {
     std::vector<DSIDInterface*> dsids;
     m_LastCalledSceneForZoneAndGroup[std::make_pair(_zoneID, _groupID)] = _sceneID;
     if(_groupID == GroupIDBroadcast) {
@@ -465,11 +465,11 @@ namespace dss {
     }
   } // groupCallScene
 
-  void DSModulatorSim::deviceSaveScene(int _deviceID, const int _sceneID) {
+  void DSDSMeterSim::deviceSaveScene(int _deviceID, const int _sceneID) {
     lookupDevice(_deviceID).saveScene(_sceneID);
   } // deviceSaveScene
 
-  void DSModulatorSim::groupSaveScene(const int _zoneID, const int _groupID, const int _sceneID) {
+  void DSDSMeterSim::groupSaveScene(const int _zoneID, const int _groupID, const int _sceneID) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -481,11 +481,11 @@ namespace dss {
     }
   } // groupSaveScene
 
-  void DSModulatorSim::deviceUndoScene(int _deviceID, const int _sceneID) {
+  void DSDSMeterSim::deviceUndoScene(int _deviceID, const int _sceneID) {
     lookupDevice(_deviceID).undoScene(_sceneID);
   } // deviceUndoScene
 
-  void DSModulatorSim::groupUndoScene(const int _zoneID, const int _groupID, const int _sceneID) {
+  void DSDSMeterSim::groupUndoScene(const int _zoneID, const int _groupID, const int _sceneID) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -497,7 +497,7 @@ namespace dss {
     }
   } // groupUndoScene
 
-  void DSModulatorSim::groupStartDim(const int _zoneID, const int _groupID, bool _up, int _parameterNr) {
+  void DSDSMeterSim::groupStartDim(const int _zoneID, const int _groupID, bool _up, int _parameterNr) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -509,7 +509,7 @@ namespace dss {
     }
   } // groupStartDim
 
-  void DSModulatorSim::groupEndDim(const int _zoneID, const int _groupID, const int _parameterNr) {
+  void DSDSMeterSim::groupEndDim(const int _zoneID, const int _groupID, const int _parameterNr) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -521,7 +521,7 @@ namespace dss {
     }
   } // groupEndDim
 
-  void DSModulatorSim::groupDecValue(const int _zoneID, const int _groupID, const int _parameterNr) {
+  void DSDSMeterSim::groupDecValue(const int _zoneID, const int _groupID, const int _parameterNr) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -533,7 +533,7 @@ namespace dss {
     }
   } // groupDecValue
 
-  void DSModulatorSim::groupIncValue(const int _zoneID, const int _groupID, const int _parameterNr) {
+  void DSDSMeterSim::groupIncValue(const int _zoneID, const int _groupID, const int _parameterNr) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -545,7 +545,7 @@ namespace dss {
     }
   } // groupIncValue
 
-  void DSModulatorSim::groupSetValue(const int _zoneID, const int _groupID, const int _value) {
+  void DSDSMeterSim::groupSetValue(const int _zoneID, const int _groupID, const int _value) {
     std::pair<const int, const int> zonesGroup(_zoneID, _groupID);
     if(m_DevicesOfGroupInZone.find(zonesGroup) != m_DevicesOfGroupInZone.end()) {
       std::vector<DSIDInterface*> dsids = m_DevicesOfGroupInZone[zonesGroup];
@@ -557,7 +557,7 @@ namespace dss {
     }
   } // groupSetValue
 
-  void DSModulatorSim::process(DS485Frame& _frame) {
+  void DSDSMeterSim::process(DS485Frame& _frame) {
     const uint8_t HeaderTypeToken = 0;
     const uint8_t HeaderTypeCommand = 1;
 
@@ -708,14 +708,14 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetZonesSize:
+            case FunctionDSMeterGetZonesSize:
               {
                 response = createResponse(cmdFrame, cmdNr);
                 response->getPayload().add<uint16_t>(m_Zones.size());
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetZoneIdForInd:
+            case FunctionDSMeterGetZoneIdForInd:
               {
                 uint8_t index = pd.get<uint16_t>();
                 std::map< const int, std::vector<DSIDInterface*> >::iterator it = m_Zones.begin();
@@ -725,7 +725,7 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorCountDevInZone:
+            case FunctionDSMeterCountDevInZone:
               {
                 uint16_t index = pd.get<uint16_t>();
                 response = createResponse(cmdFrame, cmdNr);
@@ -733,7 +733,7 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorDevKeyInZone:
+            case FunctionDSMeterDevKeyInZone:
               {
                 uint16_t zoneID = pd.get<uint16_t>();
                 uint16_t deviceIndex = pd.get<devid_t>();
@@ -742,7 +742,7 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetGroupsSize:
+            case FunctionDSMeterGetGroupsSize:
               {
                 response = createResponse(cmdFrame, cmdNr);
                 int zoneID = pd.get<uint16_t>();
@@ -759,10 +759,10 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetDSID:
+            case FunctionDSMeterGetDSID:
               {
                 response = createResponse(cmdFrame, cmdNr);
-                response->getPayload().add<dsid_t>(m_ModulatorDSID);
+                response->getPayload().add<dsid_t>(m_DSMeterDSID);
                 distributeFrame(response);
               }
               break;
@@ -896,7 +896,7 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetPowerConsumption:
+            case FunctionDSMeterGetPowerConsumption:
               {
                 response = createResponse(cmdFrame, cmdNr);
                 uint32_t val = 0;
@@ -907,14 +907,14 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetEnergyMeterValue:
+            case FunctionDSMeterGetEnergyMeterValue:
               {
                 response = createResponse(cmdFrame, cmdNr);
                 response->getPayload().add<uint32_t>(0);
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorAddZone:
+            case FunctionDSMeterAddZone:
               {
                 uint16_t zoneID = pd.get<uint16_t>();
                 response = createResponse(cmdFrame, cmdNr);
@@ -952,7 +952,7 @@ namespace dss {
                 distributeFrame(response);
               }
               break;
-            case FunctionModulatorGetEnergyLevel:
+            case FunctionDSMeterGetEnergyLevel:
               {
                 response = createResponse(cmdFrame, cmdNr);
                 response->getPayload().add<uint16_t>(m_EnergyLevelOrange);
@@ -986,15 +986,15 @@ namespace dss {
         }
       }
     } catch(std::runtime_error& e) {
-      Logger::getInstance()->log(std::string("DSModulatorSim: Exeption while processing packet. Message: '") + e.what() + "'");
+      Logger::getInstance()->log(std::string("DSDSMeterSim: Exeption while processing packet. Message: '") + e.what() + "'");
     }
   } // process
 
-  void DSModulatorSim::distributeFrame(boost::shared_ptr<DS485CommandFrame> _frame) const {
+  void DSDSMeterSim::distributeFrame(boost::shared_ptr<DS485CommandFrame> _frame) const {
     m_pSimulation->distributeFrame(_frame);
   } // distributeFrame
 
-  void DSModulatorSim::dSLinkInterrupt(devid_t _shortAddress) const {
+  void DSDSMeterSim::dSLinkInterrupt(devid_t _shortAddress) const {
     boost::shared_ptr<DS485CommandFrame> result(new DS485CommandFrame());
     result->getHeader().setDestination(0);
     result->getHeader().setSource(m_ID);
@@ -1007,7 +1007,7 @@ namespace dss {
     distributeFrame(result);
   } // dSLinkInterrupt
 
-  boost::shared_ptr<DS485CommandFrame> DSModulatorSim::createReply(DS485CommandFrame& _request) const {
+  boost::shared_ptr<DS485CommandFrame> DSDSMeterSim::createReply(DS485CommandFrame& _request) const {
     boost::shared_ptr<DS485CommandFrame> result(new DS485CommandFrame());
     result->getHeader().setDestination(_request.getHeader().getSource());
     result->getHeader().setSource(m_ID);
@@ -1016,21 +1016,21 @@ namespace dss {
     return result;
   } // createReply
 
-  boost::shared_ptr<DS485CommandFrame> DSModulatorSim::createAck(DS485CommandFrame& _request, uint8_t _functionID) const {
+  boost::shared_ptr<DS485CommandFrame> DSDSMeterSim::createAck(DS485CommandFrame& _request, uint8_t _functionID) const {
     boost::shared_ptr<DS485CommandFrame> result = createReply(_request);
     result->setCommand(CommandAck);
     result->getPayload().add(_functionID);
     return result;
   } // createAck
 
-  boost::shared_ptr<DS485CommandFrame> DSModulatorSim::createResponse(DS485CommandFrame& _request, uint8_t _functionID) const {
+  boost::shared_ptr<DS485CommandFrame> DSDSMeterSim::createResponse(DS485CommandFrame& _request, uint8_t _functionID) const {
     boost::shared_ptr<DS485CommandFrame> result = createReply(_request);
     result->setCommand(CommandResponse);
     result->getPayload().add(_functionID);
     return result;
   } // createResponse
 
-  DSIDInterface& DSModulatorSim::lookupDevice(const devid_t _shortAddress) {
+  DSIDInterface& DSDSMeterSim::lookupDevice(const devid_t _shortAddress) {
     for(std::vector<DSIDInterface*>::iterator ipSimDev = m_SimulatedDevices.begin(); ipSimDev != m_SimulatedDevices.end(); ++ipSimDev) {
       if((*ipSimDev)->getShortAddress() == _shortAddress)  {
         return **ipSimDev;
@@ -1039,11 +1039,11 @@ namespace dss {
     throw std::runtime_error(std::string("could not find device with id: ") + intToString(_shortAddress));
   } // lookupDevice
 
-  int DSModulatorSim::getID() const {
+  int DSDSMeterSim::getID() const {
     return m_ID;
   } // getID
 
-  DSIDInterface* DSModulatorSim::getSimulatedDevice(const dsid_t _dsid) {
+  DSIDInterface* DSDSMeterSim::getSimulatedDevice(const dsid_t _dsid) {
     for(std::vector<DSIDInterface*>::iterator iDSID = m_SimulatedDevices.begin(), e = m_SimulatedDevices.end();
         iDSID != e; ++iDSID)
     {
@@ -1064,13 +1064,13 @@ namespace dss {
 
   //================================================== DSIDFactory
 
-  DSIDInterface* DSIDFactory::createDSID(const std::string& _identifier, const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) {
+  DSIDInterface* DSIDFactory::createDSID(const std::string& _identifier, const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) {
     boost::ptr_vector<DSIDCreator>::iterator
     iCreator = m_RegisteredCreators.begin(),
     e = m_RegisteredCreators.end();
     while(iCreator != e) {
       if(iCreator->getIdentifier() == _identifier) {
-        return iCreator->createDSID(_dsid, _shortAddress, _modulator);
+        return iCreator->createDSID(_dsid, _shortAddress, _dsMeter);
       }
       ++iCreator;
     }
diff --git a/core/sim/dssim.h b/core/sim/dssim.h
index bbd0758..a5268f7 100644
--- a/core/sim/dssim.h
+++ b/core/sim/dssim.h
@@ -42,7 +42,7 @@ namespace Poco {
 namespace dss {
   class DS485Frame;
   class DSIDInterface;
-  class DSModulatorSim;
+  class DSDSMeterSim;
 
   class DSIDCreator {
   private:
@@ -52,14 +52,14 @@ namespace dss {
     virtual ~DSIDCreator() {};
 
     const std::string& getIdentifier() const { return m_Identifier; }
-    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator) = 0;
+    virtual DSIDInterface* createDSID(const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter) = 0;
   };
 
   class DSIDFactory {
   private:
     boost::ptr_vector<DSIDCreator> m_RegisteredCreators;
   public:
-    DSIDInterface* createDSID(const std::string& _identifier, const dsid_t _dsid, const devid_t _shortAddress, const DSModulatorSim& _modulator);
+    DSIDInterface* createDSID(const std::string& _identifier, const dsid_t _dsid, const devid_t _shortAddress, const DSDSMeterSim& _dsMeter);
 
     void registerCreator(DSIDCreator* _creator);
   };
@@ -69,7 +69,7 @@ namespace dss {
   private:
     DSIDFactory m_DSIDFactory;
     bool m_Initialized;
-    boost::ptr_vector<DSModulatorSim> m_Modulators;
+    boost::ptr_vector<DSDSMeterSim> m_DSMeters;
   private:
     void loadPlugins();
 
@@ -94,13 +94,13 @@ namespace dss {
 
   typedef std::map< const std::pair<const int, const int>,  std::vector<DSIDInterface*> > IntPairToDSIDSimVector;
 
-  class DSModulatorSim {
+  class DSDSMeterSim {
   private:
     DSSim* m_pSimulation;
     int m_EnergyLevelOrange;
     int m_EnergyLevelRed;
     int m_ID;
-    dsid_t m_ModulatorDSID;
+    dsid_t m_DSMeterDSID;
     std::vector<DSIDInterface*> m_SimulatedDevices;
     std::map< const int, std::vector<DSIDInterface*> > m_Zones;
     IntPairToDSIDSimVector m_DevicesOfGroupInZone;
@@ -139,8 +139,8 @@ namespace dss {
     virtual void doStart() {}
     void log(const std::string& _message, aLogSeverity _severity = lsDebug);
   public:
-    DSModulatorSim(DSSim* _pSimulator);
-    virtual ~DSModulatorSim() {}
+    DSDSMeterSim(DSSim* _pSimulator);
+    virtual ~DSDSMeterSim() {}
 
     bool initializeFromNode(Poco::XML::Node* _node);
 
@@ -150,16 +150,16 @@ namespace dss {
 
     DSIDInterface* getSimulatedDevice(const dsid_t _dsid);
     void dSLinkInterrupt(devid_t _shortAddress) const;
-  }; // DSModulatorSim
+  }; // DSDSMeterSim
 
   class DSIDInterface {
   private:
     dsid_t m_DSID;
     devid_t m_ShortAddress;
-    const DSModulatorSim& m_Simulator;
+    const DSDSMeterSim& m_Simulator;
     int m_ZoneID;
   public:
-    DSIDInterface(const DSModulatorSim& _simulator, dsid_t _dsid, devid_t _shortAddress)
+    DSIDInterface(const DSDSMeterSim& _simulator, dsid_t _dsid, devid_t _shortAddress)
     : m_DSID(_dsid), m_ShortAddress(_shortAddress), m_Simulator(_simulator) {}
 
     virtual ~DSIDInterface() {}
@@ -204,7 +204,7 @@ namespace dss {
       return 0;
     }
 
-    /** Signals the modulator that a interrupt has occurred */
+    /** Signals the dsMeter that a interrupt has occurred */
     void dSLinkInterrupt() {
       m_Simulator.dSLinkInterrupt(m_ShortAddress);
     }
diff --git a/core/structuremanipulator.cpp b/core/structuremanipulator.cpp
index 6386f72..b30d575 100644
--- a/core/structuremanipulator.cpp
+++ b/core/structuremanipulator.cpp
@@ -34,13 +34,13 @@
 
 namespace dss {
 
-  void StructureManipulator::createZone(Modulator& _modulator, Zone& _zone) {
+  void StructureManipulator::createZone(DSMeter& _dsMeter, Zone& _zone) {
     AssertLocked apartmentLocked(&m_Apartment);
-    if(!_modulator.isPresent()) {
-      throw std::runtime_error("Need modulator to be present");
+    if(!_dsMeter.isPresent()) {
+      throw std::runtime_error("Need dsMeter to be present");
     }
-    m_Interface.createZone(_modulator.getBusID(), _zone.getID());
-    _zone.addToModulator(_modulator);
+    m_Interface.createZone(_dsMeter.getBusID(), _zone.getID());
+    _zone.addToDSMeter(_dsMeter);
     _zone.setIsPresent(true);
   } // createZone
 
@@ -50,38 +50,38 @@ namespace dss {
       throw std::runtime_error("Need device to be present");
     }
     int oldZoneID = _device.getZoneID();
-    Modulator& targetModulator = m_Apartment.getModulatorByBusID(_device.getModulatorID());
-    if(!_zone.registeredOnModulator(targetModulator)) {
-      createZone(targetModulator, _zone);
+    DSMeter& targetDSMeter = m_Apartment.getDSMeterByBusID(_device.getDSMeterID());
+    if(!_zone.registeredOnDSMeter(targetDSMeter)) {
+      createZone(targetDSMeter, _zone);
     }
-    m_Interface.setZoneID(targetModulator.getBusID(), _device.getShortAddress(), _zone.getID());
+    m_Interface.setZoneID(targetDSMeter.getBusID(), _device.getShortAddress(), _zone.getID());
     _device.setZoneID(_zone.getID());
     DeviceReference ref(_device, &m_Apartment);
     _zone.addDevice(ref);
 
-    // check if we can remove the zone from the modulator
+    // check if we can remove the zone from the dsMeter
     if(oldZoneID != 0) {
       Zone& oldZone = m_Apartment.getZone(oldZoneID);
       oldZone.removeDevice(ref);
 
-      Set presentDevicesInZoneOfModulator = oldZone.getDevices().getByModulator(targetModulator).getByPresence(true);
-      if(presentDevicesInZoneOfModulator.length() == 0) {
-        removeZoneOnModulator(oldZone, targetModulator);
+      Set presentDevicesInZoneOfDSMeter = oldZone.getDevices().getByDSMeter(targetDSMeter).getByPresence(true);
+      if(presentDevicesInZoneOfDSMeter.length() == 0) {
+        removeZoneOnDSMeter(oldZone, targetDSMeter);
       }
     }
   } // addDeviceToZone
 
-  void StructureManipulator::removeZoneOnModulator(Zone& _zone, Modulator& _modulator) {
+  void StructureManipulator::removeZoneOnDSMeter(Zone& _zone, DSMeter& _dsMeter) {
     AssertLocked apartmentLocked(&m_Apartment);
-    Set presentDevicesInZoneOfModulator = _zone.getDevices().getByModulator(_modulator).getByPresence(true);
-    if(presentDevicesInZoneOfModulator.length() != 0) {
+    Set presentDevicesInZoneOfDSMeter = _zone.getDevices().getByDSMeter(_dsMeter).getByPresence(true);
+    if(presentDevicesInZoneOfDSMeter.length() != 0) {
       throw std::runtime_error("cannot delete zone if there are still devices present");
     }
-    m_Interface.removeZone(_modulator.getBusID(), _zone.getID());
-    _zone.removeFromModulator(_modulator);
-    if(_zone.getModulators().empty()) {
+    m_Interface.removeZone(_dsMeter.getBusID(), _zone.getID());
+    _zone.removeFromDSMeter(_dsMeter);
+    if(_zone.getDSMeters().empty()) {
       _zone.setIsPresent(false);
     }
-  } // removeZoneOnModulator
+  } // removeZoneOnDSMeter
 
 } // namespace dss
diff --git a/core/structuremanipulator.h b/core/structuremanipulator.h
index 8ee4a2c..3315595 100644
--- a/core/structuremanipulator.h
+++ b/core/structuremanipulator.h
@@ -27,7 +27,7 @@ namespace dss {
 
   class Apartment;
   class DS485Interface;
-  class Modulator;
+  class DSMeter;
   class Device;
   class Zone;
 
@@ -40,9 +40,9 @@ namespace dss {
     : m_Apartment(_apartment), m_Interface(_interface)
     { } // ctor
 
-    void createZone(Modulator& _modulator, Zone& _zone);
+    void createZone(DSMeter& _dsMeter, Zone& _zone);
     void addDeviceToZone(Device& _device, Zone& _zone);
-    void removeZoneOnModulator(Zone& _zone, Modulator& _modulator);
+    void removeZoneOnDSMeter(Zone& _zone, DSMeter& _dsMeter);
   }; // StructureManipulator
 
 
diff --git a/core/web/webrequests.cpp b/core/web/webrequests.cpp
index e835cfc..3d9be8b 100644
--- a/core/web/webrequests.cpp
+++ b/core/web/webrequests.cpp
@@ -107,7 +107,7 @@ namespace dss {
             << ", \"isSwitch\": " << ToJSONValue(_device.hasSwitch())
             << ", \"name\": " << ToJSONValue(_device.getDevice().getName())
             << ", \"fid\": " << ToJSONValue(_device.getDevice().getFunctionID())
-            << ", \"circuitID\":" << ToJSONValue(_device.getDevice().getModulatorID())
+            << ", \"circuitID\":" << ToJSONValue(_device.getDevice().getDSMeterID())
             << ", \"busID\":"  << ToJSONValue(_device.getDevice().getShortAddress())
             << ", \"isPresent\":"  << ToJSONValue(_device.getDevice().isPresent())
             << ", \"lastDiscovered\":"  << ToJSONValue(int(_device.getDevice().getLastDiscovered().secondsSinceEpoch()))
@@ -162,9 +162,9 @@ namespace dss {
     }
     sstream << ToJSONValue("name") << ": " << ToJSONValue(name) << ", ";
     sstream << ToJSONValue("isPresent") << ": " << ToJSONValue(_zone.isPresent());
-    if(_zone.getFirstZoneOnModulator() != -1) {
-      sstream << ", " << ToJSONValue("firstZoneOnModulator")
-              << ": " << ToJSONValue(_zone.getFirstZoneOnModulator());
+    if(_zone.getFirstZoneOnDSMeter() != -1) {
+      sstream << ", " << ToJSONValue("firstZoneOnDSMeter")
+              << ": " << ToJSONValue(_zone.getFirstZoneOnDSMeter());
     }
 
     if(_includeDevices) {
@@ -316,17 +316,17 @@ namespace dss {
   } // handleRequest
 
   bool DeviceInterfaceRequestHandler::isDeviceInterfaceCall(const RestfulRequest& _request) {
-    return endsWith(_request.getMethod(), "turnOn")
-        || endsWith(_request.getMethod(), "turnOff")
-        || endsWith(_request.getMethod(), "increaseValue")
-        || endsWith(_request.getMethod(), "decreaseValue")
-        || endsWith(_request.getMethod(), "startDim")
-        || endsWith(_request.getMethod(), "endDim")
-        || endsWith(_request.getMethod(), "setValue")
-        || endsWith(_request.getMethod(), "callScene")
-        || endsWith(_request.getMethod(), "saveScene")
-        || endsWith(_request.getMethod(), "undoScene")
-        || endsWith(_request.getMethod(), "getConsumption");
+    return _request.getMethod() == "turnOn"
+        || _request.getMethod() == "turnOff"
+        || _request.getMethod() == "increaseValue"
+        || _request.getMethod() == "decreaseValue"
+        || _request.getMethod() == "startDim"
+        || _request.getMethod() == "endDim"
+        || _request.getMethod() == "setValue"
+        || _request.getMethod() == "callScene"
+        || _request.getMethod() == "saveScene"
+        || _request.getMethod() == "undoScene"
+        || _request.getMethod() == "getConsumption";
   } // isDeviceInterfaceCall
 
 
@@ -337,8 +337,8 @@ namespace dss {
     std::string errorMessage;
     if(_request.getMethod() == "getConsumption") {
       int accumulatedConsumption = 0;
-      foreach(Modulator* pModulator, getDSS().getApartment().getModulators()) {
-        accumulatedConsumption += pModulator->getPowerConsumption();
+      foreach(DSMeter* pDSMeter, getDSS().getApartment().getDSMeters()) {
+        accumulatedConsumption += pDSMeter->getPowerConsumption();
       }
       return "{ " + ToJSONValue("consumption") + ": " +  uintToString(accumulatedConsumption) +"}";
     } else if(isDeviceInterfaceCall(_request)) {
@@ -401,20 +401,20 @@ namespace dss {
         std::ostringstream sstream;
         sstream << "{ " << ToJSONValue("circuits") << ": [";
         bool first = true;
-        vector<Modulator*>& modulators = getDSS().getApartment().getModulators();
-        foreach(Modulator* modulator, modulators) {
+        vector<DSMeter*>& dsMeters = getDSS().getApartment().getDSMeters();
+        foreach(DSMeter* dsMeter, dsMeters) {
           if(!first) {
             sstream << ",";
           }
           first = false;
-          sstream << "{ " << ToJSONValue("name") << ": " << ToJSONValue(modulator->getName());
-          sstream << ", " << ToJSONValue("dsid") << ": " << ToJSONValue(modulator->getDSID().toString());
-          sstream << ", " << ToJSONValue("busid") << ": " << ToJSONValue(modulator->getBusID());
-          sstream << ", " << ToJSONValue("hwVersion") << ": " << ToJSONValue(modulator->getHardwareVersion());
-          sstream << ", " << ToJSONValue("swVersion") << ": " << ToJSONValue(modulator->getSoftwareVersion());
-          sstream << ", " << ToJSONValue("hwName") << ": " << ToJSONValue(modulator->getHardwareName());
-          sstream << ", " << ToJSONValue("deviceType") << ": " << ToJSONValue(modulator->getDeviceType());
-          sstream << ", " << ToJSONValue("isPresent") << ": " << ToJSONValue(modulator->isPresent());
+          sstream << "{ " << ToJSONValue("name") << ": " << ToJSONValue(dsMeter->getName());
+          sstream << ", " << ToJSONValue("dsid") << ": " << ToJSONValue(dsMeter->getDSID().toString());
+          sstream << ", " << ToJSONValue("busid") << ": " << ToJSONValue(dsMeter->getBusID());
+          sstream << ", " << ToJSONValue("hwVersion") << ": " << ToJSONValue(dsMeter->getHardwareVersion());
+          sstream << ", " << ToJSONValue("swVersion") << ": " << ToJSONValue(dsMeter->getSoftwareVersion());
+          sstream << ", " << ToJSONValue("hwName") << ": " << ToJSONValue(dsMeter->getHardwareName());
+          sstream << ", " << ToJSONValue("deviceType") << ": " << ToJSONValue(dsMeter->getDeviceType());
+          sstream << ", " << ToJSONValue("isPresent") << ": " << ToJSONValue(dsMeter->isPresent());
           sstream << "}";
         }
         sstream << "]}";
@@ -427,9 +427,9 @@ namespace dss {
         getDSS().getApartment().setName(_request.getParameter("newName"));
         result = ResultToJSON(true);
       } else if(_request.getMethod() == "rescan") {
-        std::vector<Modulator*> mods = getDSS().getApartment().getModulators();
-        foreach(Modulator* pModulator, mods) {
-          pModulator->setIsValid(false);
+        std::vector<DSMeter*> mods = getDSS().getApartment().getDSMeters();
+        foreach(DSMeter* pDSMeter, mods) {
+          pDSMeter->setIsValid(false);
         }
         result = ResultToJSON(true);
       } else {
@@ -666,30 +666,30 @@ namespace dss {
       return ResultToJSON(false, "could not parse dsid");
     }
     try {
-      Modulator& modulator = getDSS().getApartment().getModulatorByDSID(dsid);
+      DSMeter& dsMeter = getDSS().getApartment().getDSMeterByDSID(dsid);
       if(_request.getMethod() == "getName") {
-        return JSONOk("{ " + ToJSONValue("name") + ": " + ToJSONValue(modulator.getName()) + "}");
+        return JSONOk("{ " + ToJSONValue("name") + ": " + ToJSONValue(dsMeter.getName()) + "}");
       } else if(_request.getMethod() == "setName") {
-        modulator.setName(_request.getParameter("newName"));
+        dsMeter.setName(_request.getParameter("newName"));
         return ResultToJSON(true);
       } else if(_request.getMethod() == "getEnergyBorder") {
         std::ostringstream sstream;
-        sstream << "{" << ToJSONValue("orange") << ":" << ToJSONValue(modulator.getEnergyLevelOrange());
-        sstream << "," << ToJSONValue("red") << ":" << ToJSONValue(modulator.getEnergyLevelRed());
+        sstream << "{" << ToJSONValue("orange") << ":" << ToJSONValue(dsMeter.getEnergyLevelOrange());
+        sstream << "," << ToJSONValue("red") << ":" << ToJSONValue(dsMeter.getEnergyLevelRed());
         sstream << "}";
         return JSONOk(sstream.str());
       } else if(_request.getMethod() == "getConsumption") {
-        return JSONOk("{ " + ToJSONValue("consumption") + ": " +  uintToString(modulator.getPowerConsumption()) +"}");
+        return JSONOk("{ " + ToJSONValue("consumption") + ": " +  uintToString(dsMeter.getPowerConsumption()) +"}");
       } else if(_request.getMethod() == "getEnergyMeterValue") {
-        return JSONOk("{ " + ToJSONValue("metervalue") + ": " +  uintToString(modulator.getEnergyMeterValue()) +"}");
+        return JSONOk("{ " + ToJSONValue("metervalue") + ": " +  uintToString(dsMeter.getEnergyMeterValue()) +"}");
       } else if(_request.getMethod() == "rescan") {
-        modulator.setIsValid(false);
+        dsMeter.setIsValid(false);
         return ResultToJSON(true);
       } else {
         throw std::runtime_error("Unhandled function");
       }
     } catch(std::runtime_error&) {
-      return ResultToJSON(false, "could not find modulator with given dsid");
+      return ResultToJSON(false, "could not find dsMeter with given dsid");
     }
     return "";
   } // handleRequest
@@ -1022,7 +1022,7 @@ namespace dss {
       if(zoneID != -1) {
         try {
           Zone& zone = getDSS().getApartment().getZone(zoneID);
-          if(zone.getFirstZoneOnModulator() != -1) {
+          if(zone.getFirstZoneOnDSMeter() != -1) {
             return ResultToJSON(false, "Cannot delete a primary zone");
           }
           if(zone.getDevices().length() > 0) {
@@ -1216,7 +1216,7 @@ namespace dss {
         Device& device = getDSS().getApartment().getDeviceByDSID(deviceDSID);
         DS485CommandFrame* frame = new DS485CommandFrame();
         frame->getHeader().setBroadcast(true);
-        frame->getHeader().setDestination(device.getModulatorID());
+        frame->getHeader().setDestination(device.getDSMeterID());
         frame->setCommand(CommandRequest);
         frame->getPayload().add<uint8_t>(FunctionDeviceGetTransmissionQuality);
         frame->getPayload().add<uint16_t>(device.getShortAddress());
@@ -1304,16 +1304,16 @@ namespace dss {
       std::ostringstream sstream;
       sstream << "{ " << ToJSONValue("series") << ": [";
       bool first = true;
-      vector<Modulator*>& modulators = getDSS().getApartment().getModulators();
-      foreach(Modulator* modulator, modulators) {
+      vector<DSMeter*>& dsMeters = getDSS().getApartment().getDSMeters();
+      foreach(DSMeter* dsMeter, dsMeters) {
         if(!first) {
           sstream << ",";
         }
         first = false;
-        sstream << "{ " << ToJSONValue("dsid") << ": " << ToJSONValue(modulator->getDSID().toString());
+        sstream << "{ " << ToJSONValue("dsid") << ": " << ToJSONValue(dsMeter->getDSID().toString());
         sstream << ", " << ToJSONValue("type") << ": " << ToJSONValue("energy");
         sstream << "},";
-        sstream << "{ " << ToJSONValue("dsid") << ": " << ToJSONValue(modulator->getDSID().toString());
+        sstream << "{ " << ToJSONValue("dsid") << ": " << ToJSONValue(dsMeter->getDSID().toString());
         sstream << ", " << ToJSONValue("type") << ": " << ToJSONValue("consumption");
         sstream << "}";
       }
@@ -1333,7 +1333,7 @@ namespace dss {
         dsid_t deviceDSID = dsid_t::fromString(deviceDSIDString);
         if(!(deviceDSID == NullDSID)) {
           try {
-            getDSS().getApartment().getModulatorByDSID(deviceDSID);
+            getDSS().getApartment().getDSMeterByDSID(deviceDSID);
           } catch(std::runtime_error& e) {
             return ResultToJSON(false, "Could not find device with dsid '" + deviceDSIDString + "'");
           }
@@ -1377,7 +1377,7 @@ namespace dss {
           if(boost::filesystem::exists(seriesPath)) {
             SeriesReader<CurrentValue> reader;
             boost::shared_ptr<Series<CurrentValue> > s = boost::shared_ptr<Series<CurrentValue> >(reader.readFromXML(seriesPath));
-            std::deque<CurrentValue>* values = s->getExpandedValues();
+            boost::shared_ptr<std::deque<CurrentValue> > values = s->getExpandedValues();
             bool first = true;
             std::ostringstream sstream;
             sstream << "{ " ;
@@ -1394,7 +1394,6 @@ namespace dss {
               sstream << "[" << iValue->getTimeStamp().secondsSinceEpoch()  << "," << iValue->getValue() << "]";
             }
             sstream << "]}";
-            delete values;
             return JSONOk(sstream.str());
           } else {
             return ResultToJSON(false, "No data-file for '" + typeString + "' and resolution '" + resolutionString + "'");
diff --git a/doc.cpp b/doc.cpp
index ee8581b..f53bbdb 100644
--- a/doc.cpp
+++ b/doc.cpp
@@ -100,7 +100,7 @@ The simulation has it's own configuration:
 \verbatim
 <?xml version="1.0"?>
 <sim>
-  <modulator busid="70" dsid="10">
+  <dsMeter busid="70" dsid="10">
     <zone id="1"> <!-- id can be omitted, in fact zone may be omitted if there's only one zone -->
       <device dsid="1" busid="1" type="standard.switch" />
       <device dsid="2" busid="2" type="example.vlc_remote" />
@@ -119,13 +119,13 @@ The simulation has it's own configuration:
         <device busid="5" />
       </group>
     </zone>
-  </modulator>
-  <modulator ...>
-  </modulator>
+  </dsMeter>
+  <dsMeter ...>
+  </dsMeter>
 </sim>
 \endverbatim
 
-The \c sim tag encloses multiple modulators. In the \c modulator tag the modulators busid (as in DS485 bus address) as well as its dsid get specified. The dsid as it's written there is actually expanded in the loader to be a "simulation" address and thus prefixed with 3504175fe0000000ffc. This applies for all dsids in this config file.
+The \c sim tag encloses multiple dsMeters. In the \c dsMeter tag the dsMeters busid (as in DS485 bus address) as well as its dsid get specified. The dsid as it's written there is actually expanded in the loader to be a "simulation" address and thus prefixed with 3504175fe0000000ffc. This applies for all dsids in this config file.
 
 The device-type defines what object gets instanciated by the simulated dSM. There are two built-in dSIDs "standard.simple" a device that behaves like a light bulb and "standard.switch" which simulates a 9 button switch.
 If the type of a device is not specified it defaults to "standard.simple".
diff --git a/examples/plugins/iPhone_plugin/iPhone_plugin.cpp b/examples/plugins/iPhone_plugin/iPhone_plugin.cpp
index 516853a..14e55aa 100644
--- a/examples/plugins/iPhone_plugin/iPhone_plugin.cpp
+++ b/examples/plugins/iPhone_plugin/iPhone_plugin.cpp
@@ -21,7 +21,7 @@ int plugin_getversion() {
 bool dataRequest(DSS& _dss, HashMapConstStringString& _parameter,
 		std::string& result) {
 	std::stringstream sStream;
-	std::vector<Modulator*>& modulators = _dss.getApartment().getModulators();
+	std::vector<DSMeter*>& dsMeters = _dss.getApartment().getDSMeters();
 	std::vector<Zone*>& zones = _dss.getApartment().getZones();
 	
 	sStream << "{\"Name\":\""<<_dss.getApartment().getName() <<"\",";
@@ -64,22 +64,22 @@ bool dataRequest(DSS& _dss, HashMapConstStringString& _parameter,
 
 	sStream << "],\"Circuit\":[ ";
 
-	bool firstModulator = true;
-	for (std::vector<Modulator*>::iterator ipModulator =
-			modulators.begin(), endModulator = modulators.end(); ipModulator
-			!= endModulator; ++ipModulator) {
-		if (firstModulator) {
-			firstModulator = false;
+	bool firstDSMeter = true;
+	for (std::vector<DSMeter*>::iterator ipDSMeter =
+			dsMeters.begin(), endDSMeter = dsMeters.end(); ipDSMeter
+			!= endDSMeter; ++ipDSMeter) {
+		if (firstDSMeter) {
+			firstDSMeter = false;
 		} else {
 			sStream << ",";
 		}
 
-		sStream << "{\"Name\":\""<<(*ipModulator)->getName() <<"\",";
-		sStream << "\"dSID\":\"" << (*ipModulator)->getDSID().toString() << "\",";
-		sStream << "\"HardwareVersion\":\"" << (*ipModulator)->getHardwareVersion() << "\",";
-		sStream << "\"SoftwareVersion\":\"" << (*ipModulator)->getSoftwareVersion() << "\",";
-		sStream << "\"orangeEnergyLevel\":" << (*ipModulator)->getEnergyLevelOrange() << ",";
-		sStream << "\"redEnergyLevel\":" << (*ipModulator)->getEnergyLevelRed() << "";
+		sStream << "{\"Name\":\""<<(*ipDSMeter)->getName() <<"\",";
+		sStream << "\"dSID\":\"" << (*ipDSMeter)->getDSID().toString() << "\",";
+		sStream << "\"HardwareVersion\":\"" << (*ipDSMeter)->getHardwareVersion() << "\",";
+		sStream << "\"SoftwareVersion\":\"" << (*ipDSMeter)->getSoftwareVersion() << "\",";
+		sStream << "\"orangeEnergyLevel\":" << (*ipDSMeter)->getEnergyLevelOrange() << ",";
+		sStream << "\"redEnergyLevel\":" << (*ipDSMeter)->getEnergyLevelRed() << "";
 		sStream << "}";
 	}
 	sStream << "]}";
@@ -92,7 +92,7 @@ bool steadyCallRequest(DSS& _dss, HashMapConstStringString& _parameter,
 		std::string& result) {
 	bool energyAnfrage=strToIntDef(_parameter["parameter"], -1) & 0x01;
 	bool lastSceneAnfrage=strToIntDef(_parameter["parameter"], -1) & 0x02;
-	bool firstModulator;
+	bool firstDSMeter;
 	DS485Client oClient; 
 	DS485CommandFrame frame;
 
@@ -108,22 +108,22 @@ bool steadyCallRequest(DSS& _dss, HashMapConstStringString& _parameter,
 	    oClient.sendFrameDiscardResult(frame);  
 		
 		
-		std::vector<Modulator*>& modulators = _dss.getApartment().getModulators();
+		std::vector<DSMeter*>& dsMeters = _dss.getApartment().getDSMeters();
 
 		sStream << "\"Energy\":[";
 
-		firstModulator = true;
-		for (std::vector<Modulator*>::iterator ipModulator =
-				modulators.begin(), endModulator = modulators.end(); ipModulator
-				!= endModulator; ++ipModulator) {
-			if (firstModulator) {
-				firstModulator = false;
+		firstDSMeter = true;
+		for (std::vector<DSMeter*>::iterator ipDSMeter =
+				dsMeters.begin(), endDSMeter = dsMeters.end(); ipDSMeter
+				!= endDSMeter; ++ipDSMeter) {
+			if (firstDSMeter) {
+				firstDSMeter = false;
 			} else {
 				sStream << ",";
 			}
 
-			sStream << "{\"dSID\":\""<< (*ipModulator)->getDSID().toString() <<"\",";
-			sStream << "\"value\":" << (*ipModulator)->getCachedPowerConsumption() << "}";
+			sStream << "{\"dSID\":\""<< (*ipDSMeter)->getDSID().toString() <<"\",";
+			sStream << "\"value\":" << (*ipDSMeter)->getCachedPowerConsumption() << "}";
 		}
 		
 		sStream << "]";
diff --git a/tests/eventtests.cpp b/tests/eventtests.cpp
index e054ec4..12a22d3 100644
--- a/tests/eventtests.cpp
+++ b/tests/eventtests.cpp
@@ -221,7 +221,7 @@ BOOST_AUTO_TEST_CASE(testDS485Events) {
   runner.setEventQueue(&queue);
 
   Apartment apt(NULL, NULL);
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485Proxy proxy(NULL, &apt);
   apt.setDS485Interface(&proxy);
 
diff --git a/tests/modeljstests.cpp b/tests/modeljstests.cpp
index 5db4d3c..ea2ca62 100644
--- a/tests/modeljstests.cpp
+++ b/tests/modeljstests.cpp
@@ -66,7 +66,7 @@ BOOST_AUTO_TEST_CASE(testSets) {
 
   Device& dev1 = apt.allocateDevice(dsid_t(0,1));
   dev1.setShortAddress(1);
-  dev1.setModulatorID(1);
+  dev1.setDSMeterID(1);
   dev1.addToGroup(1);
   dev1.setIsPresent(true);
   dev1.setZoneID(1);
@@ -74,7 +74,7 @@ BOOST_AUTO_TEST_CASE(testSets) {
   dev1.setFunctionID(1);
   Device& dev2 = apt.allocateDevice(dsid_t(0,2));
   dev2.setShortAddress(2);
-  dev2.setModulatorID(1);
+  dev2.setDSMeterID(1);
   dev2.addToGroup(1);
   dev2.setIsPresent(false);
   dev2.setZoneID(2);
diff --git a/tests/modeltests.cpp b/tests/modeltests.cpp
index 82674fc..04f817b 100644
--- a/tests/modeltests.cpp
+++ b/tests/modeltests.cpp
@@ -48,25 +48,25 @@ BOOST_AUTO_TEST_CASE(testApartmentAllocateDeviceReturnsTheSameDeviceForDSID) {
   Device& dev1 = apt.allocateDevice(dsid_t(0,1));
   dev1.setShortAddress(1);
   dev1.setName("dev1");
-  dev1.setModulatorID(1);
+  dev1.setDSMeterID(1);
 
   Device& dev2 = apt.allocateDevice(dsid_t(0,1));
   BOOST_CHECK_EQUAL(dev1.getShortAddress(), dev2.getShortAddress());
   BOOST_CHECK_EQUAL(dev1.getName(), dev2.getName());
-  BOOST_CHECK_EQUAL(dev1.getModulatorID(), dev2.getModulatorID());
+  BOOST_CHECK_EQUAL(dev1.getDSMeterID(), dev2.getDSMeterID());
 } // testApartmentAllocateDeviceReturnsTheSameDeviceForDSID
 
 BOOST_AUTO_TEST_CASE(testApartmentGetDeviceByShortAddress) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  Modulator& mod = apt.allocateModulator(dsid_t(0,2));
+  DSMeter& mod = apt.allocateDSMeter(dsid_t(0,2));
   mod.setBusID(1);
 
   Device& dev1 = apt.allocateDevice(dsid_t(0,1));
   dev1.setShortAddress(1);
   dev1.setName("dev1");
-  dev1.setModulatorID(1);
+  dev1.setDSMeterID(1);
 
   BOOST_CHECK_EQUAL("dev1", apt.getDeviceByShortAddress(mod, 1).getName());
 } // testApartmentGetDeviceByShortAddress
@@ -81,25 +81,25 @@ BOOST_AUTO_TEST_CASE(testApartmentGetDeviceByName) {
   BOOST_CHECK_EQUAL("dev1", apt.getDeviceByName("dev1").getName());
 } // testApartmentGetDeviceByName
 
-BOOST_AUTO_TEST_CASE(testApartmentGetModulatorByName) {
+BOOST_AUTO_TEST_CASE(testApartmentGetDSMeterByName) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  Modulator& mod = apt.allocateModulator(dsid_t(0,2));
+  DSMeter& mod = apt.allocateDSMeter(dsid_t(0,2));
   mod.setName("mod1");
 
-  BOOST_CHECK_EQUAL("mod1", apt.getModulator("mod1").getName());
-} // testApartmentGetModulatorByName
+  BOOST_CHECK_EQUAL("mod1", apt.getDSMeter("mod1").getName());
+} // testApartmentGetDSMeterByName
 
-BOOST_AUTO_TEST_CASE(testApartmentGetModulatorByBusID) {
+BOOST_AUTO_TEST_CASE(testApartmentGetDSMeterByBusID) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  Modulator& mod = apt.allocateModulator(dsid_t(0,2));
+  DSMeter& mod = apt.allocateDSMeter(dsid_t(0,2));
   mod.setBusID(1);
 
-  BOOST_CHECK_EQUAL(1, apt.getModulatorByBusID(1).getBusID());
-} // testApartmentGetModulatorByBusID
+  BOOST_CHECK_EQUAL(1, apt.getDSMeterByBusID(1).getBusID());
+} // testApartmentGetDSMeterByBusID
 
 BOOST_AUTO_TEST_CASE(testZoneMoving) {
   Apartment apt(NULL, NULL);
@@ -394,18 +394,18 @@ BOOST_AUTO_TEST_CASE(testRemoval) {
     BOOST_CHECK(true);
   }
   
-  apt.allocateModulator(dsid_t(1,0));
+  apt.allocateDSMeter(dsid_t(1,0));
   try {
-    apt.getModulatorByDSID(dsid_t(1,0));
+    apt.getDSMeterByDSID(dsid_t(1,0));
     BOOST_CHECK(true);
   } catch(ItemNotFoundException&) {
-    BOOST_CHECK_MESSAGE(false, "Modulator not found");
+    BOOST_CHECK_MESSAGE(false, "DSMeter not found");
   }
   
-  apt.removeModulator(dsid_t(1,0));
+  apt.removeDSMeter(dsid_t(1,0));
   try {
-    apt.getModulatorByDSID(dsid_t(1,0));
-    BOOST_CHECK_MESSAGE(false, "Modulator still exists");
+    apt.getDSMeterByDSID(dsid_t(1,0));
+    BOOST_CHECK_MESSAGE(false, "DSMeter still exists");
   } catch(ItemNotFoundException&) {
     BOOST_CHECK(true);
   }
@@ -415,7 +415,7 @@ BOOST_AUTO_TEST_CASE(testCallScenePropagation) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485Proxy proxy(NULL, &apt);
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -429,18 +429,18 @@ BOOST_AUTO_TEST_CASE(testCallScenePropagation) {
     sleepMS(100);
   }
 
-  Modulator& mod = apt.allocateModulator(dsid_t(0,3));
+  DSMeter& mod = apt.allocateDSMeter(dsid_t(0,3));
   mod.setBusID(76);
   Device& dev1 = apt.allocateDevice(dsid_t(0,1));
   dev1.setName("dev1");
   dev1.setShortAddress(1);
-  dev1.setModulatorID(76);
+  dev1.setDSMeterID(76);
   DeviceReference devRef1(dev1, &apt);
   mod.addDevice(devRef1);
   Device& dev2 = apt.allocateDevice(dsid_t(0,2));
   dev2.setName("dev2");
   dev2.setShortAddress(2);
-  dev2.setModulatorID(76);
+  dev2.setDSMeterID(76);
 
   dev1.callScene(Scene1);
   sleepMS(500);
@@ -494,74 +494,74 @@ BOOST_AUTO_TEST_CASE(testCallScenePropagation) {
 
 
     //------------------------------------------------ Specialized Commands (system)
-    /** Returns an std::vector containing the modulator-spec of all modulators present. */
-    virtual std::vector<ModulatorSpec_t> getModulators() { return std::vector<ModulatorSpec_t>(); }
+    /** Returns an std::vector containing the dsMeter-spec of all dsMeters present. */
+    virtual std::vector<DSMeterSpec_t> getDSMeters() { return std::vector<DSMeterSpec_t>(); }
 
-    /** Returns the modulator-spec for a modulator */
-    virtual ModulatorSpec_t getModulatorSpec(const int _modulatorID) { return ModulatorSpec_t(); }
+    /** Returns the dsMeter-spec for a dsMeter */
+    virtual DSMeterSpec_t getDSMeterSpec(const int _dsMeterID) { return DSMeterSpec_t(); }
 
-    /** Returns a std::vector conatining the zone-ids of the specified modulator */
-    virtual std::vector<int> getZones(const int _modulatorID) { return std::vector<int>(); }
-    /** Returns the count of the zones of the specified modulator */
-    virtual int getZoneCount(const int _modulatorID) { return 0; }
-    /** Returns the bus-ids of the devices present in the given zone of the specified modulator */
-    virtual std::vector<int> getDevicesInZone(const int _modulatorID, const int _zoneID) { return std::vector<int>(); }
-    /** Returns the count of devices present in the given zone of the specified modulator */
-    virtual int getDevicesCountInZone(const int _modulatorID, const int _zoneID) { return 0; }
+    /** Returns a std::vector conatining the zone-ids of the specified dsMeter */
+    virtual std::vector<int> getZones(const int _dsMeterID) { return std::vector<int>(); }
+    /** Returns the count of the zones of the specified dsMeter */
+    virtual int getZoneCount(const int _dsMeterID) { return 0; }
+    /** Returns the bus-ids of the devices present in the given zone of the specified dsMeter */
+    virtual std::vector<int> getDevicesInZone(const int _dsMeterID, const int _zoneID) { return std::vector<int>(); }
+    /** Returns the count of devices present in the given zone of the specified dsMeter */
+    virtual int getDevicesCountInZone(const int _dsMeterID, const int _zoneID) { return 0; }
 
     /** Adds the given device to the specified zone. */
-    virtual void setZoneID(const int _modulatorID, const devid_t _deviceID, const int _zoneID) {}
+    virtual void setZoneID(const int _dsMeterID, const devid_t _deviceID, const int _zoneID) {}
 
-    /** Creates a new Zone on the given modulator */
-    virtual void createZone(const int _modulatorID, const int _zoneID) {}
+    /** Creates a new Zone on the given dsMeter */
+    virtual void createZone(const int _dsMeterID, const int _zoneID) {}
 
-    /** Removes the zone \a _zoneID on the modulator \a _modulatorID */
-    virtual void removeZone(const int _modulatorID, const int _zoneID) {}
+    /** Removes the zone \a _zoneID on the dsMeter \a _dsMeterID */
+    virtual void removeZone(const int _dsMeterID, const int _zoneID) {}
 
-    /** Returns the count of groups present in the given zone of the specifid modulator */
-    virtual int getGroupCount(const int _modulatorID, const int _zoneID) { return 0; }
-    /** Returns the a std::vector containing the group-ids of the given zone on the specified modulator */
-    virtual std::vector<int> getGroups(const int _modulatorID, const int _zoneID) { return std::vector<int>(); }
+    /** Returns the count of groups present in the given zone of the specifid dsMeter */
+    virtual int getGroupCount(const int _dsMeterID, const int _zoneID) { return 0; }
+    /** Returns the a std::vector containing the group-ids of the given zone on the specified dsMeter */
+    virtual std::vector<int> getGroups(const int _dsMeterID, const int _zoneID) { return std::vector<int>(); }
     /** Returns the count of devices present in the given group */
-    virtual int getDevicesInGroupCount(const int _modulatorID, const int _zoneID, const int _groupID) { return 0; }
+    virtual int getDevicesInGroupCount(const int _dsMeterID, const int _zoneID, const int _groupID) { return 0; }
     /** Returns a std::vector containing the bus-ids of the devices present in the given group */
-    virtual std::vector<int> getDevicesInGroup(const int _modulatorID, const int _zoneID, const int _groupID) { return std::vector<int>(); }
+    virtual std::vector<int> getDevicesInGroup(const int _dsMeterID, const int _zoneID, const int _groupID) { return std::vector<int>(); }
 
-    virtual std::vector<int> getGroupsOfDevice(const int _modulatorID, const int _deviceID) { return std::vector<int>(); }
+    virtual std::vector<int> getGroupsOfDevice(const int _dsMeterID, const int _deviceID) { return std::vector<int>(); }
 
     /** Adds a device to a given group */
-    virtual void addToGroup(const int _modulatorID, const int _groupID, const int _deviceID) {}
+    virtual void addToGroup(const int _dsMeterID, const int _groupID, const int _deviceID) {}
     /** Removes a device from a given group */
-    virtual void removeFromGroup(const int _modulatorID, const int _groupID, const int _deviceID) {}
+    virtual void removeFromGroup(const int _dsMeterID, const int _groupID, const int _deviceID) {}
 
     /** Adds a user group */
-    virtual int addUserGroup(const int _modulatorID) { return 0; }
+    virtual int addUserGroup(const int _dsMeterID) { return 0; }
     /** Removes a user group */
-    virtual void removeUserGroup(const int _modulatorID, const int _groupID) {}
+    virtual void removeUserGroup(const int _dsMeterID, const int _groupID) {}
 
     /** Returns the DSID of a given device */
-    virtual dsid_t getDSIDOfDevice(const int _modulatorID, const int _deviceID) { return NullDSID; }
-    /** Returns the DSID of a given modulator */
-    virtual dsid_t getDSIDOfModulator(const int _modulatorID) { return NullDSID; }
+    virtual dsid_t getDSIDOfDevice(const int _dsMeterID, const int _deviceID) { return NullDSID; }
+    /** Returns the DSID of a given dsMeter */
+    virtual dsid_t getDSIDOfDSMeter(const int _dsMeterID) { return NullDSID; }
 
-    virtual int getLastCalledScene(const int _modulatorID, const int _zoneID, const int _groupID) { return 0;}
+    virtual int getLastCalledScene(const int _dsMeterID, const int _zoneID, const int _groupID) { return 0;}
 
     //------------------------------------------------ Metering
 
     /** Returns the current power-consumption in mW */
-    virtual unsigned long getPowerConsumption(const int _modulatorID) { return 0; }
+    virtual unsigned long getPowerConsumption(const int _dsMeterID) { return 0; }
 
     /** Returns the meter value in Wh */
-    virtual unsigned long getEnergyMeterValue(const int _modulatorID) { return 0; }
+    virtual unsigned long getEnergyMeterValue(const int _dsMeterID) { return 0; }
 
-    virtual bool getEnergyBorder(const int _modulatorID, int& _lower, int& _upper) { _lower = 0; _upper = 0; return false; }
+    virtual bool getEnergyBorder(const int _dsMeterID, int& _lower, int& _upper) { _lower = 0; _upper = 0; return false; }
 
     //------------------------------------------------ UDI
-    virtual uint8_t dSLinkSend(const int _modulatorID, devid_t _devAdr, uint8_t _value, uint8_t _flags) { return 0; }
+    virtual uint8_t dSLinkSend(const int _dsMeterID, devid_t _devAdr, uint8_t _value, uint8_t _flags) { return 0; }
 
     //------------------------------------------------ Device    
-    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _modulatorID, int _paramID) { return 0; }
-    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _modulatorID) { return 0; }
+    virtual uint16_t deviceGetParameterValue(devid_t _id, uint8_t _dsMeterID, int _paramID) { return 0; }
+    virtual uint16_t deviceGetFunctionID(devid_t _id, uint8_t _dsMeterID) { return 0; }
 
     //------------------------------------------------ Device manipulation
     virtual void setValueDevice(const Device& _device, const uint16_t _value, const uint16_t _parameterID, const int _size) {}
@@ -578,7 +578,7 @@ BOOST_AUTO_TEST_CASE(testTurnOnDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -604,7 +604,7 @@ BOOST_AUTO_TEST_CASE(testTurnOnGroup) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -625,7 +625,7 @@ BOOST_AUTO_TEST_CASE(testTurnOffDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -651,7 +651,7 @@ BOOST_AUTO_TEST_CASE(testTurnOffGroup) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -671,7 +671,7 @@ BOOST_AUTO_TEST_CASE(testEnableDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -695,7 +695,7 @@ BOOST_AUTO_TEST_CASE(testDisableDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -719,7 +719,7 @@ BOOST_AUTO_TEST_CASE(testIncreaseValueDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -743,7 +743,7 @@ BOOST_AUTO_TEST_CASE(testDecreaseValueDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -767,7 +767,7 @@ BOOST_AUTO_TEST_CASE(testDecreaseValueZone) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -787,7 +787,7 @@ BOOST_AUTO_TEST_CASE(testIncreaseValueZone) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -807,7 +807,7 @@ BOOST_AUTO_TEST_CASE(testStartDimUp) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -831,7 +831,7 @@ BOOST_AUTO_TEST_CASE(testStartDimDown) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -855,7 +855,7 @@ BOOST_AUTO_TEST_CASE(testEndDim) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -879,7 +879,7 @@ BOOST_AUTO_TEST_CASE(testCallSceneDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -905,7 +905,7 @@ BOOST_AUTO_TEST_CASE(testSaveSceneDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -931,7 +931,7 @@ BOOST_AUTO_TEST_CASE(testUndoSceneDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -957,7 +957,7 @@ BOOST_AUTO_TEST_CASE(testCallSceneGroup) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -977,7 +977,7 @@ BOOST_AUTO_TEST_CASE(testSaveSceneGroup) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -997,7 +997,7 @@ BOOST_AUTO_TEST_CASE(testUndoSceneGroup) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1017,7 +1017,7 @@ BOOST_AUTO_TEST_CASE(testCallSceneZone) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1037,7 +1037,7 @@ BOOST_AUTO_TEST_CASE(testSaveSceneZone) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1057,7 +1057,7 @@ BOOST_AUTO_TEST_CASE(testUndoSceneZone) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1077,7 +1077,7 @@ BOOST_AUTO_TEST_CASE(callUndoSceneSet) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1102,7 +1102,7 @@ BOOST_AUTO_TEST_CASE(testSaveSceneSet) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1127,7 +1127,7 @@ BOOST_AUTO_TEST_CASE(testUndoSceneSet) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1152,7 +1152,7 @@ BOOST_AUTO_TEST_CASE(testNextSceneDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
@@ -1176,7 +1176,7 @@ BOOST_AUTO_TEST_CASE(testPreviousSceneDevice) {
   Apartment apt(NULL, NULL);
   apt.initialize();
 
-  DSModulatorSim modSim(NULL);
+  DSDSMeterSim modSim(NULL);
   DS485InterfaceTest proxy;
   DS485BusRequestDispatcher dispatcher;
   dispatcher.setProxy(&proxy);
diff --git a/tests/scriptstest.cpp b/tests/scriptstest.cpp
index 48ae8f7..9a8aff1 100644
--- a/tests/scriptstest.cpp
+++ b/tests/scriptstest.cpp
@@ -61,9 +61,9 @@ BOOST_AUTO_TEST_CASE(testMultipleIterations) {
 } // testMultipleIterations
 
 BOOST_AUTO_TEST_CASE(testExceptionHandling) {
-  ScriptEnvironment* env = new ScriptEnvironment();
+  boost::shared_ptr<ScriptEnvironment> env(new ScriptEnvironment());
   env->initialize();
-  ScriptContext* ctx = env->getContext();
+  boost::shared_ptr<ScriptContext> ctx(env->getContext());
   try {
     ctx->evaluate<double>("x = {}; x.what = 'bla'; x.toString = function() { return 'bla'; }; throw x; x = 10;");
     BOOST_CHECK(false);
diff --git a/tests/seriestests.cpp b/tests/seriestests.cpp
index 1682058..b624d56 100644
--- a/tests/seriestests.cpp
+++ b/tests/seriestests.cpp
@@ -371,7 +371,7 @@ unsigned int numberOfElements = 0;
   BOOST_CHECK_EQUAL( numberOfElements, N );
 
   /* test expanded values */
-  queue_type_ *queueExpanded = daily.getExpandedValues();
+  boost::shared_ptr<queue_type_> queueExpanded = daily.getExpandedValues();
   numberOfElements = 0;
   for (queue_type_::const_iterator iter = queueExpanded->begin();
        iter != queueExpanded->end();
@@ -485,9 +485,8 @@ BOOST_AUTO_TEST_CASE(expansion) {
     minutely.addValue(iValue, testStart.addMinute((iValue-1)*2));
   }
   
-  std::deque<AdderValue>* expanded = minutely.getExpandedValues();
+  boost::shared_ptr<std::deque<AdderValue> > expanded = minutely.getExpandedValues();
   BOOST_CHECK_EQUAL( (size_t)9, expanded->size() );
-  delete expanded;
 } // expansion
 
 BOOST_AUTO_TEST_CASE(expansionToPresent) {
@@ -502,12 +501,11 @@ BOOST_AUTO_TEST_CASE(expansionToPresent) {
     minutely.addValue(iValue, testStart.addMinute((iValue-1)*2));
   }
   
-  std::deque<AdderValue>* expanded = minutely.getExpandedValues();
+  boost::shared_ptr<std::deque<AdderValue> > expanded = minutely.getExpandedValues();
   BOOST_CHECK_EQUAL( (size_t)10, expanded->size() );
   for(std::deque<AdderValue>::iterator iValue = expanded->begin(), e = expanded->end(); iValue != e; iValue++) {
     BOOST_CHECK_EQUAL( (size_t)5, iValue->getValue() );
   }
-  delete expanded;
 } // expansion
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/webservices/model_soap.cpp b/webservices/model_soap.cpp
index 30d1289..c8d0f42 100644
--- a/webservices/model_soap.cpp
+++ b/webservices/model_soap.cpp
@@ -97,31 +97,31 @@ int AuthorizeAndGetDevice(struct soap *soap, const int _token, char* _devID, dss
   return SOAP_OK;
 } // authorizeAndGetDevice
 
-int AuthorizeAndGetModulator(struct soap *soap, const int _token, char* _modulatorDSID, dss::Modulator& result) {
+int AuthorizeAndGetDSMeter(struct soap *soap, const int _token, char* _dsMeterDSID, dss::DSMeter& result) {
   if(!IsAuthorized(soap, _token)) {
     return NotAuthorized(soap);
   }
   dss::Apartment& apt = dss::DSS::getInstance()->getApartment();
   try {
-    result = apt.getModulatorByDSID(FromSOAP(_modulatorDSID));
+    result = apt.getDSMeterByDSID(FromSOAP(_dsMeterDSID));
   } catch(dss::ItemNotFoundException& _ex) {
-    return soap_receiver_fault(soap, "Modulator not found", NULL);
+    return soap_receiver_fault(soap, "DSMeter not found", NULL);
   }
   return SOAP_OK;
-} // authorizeAndGetModulator
+} // authorizeAndGetDSMeter
 
-int AuthorizeAndGetModulatorByBusID(struct soap *soap, const int _token, int _modulatorID, dss::Modulator& result) {
+int AuthorizeAndGetDSMeterByBusID(struct soap *soap, const int _token, int _dsMeterID, dss::DSMeter& result) {
   if(!IsAuthorized(soap, _token)) {
     return NotAuthorized(soap);
   }
   dss::Apartment& apt = dss::DSS::getInstance()->getApartment();
   try {
-    result = apt.getModulatorByBusID(_modulatorID);
+    result = apt.getDSMeterByBusID(_dsMeterID);
   } catch(dss::ItemNotFoundException& _ex) {
-    return soap_receiver_fault(soap, "Modulator not found", NULL);
+    return soap_receiver_fault(soap, "DSMeter not found", NULL);
   }
   return SOAP_OK;
-} // authorizeAndGetModulatorID
+} // authorizeAndGetDSMeterID
 
 int AuthorizeAndGetGroup(struct soap *soap, const int _token, const int _groupID, dss::Group& result) {
   if(!IsAuthorized(soap, _token)) {
@@ -399,9 +399,9 @@ int dss__ApartmentRescan(struct soap *soap, int _token, bool& result) {
   }
 
   dss::Apartment& apt = dss::DSS::getInstance()->getApartment();
-  std::vector<dss::Modulator*> mods = apt.getModulators();
-  foreach(dss::Modulator* pModulator, mods) {
-    pModulator->setIsValid(false);
+  std::vector<dss::DSMeter*> mods = apt.getDSMeters();
+  foreach(dss::DSMeter* pDSMeter, mods) {
+    pDSMeter->setIsValid(false);
   }
 
   return SOAP_OK;
@@ -422,10 +422,10 @@ int dss__CircuitRescan(struct soap *soap, int _token, char* _dsid, bool& result)
     return soap_sender_fault(soap, "Error parsing dsid", NULL);
   }
   try {
-    dss::Modulator& mod = apt.getModulatorByDSID(dsid);
+    dss::DSMeter& mod = apt.getDSMeterByDSID(dsid);
     mod.setIsValid(false);
   } catch(dss::ItemNotFoundException&) {
-    return soap_sender_fault(soap, "Could not find modulator", NULL);
+    return soap_sender_fault(soap, "Could not find dsMeter", NULL);
   }
 
   return SOAP_OK;
@@ -995,41 +995,41 @@ int dss__DeviceGetZoneID(struct soap *soap, int _token, char* _deviceID, int& re
 
 //==================================================== Information
 
-int dss__ModulatorGetPowerConsumption(struct soap *soap, int _token, int _modulatorID, unsigned long& result) {
-  dss::Modulator mod(dss::NullDSID);
-  int getResult = AuthorizeAndGetModulatorByBusID(soap, _token, _modulatorID, mod);
+int dss__DSMeterGetPowerConsumption(struct soap *soap, int _token, int _dsMeterID, unsigned long& result) {
+  dss::DSMeter mod(dss::NullDSID);
+  int getResult = AuthorizeAndGetDSMeterByBusID(soap, _token, _dsMeterID, mod);
   if(getResult != SOAP_OK) {
     return getResult;
   }
 
   result = mod.getPowerConsumption();
   return SOAP_OK;
-} // dss__ModulatorGetPowerConsumption
+} // dss__DSMeterGetPowerConsumption
 
 
 //==================================================== Organization
 
 //These calls may be restricted to privileged users.
 
-int dss__ApartmentGetModulatorIDs(struct soap *soap, int _token, std::vector<std::string>& ids) {
+int dss__ApartmentGetDSMeterIDs(struct soap *soap, int _token, std::vector<std::string>& ids) {
   if(!IsAuthorized(soap, _token)) {
     return NotAuthorized(soap);
   }
   dss::Apartment& apt = dss::DSS::getInstance()->getApartment();
 
-  std::vector<dss::Modulator*>& modulators = apt.getModulators();
+  std::vector<dss::DSMeter*>& dsMeters = apt.getDSMeters();
 
-  for(unsigned int iModulator = 0; iModulator < modulators.size(); iModulator++) {
-    dss::dsid_t dsid = modulators[iModulator]->getDSID();
+  for(unsigned int iDSMeter = 0; iDSMeter < dsMeters.size(); iDSMeter++) {
+    dss::dsid_t dsid = dsMeters[iDSMeter]->getDSID();
     ids.push_back(dsid.toString());
   }
 
   return SOAP_OK;
 }
 
-int dss__ModulatorGetName(struct soap *soap, int _token, char* _modulatorID, std::string& name) {
-  dss::Modulator mod(dss::NullDSID);
-  int getResult = AuthorizeAndGetModulator(soap, _token, _modulatorID, mod);
+int dss__DSMeterGetName(struct soap *soap, int _token, char* _dsMeterID, std::string& name) {
+  dss::DSMeter mod(dss::NullDSID);
+  int getResult = AuthorizeAndGetDSMeter(soap, _token, _dsMeterID, mod);
   if(getResult != SOAP_OK) {
     return getResult;
   }
diff --git a/webservices/model_soap.h b/webservices/model_soap.h
index b36e40a..1c415ff 100644
--- a/webservices/model_soap.h
+++ b/webservices/model_soap.h
@@ -202,16 +202,16 @@ int dss__DeviceGetZoneID(int _token, char* _deviceID, int& result);
 
 //==================================================== Information
 
-int dss__ModulatorGetPowerConsumption(int _token, int _modulatorID, xsd__unsignedInt& result);
+int dss__DSMeterGetPowerConsumption(int _token, int _dsMeterID, xsd__unsignedInt& result);
 
 //==================================================== Organization
 
 //These calls may be restricted to privileged users.
 
-/** Returns an integer array of modulators known to the dss. */
-int dss__ApartmentGetModulatorIDs(int _token, std::vector<std::string>& ids);
-/** Retuns the name of the given modulator. */
-int dss__ModulatorGetName(int _token, char* _modulatorID, std::string& name);
+/** Returns an integer array of dsMeters known to the dss. */
+int dss__ApartmentGetDSMeterIDs(int _token, std::vector<std::string>& ids);
+/** Retuns the name of the given dsMeter. */
+int dss__DSMeterGetName(int _token, char* _dsMeterID, std::string& name);
 /** Allocates a zone */
 int dss__ApartmentAllocateZone(int _token, int& zoneID);
 /** Deletes a previously allocated zone. */
diff --git a/webservices/soapC.cpp b/webservices/soapC.cpp
index 236864f..b7cde6c 100644
--- a/webservices/soapC.cpp
+++ b/webservices/soapC.cpp
@@ -269,18 +269,18 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
 		return soap_in_dss__ApartmentAllocateZone(soap, NULL, NULL, "dss:ApartmentAllocateZone");
 	case SOAP_TYPE_dss__ApartmentAllocateZoneResponse:
 		return soap_in_dss__ApartmentAllocateZoneResponse(soap, NULL, NULL, "dss:ApartmentAllocateZoneResponse");
-	case SOAP_TYPE_dss__ModulatorGetName:
-		return soap_in_dss__ModulatorGetName(soap, NULL, NULL, "dss:ModulatorGetName");
-	case SOAP_TYPE_dss__ModulatorGetNameResponse:
-		return soap_in_dss__ModulatorGetNameResponse(soap, NULL, NULL, "dss:ModulatorGetNameResponse");
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDs:
-		return soap_in_dss__ApartmentGetModulatorIDs(soap, NULL, NULL, "dss:ApartmentGetModulatorIDs");
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse:
-		return soap_in_dss__ApartmentGetModulatorIDsResponse(soap, NULL, NULL, "dss:ApartmentGetModulatorIDsResponse");
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
-		return soap_in_dss__ModulatorGetPowerConsumption(soap, NULL, NULL, "dss:ModulatorGetPowerConsumption");
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
-		return soap_in_dss__ModulatorGetPowerConsumptionResponse(soap, NULL, NULL, "dss:ModulatorGetPowerConsumptionResponse");
+	case SOAP_TYPE_dss__DSMeterGetName:
+		return soap_in_dss__DSMeterGetName(soap, NULL, NULL, "dss:DSMeterGetName");
+	case SOAP_TYPE_dss__DSMeterGetNameResponse:
+		return soap_in_dss__DSMeterGetNameResponse(soap, NULL, NULL, "dss:DSMeterGetNameResponse");
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDs:
+		return soap_in_dss__ApartmentGetDSMeterIDs(soap, NULL, NULL, "dss:ApartmentGetDSMeterIDs");
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse:
+		return soap_in_dss__ApartmentGetDSMeterIDsResponse(soap, NULL, NULL, "dss:ApartmentGetDSMeterIDsResponse");
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumption:
+		return soap_in_dss__DSMeterGetPowerConsumption(soap, NULL, NULL, "dss:DSMeterGetPowerConsumption");
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse:
+		return soap_in_dss__DSMeterGetPowerConsumptionResponse(soap, NULL, NULL, "dss:DSMeterGetPowerConsumptionResponse");
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return soap_in_dss__DeviceGetZoneID(soap, NULL, NULL, "dss:DeviceGetZoneID");
 	case SOAP_TYPE_dss__DeviceGetZoneIDResponse:
@@ -760,29 +760,29 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
 		{	*type = SOAP_TYPE_dss__ApartmentAllocateZoneResponse;
 			return soap_in_dss__ApartmentAllocateZoneResponse(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ModulatorGetName"))
-		{	*type = SOAP_TYPE_dss__ModulatorGetName;
-			return soap_in_dss__ModulatorGetName(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:DSMeterGetName"))
+		{	*type = SOAP_TYPE_dss__DSMeterGetName;
+			return soap_in_dss__DSMeterGetName(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ModulatorGetNameResponse"))
-		{	*type = SOAP_TYPE_dss__ModulatorGetNameResponse;
-			return soap_in_dss__ModulatorGetNameResponse(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:DSMeterGetNameResponse"))
+		{	*type = SOAP_TYPE_dss__DSMeterGetNameResponse;
+			return soap_in_dss__DSMeterGetNameResponse(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ApartmentGetModulatorIDs"))
-		{	*type = SOAP_TYPE_dss__ApartmentGetModulatorIDs;
-			return soap_in_dss__ApartmentGetModulatorIDs(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:ApartmentGetDSMeterIDs"))
+		{	*type = SOAP_TYPE_dss__ApartmentGetDSMeterIDs;
+			return soap_in_dss__ApartmentGetDSMeterIDs(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ApartmentGetModulatorIDsResponse"))
-		{	*type = SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse;
-			return soap_in_dss__ApartmentGetModulatorIDsResponse(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:ApartmentGetDSMeterIDsResponse"))
+		{	*type = SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse;
+			return soap_in_dss__ApartmentGetDSMeterIDsResponse(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ModulatorGetPowerConsumption"))
-		{	*type = SOAP_TYPE_dss__ModulatorGetPowerConsumption;
-			return soap_in_dss__ModulatorGetPowerConsumption(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:DSMeterGetPowerConsumption"))
+		{	*type = SOAP_TYPE_dss__DSMeterGetPowerConsumption;
+			return soap_in_dss__DSMeterGetPowerConsumption(soap, NULL, NULL, NULL);
 		}
-		if (!soap_match_tag(soap, t, "dss:ModulatorGetPowerConsumptionResponse"))
-		{	*type = SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse;
-			return soap_in_dss__ModulatorGetPowerConsumptionResponse(soap, NULL, NULL, NULL);
+		if (!soap_match_tag(soap, t, "dss:DSMeterGetPowerConsumptionResponse"))
+		{	*type = SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse;
+			return soap_in_dss__DSMeterGetPowerConsumptionResponse(soap, NULL, NULL, NULL);
 		}
 		if (!soap_match_tag(soap, t, "dss:DeviceGetZoneID"))
 		{	*type = SOAP_TYPE_dss__DeviceGetZoneID;
@@ -1456,18 +1456,18 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, co
 		return soap_out_dss__ApartmentAllocateZone(soap, tag, id, (const struct dss__ApartmentAllocateZone *)ptr, "dss:ApartmentAllocateZone");
 	case SOAP_TYPE_dss__ApartmentAllocateZoneResponse:
 		return soap_out_dss__ApartmentAllocateZoneResponse(soap, tag, id, (const struct dss__ApartmentAllocateZoneResponse *)ptr, "dss:ApartmentAllocateZoneResponse");
-	case SOAP_TYPE_dss__ModulatorGetName:
-		return soap_out_dss__ModulatorGetName(soap, tag, id, (const struct dss__ModulatorGetName *)ptr, "dss:ModulatorGetName");
-	case SOAP_TYPE_dss__ModulatorGetNameResponse:
-		return soap_out_dss__ModulatorGetNameResponse(soap, tag, id, (const struct dss__ModulatorGetNameResponse *)ptr, "dss:ModulatorGetNameResponse");
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDs:
-		return soap_out_dss__ApartmentGetModulatorIDs(soap, tag, id, (const struct dss__ApartmentGetModulatorIDs *)ptr, "dss:ApartmentGetModulatorIDs");
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse:
-		return soap_out_dss__ApartmentGetModulatorIDsResponse(soap, tag, id, (const struct dss__ApartmentGetModulatorIDsResponse *)ptr, "dss:ApartmentGetModulatorIDsResponse");
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
-		return soap_out_dss__ModulatorGetPowerConsumption(soap, tag, id, (const struct dss__ModulatorGetPowerConsumption *)ptr, "dss:ModulatorGetPowerConsumption");
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
-		return soap_out_dss__ModulatorGetPowerConsumptionResponse(soap, tag, id, (const struct dss__ModulatorGetPowerConsumptionResponse *)ptr, "dss:ModulatorGetPowerConsumptionResponse");
+	case SOAP_TYPE_dss__DSMeterGetName:
+		return soap_out_dss__DSMeterGetName(soap, tag, id, (const struct dss__DSMeterGetName *)ptr, "dss:DSMeterGetName");
+	case SOAP_TYPE_dss__DSMeterGetNameResponse:
+		return soap_out_dss__DSMeterGetNameResponse(soap, tag, id, (const struct dss__DSMeterGetNameResponse *)ptr, "dss:DSMeterGetNameResponse");
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDs:
+		return soap_out_dss__ApartmentGetDSMeterIDs(soap, tag, id, (const struct dss__ApartmentGetDSMeterIDs *)ptr, "dss:ApartmentGetDSMeterIDs");
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse:
+		return soap_out_dss__ApartmentGetDSMeterIDsResponse(soap, tag, id, (const struct dss__ApartmentGetDSMeterIDsResponse *)ptr, "dss:ApartmentGetDSMeterIDsResponse");
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumption:
+		return soap_out_dss__DSMeterGetPowerConsumption(soap, tag, id, (const struct dss__DSMeterGetPowerConsumption *)ptr, "dss:DSMeterGetPowerConsumption");
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse:
+		return soap_out_dss__DSMeterGetPowerConsumptionResponse(soap, tag, id, (const struct dss__DSMeterGetPowerConsumptionResponse *)ptr, "dss:DSMeterGetPowerConsumptionResponse");
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return soap_out_dss__DeviceGetZoneID(soap, tag, id, (const struct dss__DeviceGetZoneID *)ptr, "dss:DeviceGetZoneID");
 	case SOAP_TYPE_dss__DeviceGetZoneIDResponse:
@@ -1871,23 +1871,23 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr,
 	case SOAP_TYPE_dss__ApartmentAllocateZoneResponse:
 		soap_serialize_dss__ApartmentAllocateZoneResponse(soap, (const struct dss__ApartmentAllocateZoneResponse *)ptr);
 		break;
-	case SOAP_TYPE_dss__ModulatorGetName:
-		soap_serialize_dss__ModulatorGetName(soap, (const struct dss__ModulatorGetName *)ptr);
+	case SOAP_TYPE_dss__DSMeterGetName:
+		soap_serialize_dss__DSMeterGetName(soap, (const struct dss__DSMeterGetName *)ptr);
 		break;
-	case SOAP_TYPE_dss__ModulatorGetNameResponse:
-		soap_serialize_dss__ModulatorGetNameResponse(soap, (const struct dss__ModulatorGetNameResponse *)ptr);
+	case SOAP_TYPE_dss__DSMeterGetNameResponse:
+		soap_serialize_dss__DSMeterGetNameResponse(soap, (const struct dss__DSMeterGetNameResponse *)ptr);
 		break;
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDs:
-		soap_serialize_dss__ApartmentGetModulatorIDs(soap, (const struct dss__ApartmentGetModulatorIDs *)ptr);
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDs:
+		soap_serialize_dss__ApartmentGetDSMeterIDs(soap, (const struct dss__ApartmentGetDSMeterIDs *)ptr);
 		break;
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse:
-		soap_serialize_dss__ApartmentGetModulatorIDsResponse(soap, (const struct dss__ApartmentGetModulatorIDsResponse *)ptr);
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse:
+		soap_serialize_dss__ApartmentGetDSMeterIDsResponse(soap, (const struct dss__ApartmentGetDSMeterIDsResponse *)ptr);
 		break;
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
-		soap_serialize_dss__ModulatorGetPowerConsumption(soap, (const struct dss__ModulatorGetPowerConsumption *)ptr);
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumption:
+		soap_serialize_dss__DSMeterGetPowerConsumption(soap, (const struct dss__DSMeterGetPowerConsumption *)ptr);
 		break;
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
-		soap_serialize_dss__ModulatorGetPowerConsumptionResponse(soap, (const struct dss__ModulatorGetPowerConsumptionResponse *)ptr);
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse:
+		soap_serialize_dss__DSMeterGetPowerConsumptionResponse(soap, (const struct dss__DSMeterGetPowerConsumptionResponse *)ptr);
 		break;
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		soap_serialize_dss__DeviceGetZoneID(soap, (const struct dss__DeviceGetZoneID *)ptr);
@@ -2512,18 +2512,18 @@ SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const ch
 		return (void*)soap_instantiate_dss__DeviceGetZoneIDResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__DeviceGetZoneID:
 		return (void*)soap_instantiate_dss__DeviceGetZoneID(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
-		return (void*)soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
-		return (void*)soap_instantiate_dss__ModulatorGetPowerConsumption(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse:
-		return (void*)soap_instantiate_dss__ApartmentGetModulatorIDsResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDs:
-		return (void*)soap_instantiate_dss__ApartmentGetModulatorIDs(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ModulatorGetNameResponse:
-		return (void*)soap_instantiate_dss__ModulatorGetNameResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_dss__ModulatorGetName:
-		return (void*)soap_instantiate_dss__ModulatorGetName(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse:
+		return (void*)soap_instantiate_dss__DSMeterGetPowerConsumptionResponse(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumption:
+		return (void*)soap_instantiate_dss__DSMeterGetPowerConsumption(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse:
+		return (void*)soap_instantiate_dss__ApartmentGetDSMeterIDsResponse(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDs:
+		return (void*)soap_instantiate_dss__ApartmentGetDSMeterIDs(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__DSMeterGetNameResponse:
+		return (void*)soap_instantiate_dss__DSMeterGetNameResponse(soap, -1, type, arrayType, n);
+	case SOAP_TYPE_dss__DSMeterGetName:
+		return (void*)soap_instantiate_dss__DSMeterGetName(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__ApartmentAllocateZoneResponse:
 		return (void*)soap_instantiate_dss__ApartmentAllocateZoneResponse(soap, -1, type, arrayType, n);
 	case SOAP_TYPE_dss__ApartmentAllocateZone:
@@ -3373,41 +3373,41 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
 		else
 			delete[] (struct dss__DeviceGetZoneID*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse:
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse:
 		if (p->size < 0)
-			delete (struct dss__ModulatorGetPowerConsumptionResponse*)p->ptr;
+			delete (struct dss__DSMeterGetPowerConsumptionResponse*)p->ptr;
 		else
-			delete[] (struct dss__ModulatorGetPowerConsumptionResponse*)p->ptr;
+			delete[] (struct dss__DSMeterGetPowerConsumptionResponse*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ModulatorGetPowerConsumption:
+	case SOAP_TYPE_dss__DSMeterGetPowerConsumption:
 		if (p->size < 0)
-			delete (struct dss__ModulatorGetPowerConsumption*)p->ptr;
+			delete (struct dss__DSMeterGetPowerConsumption*)p->ptr;
 		else
-			delete[] (struct dss__ModulatorGetPowerConsumption*)p->ptr;
+			delete[] (struct dss__DSMeterGetPowerConsumption*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse:
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse:
 		if (p->size < 0)
-			delete (struct dss__ApartmentGetModulatorIDsResponse*)p->ptr;
+			delete (struct dss__ApartmentGetDSMeterIDsResponse*)p->ptr;
 		else
-			delete[] (struct dss__ApartmentGetModulatorIDsResponse*)p->ptr;
+			delete[] (struct dss__ApartmentGetDSMeterIDsResponse*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ApartmentGetModulatorIDs:
+	case SOAP_TYPE_dss__ApartmentGetDSMeterIDs:
 		if (p->size < 0)
-			delete (struct dss__ApartmentGetModulatorIDs*)p->ptr;
+			delete (struct dss__ApartmentGetDSMeterIDs*)p->ptr;
 		else
-			delete[] (struct dss__ApartmentGetModulatorIDs*)p->ptr;
+			delete[] (struct dss__ApartmentGetDSMeterIDs*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ModulatorGetNameResponse:
+	case SOAP_TYPE_dss__DSMeterGetNameResponse:
 		if (p->size < 0)
-			delete (struct dss__ModulatorGetNameResponse*)p->ptr;
+			delete (struct dss__DSMeterGetNameResponse*)p->ptr;
 		else
-			delete[] (struct dss__ModulatorGetNameResponse*)p->ptr;
+			delete[] (struct dss__DSMeterGetNameResponse*)p->ptr;
 		break;
-	case SOAP_TYPE_dss__ModulatorGetName:
+	case SOAP_TYPE_dss__DSMeterGetName:
 		if (p->size < 0)
-			delete (struct dss__ModulatorGetName*)p->ptr;
+			delete (struct dss__DSMeterGetName*)p->ptr;
 		else
-			delete[] (struct dss__ModulatorGetName*)p->ptr;
+			delete[] (struct dss__DSMeterGetName*)p->ptr;
 		break;
 	case SOAP_TYPE_dss__ApartmentAllocateZoneResponse:
 		if (p->size < 0)
@@ -10325,55 +10325,55 @@ SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateZoneResponse(struct s
 	*(struct dss__ApartmentAllocateZoneResponse*)p = *(struct dss__ApartmentAllocateZoneResponse*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetName(struct soap *soap, struct dss__ModulatorGetName *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetName(struct soap *soap, struct dss__DSMeterGetName *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_int(soap, &a->_token);
-	soap_default_string(soap, &a->_modulatorID);
+	soap_default_string(soap, &a->_dsMeterID);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetName(struct soap *soap, const struct dss__ModulatorGetName *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetName(struct soap *soap, const struct dss__DSMeterGetName *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->_modulatorID);
+	soap_serialize_string(soap, &a->_dsMeterID);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetName(struct soap *soap, const struct dss__ModulatorGetName *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetName(struct soap *soap, const struct dss__DSMeterGetName *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ModulatorGetName);
-	if (soap_out_dss__ModulatorGetName(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DSMeterGetName);
+	if (soap_out_dss__DSMeterGetName(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetName(struct soap *soap, const char *tag, int id, const struct dss__ModulatorGetName *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetName(struct soap *soap, const char *tag, int id, const struct dss__DSMeterGetName *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ModulatorGetName), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DSMeterGetName), type))
 		return soap->error;
 	if (soap_out_int(soap, "token", -1, &a->_token, ""))
 		return soap->error;
-	if (soap_out_string(soap, "modulatorID", -1, &a->_modulatorID, ""))
+	if (soap_out_string(soap, "dsMeterID", -1, &a->_dsMeterID, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_get_dss__ModulatorGetName(struct soap *soap, struct dss__ModulatorGetName *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_get_dss__DSMeterGetName(struct soap *soap, struct dss__DSMeterGetName *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ModulatorGetName(soap, tag, p, type)))
+	if ((p = soap_in_dss__DSMeterGetName(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_in_dss__ModulatorGetName(struct soap *soap, const char *tag, struct dss__ModulatorGetName *a, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_in_dss__DSMeterGetName(struct soap *soap, const char *tag, struct dss__DSMeterGetName *a, const char *type)
 {
-	short soap_flag__token = 1, soap_flag__modulatorID = 1;
+	short soap_flag__token = 1, soap_flag__dsMeterID = 1;
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ModulatorGetName *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ModulatorGetName, sizeof(struct dss__ModulatorGetName), 0, NULL, NULL, NULL);
+	a = (struct dss__DSMeterGetName *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DSMeterGetName, sizeof(struct dss__DSMeterGetName), 0, NULL, NULL, NULL);
 	if (!a)
 		return NULL;
-	soap_default_dss__ModulatorGetName(soap, a);
+	soap_default_dss__DSMeterGetName(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10383,9 +10383,9 @@ SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_in_dss__ModulatorGetNa
 				{	soap_flag__token--;
 					continue;
 				}
-			if (soap_flag__modulatorID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, NULL, &a->_modulatorID, "xsd:string"))
-				{	soap_flag__modulatorID--;
+			if (soap_flag__dsMeterID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
+				if (soap_in_string(soap, NULL, &a->_dsMeterID, "xsd:string"))
+				{	soap_flag__dsMeterID--;
 					continue;
 				}
 			if (soap->error == SOAP_TAG_MISMATCH)
@@ -10399,7 +10399,7 @@ SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_in_dss__ModulatorGetNa
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ModulatorGetName *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ModulatorGetName, 0, sizeof(struct dss__ModulatorGetName), 0, NULL);
+	{	a = (struct dss__DSMeterGetName *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DSMeterGetName, 0, sizeof(struct dss__DSMeterGetName), 0, NULL);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
@@ -10410,89 +10410,89 @@ SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_in_dss__ModulatorGetNa
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ModulatorGetName * SOAP_FMAC6 soap_new_dss__ModulatorGetName(struct soap *soap, int n)
-{	return soap_instantiate_dss__ModulatorGetName(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__DSMeterGetName * SOAP_FMAC6 soap_new_dss__DSMeterGetName(struct soap *soap, int n)
+{	return soap_instantiate_dss__DSMeterGetName(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetName(struct soap *soap, struct dss__ModulatorGetName *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetName(struct soap *soap, struct dss__DSMeterGetName *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetName(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetName(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ModulatorGetName(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ModulatorGetName, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DSMeterGetName(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DSMeterGetName, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ModulatorGetName;
+	{	cp->ptr = (void*)new struct dss__DSMeterGetName;
 		if (size)
-			*size = sizeof(struct dss__ModulatorGetName);
+			*size = sizeof(struct dss__DSMeterGetName);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ModulatorGetName[n];
+	{	cp->ptr = (void*)new struct dss__DSMeterGetName[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ModulatorGetName);
+			*size = n * sizeof(struct dss__DSMeterGetName);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ModulatorGetName*)cp->ptr;
+	return (struct dss__DSMeterGetName*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetName(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetName(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ModulatorGetName %p -> %p\n", q, p));
-	*(struct dss__ModulatorGetName*)p = *(struct dss__ModulatorGetName*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DSMeterGetName %p -> %p\n", q, p));
+	*(struct dss__DSMeterGetName*)p = *(struct dss__DSMeterGetName*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetNameResponse(struct soap *soap, struct dss__ModulatorGetNameResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetNameResponse(struct soap *soap, struct dss__DSMeterGetNameResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_std__string(soap, &a->name);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetNameResponse(struct soap *soap, const struct dss__ModulatorGetNameResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetNameResponse(struct soap *soap, const struct dss__DSMeterGetNameResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_serialize_std__string(soap, &a->name);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetNameResponse(struct soap *soap, const struct dss__ModulatorGetNameResponse *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetNameResponse(struct soap *soap, const struct dss__DSMeterGetNameResponse *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ModulatorGetNameResponse);
-	if (soap_out_dss__ModulatorGetNameResponse(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DSMeterGetNameResponse);
+	if (soap_out_dss__DSMeterGetNameResponse(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetNameResponse(struct soap *soap, const char *tag, int id, const struct dss__ModulatorGetNameResponse *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetNameResponse(struct soap *soap, const char *tag, int id, const struct dss__DSMeterGetNameResponse *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ModulatorGetNameResponse), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DSMeterGetNameResponse), type))
 		return soap->error;
 	if (soap_out_std__string(soap, "name", -1, &a->name, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_get_dss__ModulatorGetNameResponse(struct soap *soap, struct dss__ModulatorGetNameResponse *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_get_dss__DSMeterGetNameResponse(struct soap *soap, struct dss__DSMeterGetNameResponse *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ModulatorGetNameResponse(soap, tag, p, type)))
+	if ((p = soap_in_dss__DSMeterGetNameResponse(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_in_dss__ModulatorGetNameResponse(struct soap *soap, const char *tag, struct dss__ModulatorGetNameResponse *a, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_in_dss__DSMeterGetNameResponse(struct soap *soap, const char *tag, struct dss__DSMeterGetNameResponse *a, const char *type)
 {
 	short soap_flag_name = 1;
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ModulatorGetNameResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ModulatorGetNameResponse, sizeof(struct dss__ModulatorGetNameResponse), soap->type, soap->arrayType);
+	a = (struct dss__DSMeterGetNameResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DSMeterGetNameResponse, sizeof(struct dss__DSMeterGetNameResponse), soap->type, soap->arrayType);
 	if (!a)
 		return NULL;
-	soap_default_dss__ModulatorGetNameResponse(soap, a);
+	soap_default_dss__DSMeterGetNameResponse(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10513,7 +10513,7 @@ SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_in_dss__Modula
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ModulatorGetNameResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ModulatorGetNameResponse, 0, sizeof(struct dss__ModulatorGetNameResponse), 0, soap_copy_dss__ModulatorGetNameResponse);
+	{	a = (struct dss__DSMeterGetNameResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DSMeterGetNameResponse, 0, sizeof(struct dss__DSMeterGetNameResponse), 0, soap_copy_dss__DSMeterGetNameResponse);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
@@ -10524,88 +10524,88 @@ SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_in_dss__Modula
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ModulatorGetNameResponse * SOAP_FMAC6 soap_new_dss__ModulatorGetNameResponse(struct soap *soap, int n)
-{	return soap_instantiate_dss__ModulatorGetNameResponse(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__DSMeterGetNameResponse * SOAP_FMAC6 soap_new_dss__DSMeterGetNameResponse(struct soap *soap, int n)
+{	return soap_instantiate_dss__DSMeterGetNameResponse(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetNameResponse(struct soap *soap, struct dss__ModulatorGetNameResponse *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetNameResponse(struct soap *soap, struct dss__DSMeterGetNameResponse *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetNameResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetNameResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ModulatorGetNameResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ModulatorGetNameResponse, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DSMeterGetNameResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DSMeterGetNameResponse, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ModulatorGetNameResponse;
+	{	cp->ptr = (void*)new struct dss__DSMeterGetNameResponse;
 		if (size)
-			*size = sizeof(struct dss__ModulatorGetNameResponse);
+			*size = sizeof(struct dss__DSMeterGetNameResponse);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ModulatorGetNameResponse[n];
+	{	cp->ptr = (void*)new struct dss__DSMeterGetNameResponse[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ModulatorGetNameResponse);
+			*size = n * sizeof(struct dss__DSMeterGetNameResponse);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ModulatorGetNameResponse*)cp->ptr;
+	return (struct dss__DSMeterGetNameResponse*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetNameResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetNameResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ModulatorGetNameResponse %p -> %p\n", q, p));
-	*(struct dss__ModulatorGetNameResponse*)p = *(struct dss__ModulatorGetNameResponse*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DSMeterGetNameResponse %p -> %p\n", q, p));
+	*(struct dss__DSMeterGetNameResponse*)p = *(struct dss__DSMeterGetNameResponse*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDs(struct soap *soap, struct dss__ApartmentGetModulatorIDs *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetDSMeterIDs(struct soap *soap, struct dss__ApartmentGetDSMeterIDs *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_int(soap, &a->_token);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDs(struct soap *soap, const struct dss__ApartmentGetModulatorIDs *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetDSMeterIDs(struct soap *soap, const struct dss__ApartmentGetDSMeterIDs *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetModulatorIDs(struct soap *soap, const struct dss__ApartmentGetModulatorIDs *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetDSMeterIDs(struct soap *soap, const struct dss__ApartmentGetDSMeterIDs *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ApartmentGetModulatorIDs);
-	if (soap_out_dss__ApartmentGetModulatorIDs(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ApartmentGetDSMeterIDs);
+	if (soap_out_dss__ApartmentGetDSMeterIDs(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetModulatorIDs(struct soap *soap, const char *tag, int id, const struct dss__ApartmentGetModulatorIDs *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetDSMeterIDs(struct soap *soap, const char *tag, int id, const struct dss__ApartmentGetDSMeterIDs *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ApartmentGetModulatorIDs), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ApartmentGetDSMeterIDs), type))
 		return soap->error;
 	if (soap_out_int(soap, "token", -1, &a->_token, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_get_dss__ApartmentGetModulatorIDs(struct soap *soap, struct dss__ApartmentGetModulatorIDs *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_get_dss__ApartmentGetDSMeterIDs(struct soap *soap, struct dss__ApartmentGetDSMeterIDs *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ApartmentGetModulatorIDs(soap, tag, p, type)))
+	if ((p = soap_in_dss__ApartmentGetDSMeterIDs(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_in_dss__ApartmentGetModulatorIDs(struct soap *soap, const char *tag, struct dss__ApartmentGetModulatorIDs *a, const char *type)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_in_dss__ApartmentGetDSMeterIDs(struct soap *soap, const char *tag, struct dss__ApartmentGetDSMeterIDs *a, const char *type)
 {
 	short soap_flag__token = 1;
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ApartmentGetModulatorIDs *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ApartmentGetModulatorIDs, sizeof(struct dss__ApartmentGetModulatorIDs), 0, NULL, NULL, NULL);
+	a = (struct dss__ApartmentGetDSMeterIDs *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ApartmentGetDSMeterIDs, sizeof(struct dss__ApartmentGetDSMeterIDs), 0, NULL, NULL, NULL);
 	if (!a)
 		return NULL;
-	soap_default_dss__ApartmentGetModulatorIDs(soap, a);
+	soap_default_dss__ApartmentGetDSMeterIDs(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10626,7 +10626,7 @@ SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_in_dss__Apartm
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ApartmentGetModulatorIDs *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ApartmentGetModulatorIDs, 0, sizeof(struct dss__ApartmentGetModulatorIDs), 0, NULL);
+	{	a = (struct dss__ApartmentGetDSMeterIDs *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ApartmentGetDSMeterIDs, 0, sizeof(struct dss__ApartmentGetDSMeterIDs), 0, NULL);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
@@ -10637,88 +10637,88 @@ SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_in_dss__Apartm
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC6 soap_new_dss__ApartmentGetModulatorIDs(struct soap *soap, int n)
-{	return soap_instantiate_dss__ApartmentGetModulatorIDs(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC6 soap_new_dss__ApartmentGetDSMeterIDs(struct soap *soap, int n)
+{	return soap_instantiate_dss__ApartmentGetDSMeterIDs(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetModulatorIDs(struct soap *soap, struct dss__ApartmentGetModulatorIDs *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetDSMeterIDs(struct soap *soap, struct dss__ApartmentGetDSMeterIDs *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetModulatorIDs(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetDSMeterIDs(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ApartmentGetModulatorIDs(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ApartmentGetModulatorIDs, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ApartmentGetDSMeterIDs(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ApartmentGetDSMeterIDs, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ApartmentGetModulatorIDs;
+	{	cp->ptr = (void*)new struct dss__ApartmentGetDSMeterIDs;
 		if (size)
-			*size = sizeof(struct dss__ApartmentGetModulatorIDs);
+			*size = sizeof(struct dss__ApartmentGetDSMeterIDs);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ApartmentGetModulatorIDs[n];
+	{	cp->ptr = (void*)new struct dss__ApartmentGetDSMeterIDs[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ApartmentGetModulatorIDs);
+			*size = n * sizeof(struct dss__ApartmentGetDSMeterIDs);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ApartmentGetModulatorIDs*)cp->ptr;
+	return (struct dss__ApartmentGetDSMeterIDs*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDs(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetDSMeterIDs(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ApartmentGetModulatorIDs %p -> %p\n", q, p));
-	*(struct dss__ApartmentGetModulatorIDs*)p = *(struct dss__ApartmentGetModulatorIDs*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ApartmentGetDSMeterIDs %p -> %p\n", q, p));
+	*(struct dss__ApartmentGetDSMeterIDs*)p = *(struct dss__ApartmentGetDSMeterIDs*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, struct dss__ApartmentGetModulatorIDsResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, struct dss__ApartmentGetDSMeterIDsResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_std__vectorTemplateOfstd__string(soap, &a->ids);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, const struct dss__ApartmentGetModulatorIDsResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, const struct dss__ApartmentGetDSMeterIDsResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_serialize_std__vectorTemplateOfstd__string(soap, &a->ids);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, const struct dss__ApartmentGetModulatorIDsResponse *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, const struct dss__ApartmentGetDSMeterIDsResponse *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse);
-	if (soap_out_dss__ApartmentGetModulatorIDsResponse(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse);
+	if (soap_out_dss__ApartmentGetDSMeterIDsResponse(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, const char *tag, int id, const struct dss__ApartmentGetModulatorIDsResponse *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, const char *tag, int id, const struct dss__ApartmentGetDSMeterIDsResponse *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse), type))
 		return soap->error;
 	if (soap_out_std__vectorTemplateOfstd__string(soap, "ids", -1, &a->ids, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_get_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, struct dss__ApartmentGetModulatorIDsResponse *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_get_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, struct dss__ApartmentGetDSMeterIDsResponse *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ApartmentGetModulatorIDsResponse(soap, tag, p, type)))
+	if ((p = soap_in_dss__ApartmentGetDSMeterIDsResponse(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_in_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, const char *tag, struct dss__ApartmentGetModulatorIDsResponse *a, const char *type)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_in_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, const char *tag, struct dss__ApartmentGetDSMeterIDsResponse *a, const char *type)
 {
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ApartmentGetModulatorIDsResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse, sizeof(struct dss__ApartmentGetModulatorIDsResponse), soap->type, soap->arrayType);
+	a = (struct dss__ApartmentGetDSMeterIDsResponse *)soap_class_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse, sizeof(struct dss__ApartmentGetDSMeterIDsResponse), soap->type, soap->arrayType);
 	if (!a)
 		return NULL;
-	soap_default_dss__ApartmentGetModulatorIDsResponse(soap, a);
+	soap_default_dss__ApartmentGetDSMeterIDsResponse(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10737,98 +10737,98 @@ SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_in_dss
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ApartmentGetModulatorIDsResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse, 0, sizeof(struct dss__ApartmentGetModulatorIDsResponse), 0, soap_copy_dss__ApartmentGetModulatorIDsResponse);
+	{	a = (struct dss__ApartmentGetDSMeterIDsResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse, 0, sizeof(struct dss__ApartmentGetDSMeterIDsResponse), 0, soap_copy_dss__ApartmentGetDSMeterIDsResponse);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC6 soap_new_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, int n)
-{	return soap_instantiate_dss__ApartmentGetModulatorIDsResponse(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC6 soap_new_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, int n)
+{	return soap_instantiate_dss__ApartmentGetDSMeterIDsResponse(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, struct dss__ApartmentGetModulatorIDsResponse *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, struct dss__ApartmentGetDSMeterIDsResponse *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ApartmentGetModulatorIDsResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ApartmentGetDSMeterIDsResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ApartmentGetModulatorIDsResponse;
+	{	cp->ptr = (void*)new struct dss__ApartmentGetDSMeterIDsResponse;
 		if (size)
-			*size = sizeof(struct dss__ApartmentGetModulatorIDsResponse);
+			*size = sizeof(struct dss__ApartmentGetDSMeterIDsResponse);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ApartmentGetModulatorIDsResponse[n];
+	{	cp->ptr = (void*)new struct dss__ApartmentGetDSMeterIDsResponse[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ApartmentGetModulatorIDsResponse);
+			*size = n * sizeof(struct dss__ApartmentGetDSMeterIDsResponse);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ApartmentGetModulatorIDsResponse*)cp->ptr;
+	return (struct dss__ApartmentGetDSMeterIDsResponse*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDsResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetDSMeterIDsResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ApartmentGetModulatorIDsResponse %p -> %p\n", q, p));
-	*(struct dss__ApartmentGetModulatorIDsResponse*)p = *(struct dss__ApartmentGetModulatorIDsResponse*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ApartmentGetDSMeterIDsResponse %p -> %p\n", q, p));
+	*(struct dss__ApartmentGetDSMeterIDsResponse*)p = *(struct dss__ApartmentGetDSMeterIDsResponse*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumption(struct soap *soap, struct dss__ModulatorGetPowerConsumption *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetPowerConsumption(struct soap *soap, struct dss__DSMeterGetPowerConsumption *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_int(soap, &a->_token);
-	soap_default_int(soap, &a->_modulatorID);
+	soap_default_int(soap, &a->_dsMeterID);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumption(struct soap *soap, const struct dss__ModulatorGetPowerConsumption *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetPowerConsumption(struct soap *soap, const struct dss__DSMeterGetPowerConsumption *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetPowerConsumption(struct soap *soap, const struct dss__ModulatorGetPowerConsumption *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetPowerConsumption(struct soap *soap, const struct dss__DSMeterGetPowerConsumption *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ModulatorGetPowerConsumption);
-	if (soap_out_dss__ModulatorGetPowerConsumption(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DSMeterGetPowerConsumption);
+	if (soap_out_dss__DSMeterGetPowerConsumption(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetPowerConsumption(struct soap *soap, const char *tag, int id, const struct dss__ModulatorGetPowerConsumption *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetPowerConsumption(struct soap *soap, const char *tag, int id, const struct dss__DSMeterGetPowerConsumption *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ModulatorGetPowerConsumption), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DSMeterGetPowerConsumption), type))
 		return soap->error;
 	if (soap_out_int(soap, "token", -1, &a->_token, ""))
 		return soap->error;
-	if (soap_out_int(soap, "modulatorID", -1, &a->_modulatorID, ""))
+	if (soap_out_int(soap, "dsMeterID", -1, &a->_dsMeterID, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_get_dss__ModulatorGetPowerConsumption(struct soap *soap, struct dss__ModulatorGetPowerConsumption *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_get_dss__DSMeterGetPowerConsumption(struct soap *soap, struct dss__DSMeterGetPowerConsumption *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ModulatorGetPowerConsumption(soap, tag, p, type)))
+	if ((p = soap_in_dss__DSMeterGetPowerConsumption(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_in_dss__ModulatorGetPowerConsumption(struct soap *soap, const char *tag, struct dss__ModulatorGetPowerConsumption *a, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_in_dss__DSMeterGetPowerConsumption(struct soap *soap, const char *tag, struct dss__DSMeterGetPowerConsumption *a, const char *type)
 {
-	short soap_flag__token = 1, soap_flag__modulatorID = 1;
+	short soap_flag__token = 1, soap_flag__dsMeterID = 1;
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ModulatorGetPowerConsumption *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ModulatorGetPowerConsumption, sizeof(struct dss__ModulatorGetPowerConsumption), 0, NULL, NULL, NULL);
+	a = (struct dss__DSMeterGetPowerConsumption *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DSMeterGetPowerConsumption, sizeof(struct dss__DSMeterGetPowerConsumption), 0, NULL, NULL, NULL);
 	if (!a)
 		return NULL;
-	soap_default_dss__ModulatorGetPowerConsumption(soap, a);
+	soap_default_dss__DSMeterGetPowerConsumption(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10838,9 +10838,9 @@ SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_in_dss__Mo
 				{	soap_flag__token--;
 					continue;
 				}
-			if (soap_flag__modulatorID && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_int(soap, NULL, &a->_modulatorID, "xsd:int"))
-				{	soap_flag__modulatorID--;
+			if (soap_flag__dsMeterID && soap->error == SOAP_TAG_MISMATCH)
+				if (soap_in_int(soap, NULL, &a->_dsMeterID, "xsd:int"))
+				{	soap_flag__dsMeterID--;
 					continue;
 				}
 			if (soap->error == SOAP_TAG_MISMATCH)
@@ -10854,99 +10854,99 @@ SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_in_dss__Mo
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ModulatorGetPowerConsumption *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ModulatorGetPowerConsumption, 0, sizeof(struct dss__ModulatorGetPowerConsumption), 0, NULL);
+	{	a = (struct dss__DSMeterGetPowerConsumption *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DSMeterGetPowerConsumption, 0, sizeof(struct dss__DSMeterGetPowerConsumption), 0, NULL);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0 || soap_flag__modulatorID > 0))
+	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag__token > 0 || soap_flag__dsMeterID > 0))
 	{	soap->error = SOAP_OCCURS;
 		return NULL;
 	}
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC6 soap_new_dss__ModulatorGetPowerConsumption(struct soap *soap, int n)
-{	return soap_instantiate_dss__ModulatorGetPowerConsumption(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC6 soap_new_dss__DSMeterGetPowerConsumption(struct soap *soap, int n)
+{	return soap_instantiate_dss__DSMeterGetPowerConsumption(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetPowerConsumption(struct soap *soap, struct dss__ModulatorGetPowerConsumption *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetPowerConsumption(struct soap *soap, struct dss__DSMeterGetPowerConsumption *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetPowerConsumption(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetPowerConsumption(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ModulatorGetPowerConsumption(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ModulatorGetPowerConsumption, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DSMeterGetPowerConsumption(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DSMeterGetPowerConsumption, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ModulatorGetPowerConsumption;
+	{	cp->ptr = (void*)new struct dss__DSMeterGetPowerConsumption;
 		if (size)
-			*size = sizeof(struct dss__ModulatorGetPowerConsumption);
+			*size = sizeof(struct dss__DSMeterGetPowerConsumption);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ModulatorGetPowerConsumption[n];
+	{	cp->ptr = (void*)new struct dss__DSMeterGetPowerConsumption[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ModulatorGetPowerConsumption);
+			*size = n * sizeof(struct dss__DSMeterGetPowerConsumption);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ModulatorGetPowerConsumption*)cp->ptr;
+	return (struct dss__DSMeterGetPowerConsumption*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumption(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetPowerConsumption(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ModulatorGetPowerConsumption %p -> %p\n", q, p));
-	*(struct dss__ModulatorGetPowerConsumption*)p = *(struct dss__ModulatorGetPowerConsumption*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DSMeterGetPowerConsumption %p -> %p\n", q, p));
+	*(struct dss__DSMeterGetPowerConsumption*)p = *(struct dss__DSMeterGetPowerConsumption*)q;
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, struct dss__ModulatorGetPowerConsumptionResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, struct dss__DSMeterGetPowerConsumptionResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 	soap_default_xsd__unsignedInt(soap, &a->result);
 }
 
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, const struct dss__ModulatorGetPowerConsumptionResponse *a)
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, const struct dss__DSMeterGetPowerConsumptionResponse *a)
 {
 	(void)soap; (void)a; /* appease -Wall -Werror */
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, const struct dss__ModulatorGetPowerConsumptionResponse *a, const char *tag, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, const struct dss__DSMeterGetPowerConsumptionResponse *a, const char *tag, const char *type)
 {
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse);
-	if (soap_out_dss__ModulatorGetPowerConsumptionResponse(soap, tag, id, a, type))
+	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse);
+	if (soap_out_dss__DSMeterGetPowerConsumptionResponse(soap, tag, id, a, type))
 		return soap->error;
 	return soap_putindependent(soap);
 }
 
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, const char *tag, int id, const struct dss__ModulatorGetPowerConsumptionResponse *a, const char *type)
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, const char *tag, int id, const struct dss__DSMeterGetPowerConsumptionResponse *a, const char *type)
 {
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse), type))
+	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse), type))
 		return soap->error;
 	if (soap_out_xsd__unsignedInt(soap, "result", -1, &a->result, ""))
 		return soap->error;
 	return soap_element_end_out(soap, tag);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_get_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, struct dss__ModulatorGetPowerConsumptionResponse *p, const char *tag, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_get_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, struct dss__DSMeterGetPowerConsumptionResponse *p, const char *tag, const char *type)
 {
-	if ((p = soap_in_dss__ModulatorGetPowerConsumptionResponse(soap, tag, p, type)))
+	if ((p = soap_in_dss__DSMeterGetPowerConsumptionResponse(soap, tag, p, type)))
 		if (soap_getindependent(soap))
 			return NULL;
 	return p;
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_in_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, const char *tag, struct dss__ModulatorGetPowerConsumptionResponse *a, const char *type)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_in_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, const char *tag, struct dss__DSMeterGetPowerConsumptionResponse *a, const char *type)
 {
 	short soap_flag_result = 1;
 	if (soap_element_begin_in(soap, tag, 0, type))
 		return NULL;
-	a = (struct dss__ModulatorGetPowerConsumptionResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse, sizeof(struct dss__ModulatorGetPowerConsumptionResponse), 0, NULL, NULL, NULL);
+	a = (struct dss__DSMeterGetPowerConsumptionResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse, sizeof(struct dss__DSMeterGetPowerConsumptionResponse), 0, NULL, NULL, NULL);
 	if (!a)
 		return NULL;
-	soap_default_dss__ModulatorGetPowerConsumptionResponse(soap, a);
+	soap_default_dss__DSMeterGetPowerConsumptionResponse(soap, a);
 	if (soap->body && !*soap->href)
 	{
 		for (;;)
@@ -10967,7 +10967,7 @@ SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_in
 			return NULL;
 	}
 	else
-	{	a = (struct dss__ModulatorGetPowerConsumptionResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse, 0, sizeof(struct dss__ModulatorGetPowerConsumptionResponse), 0, NULL);
+	{	a = (struct dss__DSMeterGetPowerConsumptionResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse, 0, sizeof(struct dss__DSMeterGetPowerConsumptionResponse), 0, NULL);
 		if (soap->body && soap_element_end_in(soap, tag))
 			return NULL;
 	}
@@ -10978,41 +10978,41 @@ SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_in
 	return a;
 }
 
-SOAP_FMAC5 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC6 soap_new_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, int n)
-{	return soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(soap, n, NULL, NULL, NULL);
+SOAP_FMAC5 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC6 soap_new_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, int n)
+{	return soap_instantiate_dss__DSMeterGetPowerConsumptionResponse(soap, n, NULL, NULL, NULL);
 }
 
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, struct dss__ModulatorGetPowerConsumptionResponse *p)
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, struct dss__DSMeterGetPowerConsumptionResponse *p)
 {	soap_delete(soap, p);
 }
 
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse, n, soap_fdelete);
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_dss__DSMeterGetPowerConsumptionResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
+	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse, n, soap_fdelete);
 	if (!cp)
 		return NULL;
 	if (n < 0)
-	{	cp->ptr = (void*)new struct dss__ModulatorGetPowerConsumptionResponse;
+	{	cp->ptr = (void*)new struct dss__DSMeterGetPowerConsumptionResponse;
 		if (size)
-			*size = sizeof(struct dss__ModulatorGetPowerConsumptionResponse);
+			*size = sizeof(struct dss__DSMeterGetPowerConsumptionResponse);
 	}
 	else
-	{	cp->ptr = (void*)new struct dss__ModulatorGetPowerConsumptionResponse[n];
+	{	cp->ptr = (void*)new struct dss__DSMeterGetPowerConsumptionResponse[n];
 		if (!cp->ptr)
 		{	soap->error = SOAP_EOM;
 			return NULL;
 		}
 		if (size)
-			*size = n * sizeof(struct dss__ModulatorGetPowerConsumptionResponse);
+			*size = n * sizeof(struct dss__DSMeterGetPowerConsumptionResponse);
 	}
 		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct dss__ModulatorGetPowerConsumptionResponse*)cp->ptr;
+	return (struct dss__DSMeterGetPowerConsumptionResponse*)cp->ptr;
 }
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumptionResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetPowerConsumptionResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
 {
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__ModulatorGetPowerConsumptionResponse %p -> %p\n", q, p));
-	*(struct dss__ModulatorGetPowerConsumptionResponse*)p = *(struct dss__ModulatorGetPowerConsumptionResponse*)q;
+	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct dss__DSMeterGetPowerConsumptionResponse %p -> %p\n", q, p));
+	*(struct dss__DSMeterGetPowerConsumptionResponse*)p = *(struct dss__DSMeterGetPowerConsumptionResponse*)q;
 }
 
 SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DeviceGetZoneID(struct soap *soap, struct dss__DeviceGetZoneID *a)
diff --git a/webservices/soapH.h b/webservices/soapH.h
index bab05d1..e3cc6f2 100644
--- a/webservices/soapH.h
+++ b/webservices/soapH.h
@@ -868,89 +868,89 @@ SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentAllocateZoneResponse(struct
 SOAP_FMAC3 struct dss__ApartmentAllocateZoneResponse * SOAP_FMAC4 soap_instantiate_dss__ApartmentAllocateZoneResponse(struct soap*, int, const char*, const char*, size_t*);
 SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentAllocateZoneResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
-#ifndef SOAP_TYPE_dss__ModulatorGetName
-#define SOAP_TYPE_dss__ModulatorGetName (218)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetName(struct soap*, struct dss__ModulatorGetName *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetName(struct soap*, const struct dss__ModulatorGetName *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetName(struct soap*, const struct dss__ModulatorGetName *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetName(struct soap*, const char*, int, const struct dss__ModulatorGetName *, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_get_dss__ModulatorGetName(struct soap*, struct dss__ModulatorGetName *, const char*, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_in_dss__ModulatorGetName(struct soap*, const char*, struct dss__ModulatorGetName *, const char*);
-SOAP_FMAC5 struct dss__ModulatorGetName * SOAP_FMAC6 soap_new_dss__ModulatorGetName(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetName(struct soap*, struct dss__ModulatorGetName*);
-SOAP_FMAC3 struct dss__ModulatorGetName * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetName(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetName(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__ModulatorGetNameResponse
-#define SOAP_TYPE_dss__ModulatorGetNameResponse (217)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetNameResponse(struct soap*, struct dss__ModulatorGetNameResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetNameResponse(struct soap*, const struct dss__ModulatorGetNameResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetNameResponse(struct soap*, const struct dss__ModulatorGetNameResponse *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetNameResponse(struct soap*, const char*, int, const struct dss__ModulatorGetNameResponse *, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_get_dss__ModulatorGetNameResponse(struct soap*, struct dss__ModulatorGetNameResponse *, const char*, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_in_dss__ModulatorGetNameResponse(struct soap*, const char*, struct dss__ModulatorGetNameResponse *, const char*);
-SOAP_FMAC5 struct dss__ModulatorGetNameResponse * SOAP_FMAC6 soap_new_dss__ModulatorGetNameResponse(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetNameResponse(struct soap*, struct dss__ModulatorGetNameResponse*);
-SOAP_FMAC3 struct dss__ModulatorGetNameResponse * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetNameResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetNameResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDs
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (215)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDs(struct soap*, struct dss__ApartmentGetModulatorIDs *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDs(struct soap*, const struct dss__ApartmentGetModulatorIDs *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetModulatorIDs(struct soap*, const struct dss__ApartmentGetModulatorIDs *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetModulatorIDs(struct soap*, const char*, int, const struct dss__ApartmentGetModulatorIDs *, const char*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_get_dss__ApartmentGetModulatorIDs(struct soap*, struct dss__ApartmentGetModulatorIDs *, const char*, const char*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_in_dss__ApartmentGetModulatorIDs(struct soap*, const char*, struct dss__ApartmentGetModulatorIDs *, const char*);
-SOAP_FMAC5 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC6 soap_new_dss__ApartmentGetModulatorIDs(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetModulatorIDs(struct soap*, struct dss__ApartmentGetModulatorIDs*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDs * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetModulatorIDs(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDs(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (214)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetModulatorIDsResponse(struct soap*, struct dss__ApartmentGetModulatorIDsResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetModulatorIDsResponse(struct soap*, const struct dss__ApartmentGetModulatorIDsResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetModulatorIDsResponse(struct soap*, const struct dss__ApartmentGetModulatorIDsResponse *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetModulatorIDsResponse(struct soap*, const char*, int, const struct dss__ApartmentGetModulatorIDsResponse *, const char*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_get_dss__ApartmentGetModulatorIDsResponse(struct soap*, struct dss__ApartmentGetModulatorIDsResponse *, const char*, const char*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_in_dss__ApartmentGetModulatorIDsResponse(struct soap*, const char*, struct dss__ApartmentGetModulatorIDsResponse *, const char*);
-SOAP_FMAC5 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC6 soap_new_dss__ApartmentGetModulatorIDsResponse(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetModulatorIDsResponse(struct soap*, struct dss__ApartmentGetModulatorIDsResponse*);
-SOAP_FMAC3 struct dss__ApartmentGetModulatorIDsResponse * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetModulatorIDsResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetModulatorIDsResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumption
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (212)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumption(struct soap*, struct dss__ModulatorGetPowerConsumption *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumption(struct soap*, const struct dss__ModulatorGetPowerConsumption *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetPowerConsumption(struct soap*, const struct dss__ModulatorGetPowerConsumption *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetPowerConsumption(struct soap*, const char*, int, const struct dss__ModulatorGetPowerConsumption *, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_get_dss__ModulatorGetPowerConsumption(struct soap*, struct dss__ModulatorGetPowerConsumption *, const char*, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_in_dss__ModulatorGetPowerConsumption(struct soap*, const char*, struct dss__ModulatorGetPowerConsumption *, const char*);
-SOAP_FMAC5 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC6 soap_new_dss__ModulatorGetPowerConsumption(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetPowerConsumption(struct soap*, struct dss__ModulatorGetPowerConsumption*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumption * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetPowerConsumption(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumption(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (211)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ModulatorGetPowerConsumptionResponse(struct soap*, struct dss__ModulatorGetPowerConsumptionResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ModulatorGetPowerConsumptionResponse(struct soap*, const struct dss__ModulatorGetPowerConsumptionResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ModulatorGetPowerConsumptionResponse(struct soap*, const struct dss__ModulatorGetPowerConsumptionResponse *, const char*, const char*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ModulatorGetPowerConsumptionResponse(struct soap*, const char*, int, const struct dss__ModulatorGetPowerConsumptionResponse *, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_get_dss__ModulatorGetPowerConsumptionResponse(struct soap*, struct dss__ModulatorGetPowerConsumptionResponse *, const char*, const char*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_in_dss__ModulatorGetPowerConsumptionResponse(struct soap*, const char*, struct dss__ModulatorGetPowerConsumptionResponse *, const char*);
-SOAP_FMAC5 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC6 soap_new_dss__ModulatorGetPowerConsumptionResponse(struct soap*, int);
-SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ModulatorGetPowerConsumptionResponse(struct soap*, struct dss__ModulatorGetPowerConsumptionResponse*);
-SOAP_FMAC3 struct dss__ModulatorGetPowerConsumptionResponse * SOAP_FMAC4 soap_instantiate_dss__ModulatorGetPowerConsumptionResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ModulatorGetPowerConsumptionResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
+#ifndef SOAP_TYPE_dss__DSMeterGetName
+#define SOAP_TYPE_dss__DSMeterGetName (218)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetName(struct soap*, struct dss__DSMeterGetName *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetName(struct soap*, const struct dss__DSMeterGetName *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetName(struct soap*, const struct dss__DSMeterGetName *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetName(struct soap*, const char*, int, const struct dss__DSMeterGetName *, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_get_dss__DSMeterGetName(struct soap*, struct dss__DSMeterGetName *, const char*, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_in_dss__DSMeterGetName(struct soap*, const char*, struct dss__DSMeterGetName *, const char*);
+SOAP_FMAC5 struct dss__DSMeterGetName * SOAP_FMAC6 soap_new_dss__DSMeterGetName(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetName(struct soap*, struct dss__DSMeterGetName*);
+SOAP_FMAC3 struct dss__DSMeterGetName * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetName(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetName(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__DSMeterGetNameResponse
+#define SOAP_TYPE_dss__DSMeterGetNameResponse (217)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetNameResponse(struct soap*, struct dss__DSMeterGetNameResponse *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetNameResponse(struct soap*, const struct dss__DSMeterGetNameResponse *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetNameResponse(struct soap*, const struct dss__DSMeterGetNameResponse *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetNameResponse(struct soap*, const char*, int, const struct dss__DSMeterGetNameResponse *, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_get_dss__DSMeterGetNameResponse(struct soap*, struct dss__DSMeterGetNameResponse *, const char*, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_in_dss__DSMeterGetNameResponse(struct soap*, const char*, struct dss__DSMeterGetNameResponse *, const char*);
+SOAP_FMAC5 struct dss__DSMeterGetNameResponse * SOAP_FMAC6 soap_new_dss__DSMeterGetNameResponse(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetNameResponse(struct soap*, struct dss__DSMeterGetNameResponse*);
+SOAP_FMAC3 struct dss__DSMeterGetNameResponse * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetNameResponse(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetNameResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__ApartmentGetDSMeterIDs
+#define SOAP_TYPE_dss__ApartmentGetDSMeterIDs (215)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetDSMeterIDs(struct soap*, struct dss__ApartmentGetDSMeterIDs *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetDSMeterIDs(struct soap*, const struct dss__ApartmentGetDSMeterIDs *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetDSMeterIDs(struct soap*, const struct dss__ApartmentGetDSMeterIDs *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetDSMeterIDs(struct soap*, const char*, int, const struct dss__ApartmentGetDSMeterIDs *, const char*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_get_dss__ApartmentGetDSMeterIDs(struct soap*, struct dss__ApartmentGetDSMeterIDs *, const char*, const char*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_in_dss__ApartmentGetDSMeterIDs(struct soap*, const char*, struct dss__ApartmentGetDSMeterIDs *, const char*);
+SOAP_FMAC5 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC6 soap_new_dss__ApartmentGetDSMeterIDs(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetDSMeterIDs(struct soap*, struct dss__ApartmentGetDSMeterIDs*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDs * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetDSMeterIDs(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetDSMeterIDs(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse
+#define SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse (214)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__ApartmentGetDSMeterIDsResponse(struct soap*, struct dss__ApartmentGetDSMeterIDsResponse *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__ApartmentGetDSMeterIDsResponse(struct soap*, const struct dss__ApartmentGetDSMeterIDsResponse *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__ApartmentGetDSMeterIDsResponse(struct soap*, const struct dss__ApartmentGetDSMeterIDsResponse *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__ApartmentGetDSMeterIDsResponse(struct soap*, const char*, int, const struct dss__ApartmentGetDSMeterIDsResponse *, const char*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_get_dss__ApartmentGetDSMeterIDsResponse(struct soap*, struct dss__ApartmentGetDSMeterIDsResponse *, const char*, const char*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_in_dss__ApartmentGetDSMeterIDsResponse(struct soap*, const char*, struct dss__ApartmentGetDSMeterIDsResponse *, const char*);
+SOAP_FMAC5 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC6 soap_new_dss__ApartmentGetDSMeterIDsResponse(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__ApartmentGetDSMeterIDsResponse(struct soap*, struct dss__ApartmentGetDSMeterIDsResponse*);
+SOAP_FMAC3 struct dss__ApartmentGetDSMeterIDsResponse * SOAP_FMAC4 soap_instantiate_dss__ApartmentGetDSMeterIDsResponse(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__ApartmentGetDSMeterIDsResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__DSMeterGetPowerConsumption
+#define SOAP_TYPE_dss__DSMeterGetPowerConsumption (212)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetPowerConsumption(struct soap*, struct dss__DSMeterGetPowerConsumption *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetPowerConsumption(struct soap*, const struct dss__DSMeterGetPowerConsumption *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetPowerConsumption(struct soap*, const struct dss__DSMeterGetPowerConsumption *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetPowerConsumption(struct soap*, const char*, int, const struct dss__DSMeterGetPowerConsumption *, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_get_dss__DSMeterGetPowerConsumption(struct soap*, struct dss__DSMeterGetPowerConsumption *, const char*, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_in_dss__DSMeterGetPowerConsumption(struct soap*, const char*, struct dss__DSMeterGetPowerConsumption *, const char*);
+SOAP_FMAC5 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC6 soap_new_dss__DSMeterGetPowerConsumption(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetPowerConsumption(struct soap*, struct dss__DSMeterGetPowerConsumption*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumption * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetPowerConsumption(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetPowerConsumption(struct soap*, int, int, void*, size_t, const void*, size_t);
+
+#ifndef SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse
+#define SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse (211)
+#endif
+SOAP_FMAC3 void SOAP_FMAC4 soap_default_dss__DSMeterGetPowerConsumptionResponse(struct soap*, struct dss__DSMeterGetPowerConsumptionResponse *);
+SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_dss__DSMeterGetPowerConsumptionResponse(struct soap*, const struct dss__DSMeterGetPowerConsumptionResponse *);
+SOAP_FMAC3 int SOAP_FMAC4 soap_put_dss__DSMeterGetPowerConsumptionResponse(struct soap*, const struct dss__DSMeterGetPowerConsumptionResponse *, const char*, const char*);
+SOAP_FMAC3 int SOAP_FMAC4 soap_out_dss__DSMeterGetPowerConsumptionResponse(struct soap*, const char*, int, const struct dss__DSMeterGetPowerConsumptionResponse *, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_get_dss__DSMeterGetPowerConsumptionResponse(struct soap*, struct dss__DSMeterGetPowerConsumptionResponse *, const char*, const char*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_in_dss__DSMeterGetPowerConsumptionResponse(struct soap*, const char*, struct dss__DSMeterGetPowerConsumptionResponse *, const char*);
+SOAP_FMAC5 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC6 soap_new_dss__DSMeterGetPowerConsumptionResponse(struct soap*, int);
+SOAP_FMAC5 void SOAP_FMAC6 soap_delete_dss__DSMeterGetPowerConsumptionResponse(struct soap*, struct dss__DSMeterGetPowerConsumptionResponse*);
+SOAP_FMAC3 struct dss__DSMeterGetPowerConsumptionResponse * SOAP_FMAC4 soap_instantiate_dss__DSMeterGetPowerConsumptionResponse(struct soap*, int, const char*, const char*, size_t*);
+SOAP_FMAC3 void SOAP_FMAC4 soap_copy_dss__DSMeterGetPowerConsumptionResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
 
 #ifndef SOAP_TYPE_dss__DeviceGetZoneID
 #define SOAP_TYPE_dss__DeviceGetZoneID (208)
diff --git a/webservices/soapServer.cpp b/webservices/soapServer.cpp
index 452c3d4..e6b2fed 100644
--- a/webservices/soapServer.cpp
+++ b/webservices/soapServer.cpp
@@ -193,12 +193,12 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_request(struct soap *soap)
 		return soap_serve_dss__DeviceGetName(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:DeviceGetZoneID"))
 		return soap_serve_dss__DeviceGetZoneID(soap);
-	if (!soap_match_tag(soap, soap->tag, "dss:ModulatorGetPowerConsumption"))
-		return soap_serve_dss__ModulatorGetPowerConsumption(soap);
-	if (!soap_match_tag(soap, soap->tag, "dss:ApartmentGetModulatorIDs"))
-		return soap_serve_dss__ApartmentGetModulatorIDs(soap);
-	if (!soap_match_tag(soap, soap->tag, "dss:ModulatorGetName"))
-		return soap_serve_dss__ModulatorGetName(soap);
+	if (!soap_match_tag(soap, soap->tag, "dss:DSMeterGetPowerConsumption"))
+		return soap_serve_dss__DSMeterGetPowerConsumption(soap);
+	if (!soap_match_tag(soap, soap->tag, "dss:ApartmentGetDSMeterIDs"))
+		return soap_serve_dss__ApartmentGetDSMeterIDs(soap);
+	if (!soap_match_tag(soap, soap->tag, "dss:DSMeterGetName"))
+		return soap_serve_dss__DSMeterGetName(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:ApartmentAllocateZone"))
 		return soap_serve_dss__ApartmentAllocateZone(soap);
 	if (!soap_match_tag(soap, soap->tag, "dss:ApartmentDeleteZone"))
@@ -2710,30 +2710,30 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceGetZoneID(struct soap *soap)
 	return soap_closesock(soap);
 }
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct soap *soap)
-{	struct dss__ModulatorGetPowerConsumption soap_tmp_dss__ModulatorGetPowerConsumption;
-	struct dss__ModulatorGetPowerConsumptionResponse soap_tmp_dss__ModulatorGetPowerConsumptionResponse;
-	soap_default_dss__ModulatorGetPowerConsumptionResponse(soap, &soap_tmp_dss__ModulatorGetPowerConsumptionResponse);
-	soap_default_dss__ModulatorGetPowerConsumption(soap, &soap_tmp_dss__ModulatorGetPowerConsumption);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DSMeterGetPowerConsumption(struct soap *soap)
+{	struct dss__DSMeterGetPowerConsumption soap_tmp_dss__DSMeterGetPowerConsumption;
+	struct dss__DSMeterGetPowerConsumptionResponse soap_tmp_dss__DSMeterGetPowerConsumptionResponse;
+	soap_default_dss__DSMeterGetPowerConsumptionResponse(soap, &soap_tmp_dss__DSMeterGetPowerConsumptionResponse);
+	soap_default_dss__DSMeterGetPowerConsumption(soap, &soap_tmp_dss__DSMeterGetPowerConsumption);
 	soap->encodingStyle = NULL;
-	if (!soap_get_dss__ModulatorGetPowerConsumption(soap, &soap_tmp_dss__ModulatorGetPowerConsumption, "dss:ModulatorGetPowerConsumption", NULL))
+	if (!soap_get_dss__DSMeterGetPowerConsumption(soap, &soap_tmp_dss__DSMeterGetPowerConsumption, "dss:DSMeterGetPowerConsumption", NULL))
 		return soap->error;
 	if (soap_body_end_in(soap)
 	 || soap_envelope_end_in(soap)
 	 || soap_end_recv(soap))
 		return soap->error;
-	soap->error = dss__ModulatorGetPowerConsumption(soap, soap_tmp_dss__ModulatorGetPowerConsumption._token, soap_tmp_dss__ModulatorGetPowerConsumption._modulatorID, soap_tmp_dss__ModulatorGetPowerConsumptionResponse.result);
+	soap->error = dss__DSMeterGetPowerConsumption(soap, soap_tmp_dss__DSMeterGetPowerConsumption._token, soap_tmp_dss__DSMeterGetPowerConsumption._dsMeterID, soap_tmp_dss__DSMeterGetPowerConsumptionResponse.result);
 	if (soap->error)
 		return soap->error;
 	soap_serializeheader(soap);
-	soap_serialize_dss__ModulatorGetPowerConsumptionResponse(soap, &soap_tmp_dss__ModulatorGetPowerConsumptionResponse);
+	soap_serialize_dss__DSMeterGetPowerConsumptionResponse(soap, &soap_tmp_dss__DSMeterGetPowerConsumptionResponse);
 	if (soap_begin_count(soap))
 		return soap->error;
 	if (soap->mode & SOAP_IO_LENGTH)
 	{	if (soap_envelope_begin_out(soap)
 		 || soap_putheader(soap)
 		 || soap_body_begin_out(soap)
-		 || soap_put_dss__ModulatorGetPowerConsumptionResponse(soap, &soap_tmp_dss__ModulatorGetPowerConsumptionResponse, "dss:ModulatorGetPowerConsumptionResponse", "")
+		 || soap_put_dss__DSMeterGetPowerConsumptionResponse(soap, &soap_tmp_dss__DSMeterGetPowerConsumptionResponse, "dss:DSMeterGetPowerConsumptionResponse", "")
 		 || soap_body_end_out(soap)
 		 || soap_envelope_end_out(soap))
 			 return soap->error;
@@ -2743,7 +2743,7 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct so
 	 || soap_envelope_begin_out(soap)
 	 || soap_putheader(soap)
 	 || soap_body_begin_out(soap)
-	 || soap_put_dss__ModulatorGetPowerConsumptionResponse(soap, &soap_tmp_dss__ModulatorGetPowerConsumptionResponse, "dss:ModulatorGetPowerConsumptionResponse", "")
+	 || soap_put_dss__DSMeterGetPowerConsumptionResponse(soap, &soap_tmp_dss__DSMeterGetPowerConsumptionResponse, "dss:DSMeterGetPowerConsumptionResponse", "")
 	 || soap_body_end_out(soap)
 	 || soap_envelope_end_out(soap)
 	 || soap_end_send(soap))
@@ -2751,30 +2751,30 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct so
 	return soap_closesock(soap);
 }
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetModulatorIDs(struct soap *soap)
-{	struct dss__ApartmentGetModulatorIDs soap_tmp_dss__ApartmentGetModulatorIDs;
-	struct dss__ApartmentGetModulatorIDsResponse soap_tmp_dss__ApartmentGetModulatorIDsResponse;
-	soap_default_dss__ApartmentGetModulatorIDsResponse(soap, &soap_tmp_dss__ApartmentGetModulatorIDsResponse);
-	soap_default_dss__ApartmentGetModulatorIDs(soap, &soap_tmp_dss__ApartmentGetModulatorIDs);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetDSMeterIDs(struct soap *soap)
+{	struct dss__ApartmentGetDSMeterIDs soap_tmp_dss__ApartmentGetDSMeterIDs;
+	struct dss__ApartmentGetDSMeterIDsResponse soap_tmp_dss__ApartmentGetDSMeterIDsResponse;
+	soap_default_dss__ApartmentGetDSMeterIDsResponse(soap, &soap_tmp_dss__ApartmentGetDSMeterIDsResponse);
+	soap_default_dss__ApartmentGetDSMeterIDs(soap, &soap_tmp_dss__ApartmentGetDSMeterIDs);
 	soap->encodingStyle = NULL;
-	if (!soap_get_dss__ApartmentGetModulatorIDs(soap, &soap_tmp_dss__ApartmentGetModulatorIDs, "dss:ApartmentGetModulatorIDs", NULL))
+	if (!soap_get_dss__ApartmentGetDSMeterIDs(soap, &soap_tmp_dss__ApartmentGetDSMeterIDs, "dss:ApartmentGetDSMeterIDs", NULL))
 		return soap->error;
 	if (soap_body_end_in(soap)
 	 || soap_envelope_end_in(soap)
 	 || soap_end_recv(soap))
 		return soap->error;
-	soap->error = dss__ApartmentGetModulatorIDs(soap, soap_tmp_dss__ApartmentGetModulatorIDs._token, soap_tmp_dss__ApartmentGetModulatorIDsResponse.ids);
+	soap->error = dss__ApartmentGetDSMeterIDs(soap, soap_tmp_dss__ApartmentGetDSMeterIDs._token, soap_tmp_dss__ApartmentGetDSMeterIDsResponse.ids);
 	if (soap->error)
 		return soap->error;
 	soap_serializeheader(soap);
-	soap_serialize_dss__ApartmentGetModulatorIDsResponse(soap, &soap_tmp_dss__ApartmentGetModulatorIDsResponse);
+	soap_serialize_dss__ApartmentGetDSMeterIDsResponse(soap, &soap_tmp_dss__ApartmentGetDSMeterIDsResponse);
 	if (soap_begin_count(soap))
 		return soap->error;
 	if (soap->mode & SOAP_IO_LENGTH)
 	{	if (soap_envelope_begin_out(soap)
 		 || soap_putheader(soap)
 		 || soap_body_begin_out(soap)
-		 || soap_put_dss__ApartmentGetModulatorIDsResponse(soap, &soap_tmp_dss__ApartmentGetModulatorIDsResponse, "dss:ApartmentGetModulatorIDsResponse", "")
+		 || soap_put_dss__ApartmentGetDSMeterIDsResponse(soap, &soap_tmp_dss__ApartmentGetDSMeterIDsResponse, "dss:ApartmentGetDSMeterIDsResponse", "")
 		 || soap_body_end_out(soap)
 		 || soap_envelope_end_out(soap))
 			 return soap->error;
@@ -2784,7 +2784,7 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetModulatorIDs(struct soap *
 	 || soap_envelope_begin_out(soap)
 	 || soap_putheader(soap)
 	 || soap_body_begin_out(soap)
-	 || soap_put_dss__ApartmentGetModulatorIDsResponse(soap, &soap_tmp_dss__ApartmentGetModulatorIDsResponse, "dss:ApartmentGetModulatorIDsResponse", "")
+	 || soap_put_dss__ApartmentGetDSMeterIDsResponse(soap, &soap_tmp_dss__ApartmentGetDSMeterIDsResponse, "dss:ApartmentGetDSMeterIDsResponse", "")
 	 || soap_body_end_out(soap)
 	 || soap_envelope_end_out(soap)
 	 || soap_end_send(soap))
@@ -2792,30 +2792,30 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetModulatorIDs(struct soap *
 	return soap_closesock(soap);
 }
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetName(struct soap *soap)
-{	struct dss__ModulatorGetName soap_tmp_dss__ModulatorGetName;
-	struct dss__ModulatorGetNameResponse soap_tmp_dss__ModulatorGetNameResponse;
-	soap_default_dss__ModulatorGetNameResponse(soap, &soap_tmp_dss__ModulatorGetNameResponse);
-	soap_default_dss__ModulatorGetName(soap, &soap_tmp_dss__ModulatorGetName);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DSMeterGetName(struct soap *soap)
+{	struct dss__DSMeterGetName soap_tmp_dss__DSMeterGetName;
+	struct dss__DSMeterGetNameResponse soap_tmp_dss__DSMeterGetNameResponse;
+	soap_default_dss__DSMeterGetNameResponse(soap, &soap_tmp_dss__DSMeterGetNameResponse);
+	soap_default_dss__DSMeterGetName(soap, &soap_tmp_dss__DSMeterGetName);
 	soap->encodingStyle = NULL;
-	if (!soap_get_dss__ModulatorGetName(soap, &soap_tmp_dss__ModulatorGetName, "dss:ModulatorGetName", NULL))
+	if (!soap_get_dss__DSMeterGetName(soap, &soap_tmp_dss__DSMeterGetName, "dss:DSMeterGetName", NULL))
 		return soap->error;
 	if (soap_body_end_in(soap)
 	 || soap_envelope_end_in(soap)
 	 || soap_end_recv(soap))
 		return soap->error;
-	soap->error = dss__ModulatorGetName(soap, soap_tmp_dss__ModulatorGetName._token, soap_tmp_dss__ModulatorGetName._modulatorID, soap_tmp_dss__ModulatorGetNameResponse.name);
+	soap->error = dss__DSMeterGetName(soap, soap_tmp_dss__DSMeterGetName._token, soap_tmp_dss__DSMeterGetName._dsMeterID, soap_tmp_dss__DSMeterGetNameResponse.name);
 	if (soap->error)
 		return soap->error;
 	soap_serializeheader(soap);
-	soap_serialize_dss__ModulatorGetNameResponse(soap, &soap_tmp_dss__ModulatorGetNameResponse);
+	soap_serialize_dss__DSMeterGetNameResponse(soap, &soap_tmp_dss__DSMeterGetNameResponse);
 	if (soap_begin_count(soap))
 		return soap->error;
 	if (soap->mode & SOAP_IO_LENGTH)
 	{	if (soap_envelope_begin_out(soap)
 		 || soap_putheader(soap)
 		 || soap_body_begin_out(soap)
-		 || soap_put_dss__ModulatorGetNameResponse(soap, &soap_tmp_dss__ModulatorGetNameResponse, "dss:ModulatorGetNameResponse", "")
+		 || soap_put_dss__DSMeterGetNameResponse(soap, &soap_tmp_dss__DSMeterGetNameResponse, "dss:DSMeterGetNameResponse", "")
 		 || soap_body_end_out(soap)
 		 || soap_envelope_end_out(soap))
 			 return soap->error;
@@ -2825,7 +2825,7 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetName(struct soap *soap)
 	 || soap_envelope_begin_out(soap)
 	 || soap_putheader(soap)
 	 || soap_body_begin_out(soap)
-	 || soap_put_dss__ModulatorGetNameResponse(soap, &soap_tmp_dss__ModulatorGetNameResponse, "dss:ModulatorGetNameResponse", "")
+	 || soap_put_dss__DSMeterGetNameResponse(soap, &soap_tmp_dss__DSMeterGetNameResponse, "dss:DSMeterGetNameResponse", "")
 	 || soap_body_end_out(soap)
 	 || soap_envelope_end_out(soap)
 	 || soap_end_send(soap))
diff --git a/webservices/soapStub.h b/webservices/soapStub.h
index 53f828a..1e0b7e9 100644
--- a/webservices/soapStub.h
+++ b/webservices/soapStub.h
@@ -1319,65 +1319,65 @@ public:
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumptionResponse (211)
-/* dss:ModulatorGetPowerConsumptionResponse */
-struct dss__ModulatorGetPowerConsumptionResponse
+#ifndef SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse
+#define SOAP_TYPE_dss__DSMeterGetPowerConsumptionResponse (211)
+/* dss:DSMeterGetPowerConsumptionResponse */
+struct dss__DSMeterGetPowerConsumptionResponse
 {
 public:
 	unsigned long result;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:unsignedInt */
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ModulatorGetPowerConsumption
-#define SOAP_TYPE_dss__ModulatorGetPowerConsumption (212)
-/* dss:ModulatorGetPowerConsumption */
-struct dss__ModulatorGetPowerConsumption
+#ifndef SOAP_TYPE_dss__DSMeterGetPowerConsumption
+#define SOAP_TYPE_dss__DSMeterGetPowerConsumption (212)
+/* dss:DSMeterGetPowerConsumption */
+struct dss__DSMeterGetPowerConsumption
 {
 public:
 	int _token;	/* required element of type xsd:int */
-	int _modulatorID;	/* required element of type xsd:int */
+	int _dsMeterID;	/* required element of type xsd:int */
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDsResponse (214)
-/* dss:ApartmentGetModulatorIDsResponse */
-struct dss__ApartmentGetModulatorIDsResponse
+#ifndef SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse
+#define SOAP_TYPE_dss__ApartmentGetDSMeterIDsResponse (214)
+/* dss:ApartmentGetDSMeterIDsResponse */
+struct dss__ApartmentGetDSMeterIDsResponse
 {
 public:
 	std::vector<std::string >ids;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:string */
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ApartmentGetModulatorIDs
-#define SOAP_TYPE_dss__ApartmentGetModulatorIDs (215)
-/* dss:ApartmentGetModulatorIDs */
-struct dss__ApartmentGetModulatorIDs
+#ifndef SOAP_TYPE_dss__ApartmentGetDSMeterIDs
+#define SOAP_TYPE_dss__ApartmentGetDSMeterIDs (215)
+/* dss:ApartmentGetDSMeterIDs */
+struct dss__ApartmentGetDSMeterIDs
 {
 public:
 	int _token;	/* required element of type xsd:int */
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ModulatorGetNameResponse
-#define SOAP_TYPE_dss__ModulatorGetNameResponse (217)
-/* dss:ModulatorGetNameResponse */
-struct dss__ModulatorGetNameResponse
+#ifndef SOAP_TYPE_dss__DSMeterGetNameResponse
+#define SOAP_TYPE_dss__DSMeterGetNameResponse (217)
+/* dss:DSMeterGetNameResponse */
+struct dss__DSMeterGetNameResponse
 {
 public:
 	std::string name;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:string */
 };
 #endif
 
-#ifndef SOAP_TYPE_dss__ModulatorGetName
-#define SOAP_TYPE_dss__ModulatorGetName (218)
-/* dss:ModulatorGetName */
-struct dss__ModulatorGetName
+#ifndef SOAP_TYPE_dss__DSMeterGetName
+#define SOAP_TYPE_dss__DSMeterGetName (218)
+/* dss:DSMeterGetName */
+struct dss__DSMeterGetName
 {
 public:
 	int _token;	/* required element of type xsd:int */
-	char *_modulatorID;	/* optional element of type xsd:string */
+	char *_dsMeterID;	/* optional element of type xsd:string */
 };
 #endif
 
@@ -2114,11 +2114,11 @@ SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetName(struct soap*, int _token, char *_de
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetZoneID(struct soap*, int _token, char *_deviceID, int &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetPowerConsumption(struct soap*, int _token, int _modulatorID, unsigned long &result);
+SOAP_FMAC5 int SOAP_FMAC6 dss__DSMeterGetPowerConsumption(struct soap*, int _token, int _dsMeterID, unsigned long &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetModulatorIDs(struct soap*, int _token, std::vector<std::string >&ids);
+SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetDSMeterIDs(struct soap*, int _token, std::vector<std::string >&ids);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetName(struct soap*, int _token, char *_modulatorID, std::string &name);
+SOAP_FMAC5 int SOAP_FMAC6 dss__DSMeterGetName(struct soap*, int _token, char *_dsMeterID, std::string &name);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentAllocateZone(struct soap*, int _token, int &zoneID);
 
@@ -2294,11 +2294,11 @@ SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceGetName(struct soap*);
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DeviceGetZoneID(struct soap*);
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetPowerConsumption(struct soap*);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DSMeterGetPowerConsumption(struct soap*);
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetModulatorIDs(struct soap*);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentGetDSMeterIDs(struct soap*);
 
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ModulatorGetName(struct soap*);
+SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__DSMeterGetName(struct soap*);
 
 SOAP_FMAC5 int SOAP_FMAC6 soap_serve_dss__ApartmentAllocateZone(struct soap*);
 
diff --git a/webservices/soapdssObject.h b/webservices/soapdssObject.h
index c16ef29..e0357ba 100644
--- a/webservices/soapdssObject.h
+++ b/webservices/soapdssObject.h
@@ -164,11 +164,11 @@ SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetName(struct soap*, int _token, char *_de
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__DeviceGetZoneID(struct soap*, int _token, char *_deviceID, int &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetPowerConsumption(struct soap*, int _token, int _modulatorID, unsigned long &result);
+SOAP_FMAC5 int SOAP_FMAC6 dss__DSMeterGetPowerConsumption(struct soap*, int _token, int _dsMeterID, unsigned long &result);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetModulatorIDs(struct soap*, int _token, std::vector<std::string >&ids);
+SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentGetDSMeterIDs(struct soap*, int _token, std::vector<std::string >&ids);
 
-SOAP_FMAC5 int SOAP_FMAC6 dss__ModulatorGetName(struct soap*, int _token, char *_modulatorID, std::string &name);
+SOAP_FMAC5 int SOAP_FMAC6 dss__DSMeterGetName(struct soap*, int _token, char *_dsMeterID, std::string &name);
 
 SOAP_FMAC5 int SOAP_FMAC6 dss__ApartmentAllocateZone(struct soap*, int _token, int &zoneID);
 


hooks/post-receive
-- 
digitalSTROM Server


More information about the dss-commits mailing list