From bf3d1a0700483027087137851cfd99e3d2e705ad Mon Sep 17 00:00:00 2001
From: borisneubert <>
Date: Thu, 8 Nov 2012 20:56:21 +0000
Subject: [PATCH] introduced readingsBulkUpdate, readingsSingleUpdate
 introduced GPLv2

git-svn-id: https://svn.fhem.de/fhem/trunk@2099 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
 fhem/CHANGED                   |  2 +
 fhem/FHEM/00_ZWDongle.pm       |  2 +-
 fhem/FHEM/02_RSS.pm            |  4 +-
 fhem/FHEM/11_FHT.pm            | 35 +++++++++++---
 fhem/FHEM/46_TRX_LIGHT.pm      | 47 ++++++++++---------
 fhem/FHEM/46_TRX_SECURITY.pm   | 52 +++++++++++----------
 fhem/FHEM/46_TRX_WEATHER.pm    | 38 ++++++++-------
 fhem/FHEM/49_IPCAM.pm          |  6 +--
 fhem/FHEM/50_WS300.pm          | 53 ++++++++++-----------
 fhem/FHEM/57_Calendar.pm       | 64 +++++++++++++++----------
 fhem/FHEM/59_HCS.pm            | 16 +++----
 fhem/FHEM/59_Twilight.pm       | 41 +++++++++++-----
 fhem/FHEM/59_Weather.pm        | 85 ++++++++++++++++++++--------------
 fhem/FHEM/67_ECMDDevice.pm     | 31 +++++++++----
 fhem/FHEM/70_TellStick.pm      |  2 +-
 fhem/FHEM/71_YAMAHA_AVR.pm     | 61 +++++++++++++++---------
 fhem/FHEM/72_FB_CALLMONITOR.pm | 50 +++++++++++++-------
 fhem/FHEM/98_JsonList.pm       |  2 +-
 fhem/FHEM/98_WOL.pm            |  2 +-
 fhem/FHEM/98_structure.pm      | 27 +++++++++--
 fhem/FHEM/98_telnet.pm         |  2 +-
 fhem/FHEM/FritzBoxUtils.pm     |  2 +-
 fhem/FHEM/TcpServerUtils.pm    |  2 +-
 fhem/fhem.pl                   | 17 ++++++-
 24 files changed, 399 insertions(+), 244 deletions(-)

diff --git a/fhem/CHANGED b/fhem/CHANGED
index c6e4693d9..919b350ac 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -8,6 +8,8 @@
   - feature: autoloading commands, XmlList/etc renamed from 99 to 98.
   - feature: FHEMWEB returns external files in chunks to save memory
   - feature: commandref.html splitted: documentation is now appended to the modules.
+  - change: introduced readingsBulkUpdate, readingsSingleUpdate
+  - change: added GPLv2 licensing information
 
 - 2012-10-28 (5.3)
   - feature: added functions trim, ltrim, rtrim, UntoggleDirect, UntoggleIndirect
diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm
index 6e2c829c7..27ccdd011 100755
--- a/fhem/FHEM/00_ZWDongle.pm
+++ b/fhem/FHEM/00_ZWDongle.pm
@@ -1,5 +1,5 @@
 ##############################################
-# $Id: 00_ZWDongle.pm 1721 2012-07-11 14:48:24Z rudolfkoenig $
+# $Id$
 # TODO:
 # - routing commands
 # - one command to create a fhem device for all nodeList entries
diff --git a/fhem/FHEM/02_RSS.pm b/fhem/FHEM/02_RSS.pm
index 32ad6cc09..eb1257bd9 100644
--- a/fhem/FHEM/02_RSS.pm
+++ b/fhem/FHEM/02_RSS.pm
@@ -5,7 +5,7 @@
 # e-mail: omega at online dot de
 #
 ##############################################
-# $Id  $
+# $Id$
 
 package main;
 use strict;
@@ -619,7 +619,7 @@ RSS_CGI(){
     is loaded from the URL &lt;arg&gt;. You can use
     <code>{ <a href="#perl">&lt;perl special&gt;</a> }</code> for &lt;arg&gt. See below for example.
     Notice: do not load the image from URL that is served by fhem as it leads to a deadlock.<br></li>
-    </li><br>
+    <br>
     </ul>
 
     This is how a layout definition might look like:<p>
diff --git a/fhem/FHEM/11_FHT.pm b/fhem/FHEM/11_FHT.pm
index 84b6e59c8..a298676ce 100755
--- a/fhem/FHEM/11_FHT.pm
+++ b/fhem/FHEM/11_FHT.pm
@@ -1,5 +1,26 @@
-#############################################
 # $Id$
+##############################################################################
+#
+#     11_FHT.pm
+#     Copyright by 
+#     e-mail: 
+#
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Foobar 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 package main;
 
 use strict;
@@ -522,16 +543,16 @@ FHT_Parse($$)
     $val = $nVal? $nVal : "none";
 
     # set additional warnings and trigger notify
-    readingsUpdate($def, "battery", $valBattery);
+    readingsBulkUpdate($def, "battery", $valBattery);
     Log $ll4, "FHT $name battery: $valBattery";
 
-    readingsUpdate($def, "lowtemp", $valLowTemp);
+    readingsBulkUpdate($def, "lowtemp", $valLowTemp);
     Log $ll4, "FHT $name lowtemp: $valLowTemp";
 
-    readingsUpdate($def, "window", $valWindow);
+    readingsBulkUpdate($def, "window", $valWindow);
     Log $ll4, "FHT $name window: $valWindow";
 
-    readingsUpdate($def, "windowsensor", $valSensor);
+    readingsBulkUpdate($def, "windowsensor", $valSensor);
     Log $ll4, "FHT $name windowsensor: $valSensor";
   }
 
@@ -539,10 +560,10 @@ FHT_Parse($$)
     $cmd = "FHZ:$cmd";
 
   } else {
-    readingsUpdate($def, $cmd, $val);
+    readingsBulkUpdate($def, $cmd, $val);
     if($cmd eq "measured-temp") {
         $def->{STATE} = "$cmd: $val";
-        readingsUpdate($def, "temperature", $val);
+        readingsBulkUpdate($def, "temperature", $val);
     }    
   }
 
diff --git a/fhem/FHEM/46_TRX_LIGHT.pm b/fhem/FHEM/46_TRX_LIGHT.pm
index fdc2a4179..41bfc67d5 100755
--- a/fhem/FHEM/46_TRX_LIGHT.pm
+++ b/fhem/FHEM/46_TRX_LIGHT.pm
@@ -1,30 +1,31 @@
-#################################################################################
-# 46_TRX_LIGHT.pm
+# $Id$
+##############################################################################
 #
-# FHEM module for lighting protocols: 
-#   X10 lighting, ARC, ELRO AB400D, Waveman, Chacon EMW200, 
-#   IMPULS, AC (KlikAanKlikUit, NEXA, CHACON, HomeEasy UK), 
-#   HomeEasy EU, ANSLUT, Ikea Koppla
+#     46_TRX_LIGHT.pm
+#     FHEM module for lighting protocols:
+#       X10 lighting, ARC, ELRO AB400D, Waveman, Chacon EMW200,
+#       IMPULS, AC (KlikAanKlikUit, NEXA, CHACON, HomeEasy UK),
+#       HomeEasy EU, ANSLUT, Ikea Koppla
+#     Copyright by Willi Herzig
+#     e-mail: 
 #
-# Copyright (C) 2012 Willi Herzig
+#     This file is part of fhem.
 #
-# This program 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 2
-# of the License, or (at your option) any later version.
-# 
-# This program 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.
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
 #
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#     Fhem 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.
 #
-# The GNU General Public License may also be found at http://www.gnu.org/licenses/gpl-2.0.html .
+#     You should have received a copy of the GNU General Public License
+#     along with fhem.  If not, see <http://www.gnu.org/licenses/>.
 #
-##################################
+##############################################################################
+
 #
 # values for "set global verbose"
 # 4: log unknown protocols
@@ -489,7 +490,7 @@ sub TRX_LIGHT_parse_X10 {
 
 	$sensor = $firstdevice == 1 ? $def->{TRX_LIGHT_devicelog} : $def->{TRX_LIGHT_devicelog2};
 	$val .= $current;
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
   } else {
 	$error = sprintf "TRX_LIGHT: error unknown sensor type=%x device_type=%s devn=%s first=%d command=%s", $type, $device_type, $device_name, $firstdevice, $command;
 	Log 1, $error;
@@ -498,7 +499,7 @@ sub TRX_LIGHT_parse_X10 {
 
   if (($firstdevice == 1) && $val) {
   	$def->{STATE} = $val;
-	readingsUpdate($def, "state", $val);
+	readingsBulkUpdate($def, "state", $val);
   }
 
   readingsEndUpdate($def, 1);
diff --git a/fhem/FHEM/46_TRX_SECURITY.pm b/fhem/FHEM/46_TRX_SECURITY.pm
index 4b6fda105..1accfaa64 100755
--- a/fhem/FHEM/46_TRX_SECURITY.pm
+++ b/fhem/FHEM/46_TRX_SECURITY.pm
@@ -1,27 +1,29 @@
-#################################################################################
-# 46_TRX_SECURITY.pm
+# $Id$
+##############################################################################
 #
-# FHEM module for X10, KD101, Visonic
+#     46_TRX_LIGHT.pm
+#     FHEM module for X10, KD101, Visonic
+#     Copyright by Willi Herzig
+#     e-mail:
 #
-# Copyright (C) 2012 Willi Herzig
+#     This file is part of fhem.
 #
-# This program 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 2
-# of the License, or (at your option) any later version.
-# 
-# This program 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.
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
 #
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#     Fhem 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.
 #
-# The GNU General Public License may also be found at http://www.gnu.org/licenses/gpl-2.0.html .
+#     You should have received a copy of the GNU General Public License
+#     along with fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
 #
-##################################
 #
 # values for "set global verbose"
 # 4: log unknown protocols
@@ -284,12 +286,12 @@ sub TRX_SECURITY_parse_X10Sec {
   	if ($firstdevice == 1) {
 		$val .= $current;
   	}
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
 
 	# KD101 does not show normal, so statechange does not make sense
   	if (($def->{STATE} ne $val) && ($device_type ne "KD101")) { 
 		$sensor = "statechange";
-		readingsUpdate($def, $sensor, $current);
+		readingsBulkUpdate($def, $sensor, $current);
   	}
   } else {
 	# kr18 remote control or VISONIC_REMOTE
@@ -297,12 +299,12 @@ sub TRX_SECURITY_parse_X10Sec {
 
 	#$sensor = $def->{TRX_SECURITY_devicelog};
 	$val = $current;
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
 
 	my @cmd_split = split(/-/, $command);
 	$sensor = $cmd_split[0];
 	$current = $cmd_split[1];
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
   }
 
   if ($battery ne "") {
@@ -310,7 +312,7 @@ sub TRX_SECURITY_parse_X10Sec {
 	$current = "Error";
 	$current = "ok" if ($battery eq "batt_ok");
 	$current = "low" if ($battery eq "batt_low");
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
   }
 
   if ($delay ne '') {
@@ -318,12 +320,12 @@ sub TRX_SECURITY_parse_X10Sec {
 	$current = "Error";
 	$current = "min" if ($delay eq "min_delay");
 	$current = "max" if ($delay eq "max_delay");
-	readingsUpdate($def, $sensor, $current);
+	readingsBulkUpdate($def, $sensor, $current);
   }
 
   if (($firstdevice == 1) && $val) {
   	$def->{STATE} = $val;
-	readingsUpdate($def, "state", $val);
+	readingsBulkUpdate($def, "state", $val);
   }
 
   readingsEndUpdate($def, 1);
diff --git a/fhem/FHEM/46_TRX_WEATHER.pm b/fhem/FHEM/46_TRX_WEATHER.pm
index 97fbac510..60ad5989d 100755
--- a/fhem/FHEM/46_TRX_WEATHER.pm
+++ b/fhem/FHEM/46_TRX_WEATHER.pm
@@ -1,4 +1,6 @@
-#################################################################################
+# $Id$
+##############################################################################
+#
 # 46_TRX_WEATHER.pm
 # FHEM module to decode weather sensor messages for RFXtrx
 #
@@ -803,21 +805,21 @@ TRX_WEATHER_Parse($$)
 			$val .= "T: ".$i->{current}." ";
 
 			$sensor = "temperature";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
   	} 
 	elsif ($i->{type} eq "chilltemp") { 
 			#printf "Temperatur %2.1f %s ; ",$i->{current},$i->{units};
 			$val .= "CT: ".$i->{current}." ";
 
 			$sensor = "windchill";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
   	} 
 	elsif ($i->{type} eq "humidity") { 
 			#printf "Luftfeuchtigkeit %d%s, %s ;",$i->{current},$i->{units},$i->{string};
 			$val .= "H: ".$i->{current}." ";
 
 			$sensor = "humidity";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "battery") { 
 			#printf "Batterie %d%s; ",$i->{current},$i->{units};
@@ -826,7 +828,7 @@ TRX_WEATHER_Parse($$)
 			$val .= "BAT: ".$words[0]." "; #use only first word
 
 			$sensor = "battery";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "pressure") { 
 			#printf "Luftdruck %d %s, Vorhersage=%s ; ",$i->{current},$i->{units},$i->{forecast};
@@ -834,65 +836,65 @@ TRX_WEATHER_Parse($$)
 			$val .= "P: ".$i->{current}." ";
 
 			$sensor = "pressure";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 
 			$sensor = "forecast";			
-			readingsUpdate($def, $sensor, $i->{forecast});
+			readingsBulkUpdate($def, $sensor, $i->{forecast});
 	}
 	elsif ($i->{type} eq "speed") { 
 			$val .= "W: ".$i->{current}." ";
 			$val .= "WA: ".$i->{average}." ";
 
 			$sensor = "wind_speed";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 
 			$sensor = "wind_avspeed";			
-			readingsUpdate($def, $sensor, $i->{average});
+			readingsBulkUpdate($def, $sensor, $i->{average});
 	}
 	elsif ($i->{type} eq "direction") { 
 			$val .= "WD: ".$i->{current}." ";
 			$val .= "WDN: ".$i->{string}." ";
 
 			$sensor = "wind_dir";
-			readingsUpdate($def, $sensor, $i->{current} . " " . $i->{string});
+			readingsBulkUpdate($def, $sensor, $i->{current} . " " . $i->{string});
 	}
 	elsif ($i->{type} eq "rain") { 
 			$val .= "RR: ".$i->{current}." ";
 
 			$sensor = "rain_rate";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "train") { 
 			$val .= "TR: ".$i->{current}." ";
 
 			$sensor = "rain_total";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "flip") { 
 			$val .= "F: ".$i->{current}." ";
 
 			$sensor = "rain_flip";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "uv") { 
 			$val .= "UV: ".$i->{current}." ";
 			$val .= "UVR: ".$i->{risk}." ";
 
 			$sensor = "uv_val";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 
 			$sensor = "uv_risk";			
-			readingsUpdate($def, $sensor, $i->{risk});
+			readingsBulkUpdate($def, $sensor, $i->{risk});
 	}
 	elsif ($i->{type} eq "weight") { 
 			$val .= "W: ".$i->{current}." ";
 
 			$sensor = "weight";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	elsif ($i->{type} eq "hexline") { 
 			$sensor = "hexline";			
-			readingsUpdate($def, $sensor, $i->{current});
+			readingsBulkUpdate($def, $sensor, $i->{current});
 	}
 	else { 
 			print "\nTRX_WEATHER: Unknown: "; 
@@ -906,7 +908,7 @@ TRX_WEATHER_Parse($$)
     $val =~ s/^\s+|\s+$//g;
 
     $def->{STATE} = $val;
-    readingsUpdate($def, "state", $val);
+    readingsBulkUpdate($def, "state", $val);
   }
 
   readingsEndUpdate($def, 1);
diff --git a/fhem/FHEM/49_IPCAM.pm b/fhem/FHEM/49_IPCAM.pm
index 3c3f44626..6f5b4240a 100644
--- a/fhem/FHEM/49_IPCAM.pm
+++ b/fhem/FHEM/49_IPCAM.pm
@@ -1,5 +1,5 @@
-################################################################
 # $Id$
+################################################################
 #
 #  (c) 2012 Copyright: Martin Fischer (m_fischer at gmx dot de)
 #  All rights reserved
@@ -260,7 +260,7 @@ IPCAM_getSnapshot($) {
     print FH $snapshot;
     close(FH);
     Log 5, "IPCAM $name snapshot $storage/$imageFile written.";
-    readingsUpdate($hash,"last",$lastSnapshot);
+    readingsBulkUpdate($hash,"last",$lastSnapshot);
     $hash->{STATE} = "last: $dateTime";
     $hash->{READINGS}{"snapshot$seqF"}{TIME} = $dateTime;
     $hash->{READINGS}{"snapshot$seqF"}{VAL}  = $imageFile;
@@ -269,7 +269,7 @@ IPCAM_getSnapshot($) {
   Log GetLogLevel($name,4), "IPCAM $name image: $imageFile";
 
   if($seq == $seqImages) {
-    readingsUpdate($hash,"snapshots",$seq);
+    readingsBulkUpdate($hash,"snapshots",$seq);
     $seq = 0;
   }
   readingsEndUpdate($hash, defined($hash->{LOCAL} ? 0 : 1));
diff --git a/fhem/FHEM/50_WS300.pm b/fhem/FHEM/50_WS300.pm
index 1fa033b56..01ef5916e 100644
--- a/fhem/FHEM/50_WS300.pm
+++ b/fhem/FHEM/50_WS300.pm
@@ -1,3 +1,4 @@
+# $Id$
 ################################################################
 #
 #  Copyright notice
@@ -33,7 +34,7 @@
 # define ws300		WS300	9		(always 9)
 # set WS300Device <interval(5-60 min.)> <height(0-2000 m)> <rainvalume(ml)>
 ################################################################
-# $Id$
+
 
 package main;
 
@@ -287,15 +288,15 @@ WS300_Parse($$)
           # state
 	  $val = "T: $t  H: $h  Bat: $b  LR: $l";
 	  $def->{STATE} = $val;
-          readingsUpdate($def, 'state', $val);
+          readingsBulkUpdate($def, 'state', $val);
           # temperature
-          readingsUpdate($def, $txt[0], $t);
+          readingsBulkUpdate($def, $txt[0], $t);
           # humidity
-          readingsUpdate($def, $txt[1], $h);
+          readingsBulkUpdate($def, $txt[1], $h);
           # battery
-          readingsUpdate($def, $txt[5], $b);
+          readingsBulkUpdate($def, $txt[5], $b);
           # lost receives
-          readingsUpdate($def, $txt[6], $l);
+          readingsBulkUpdate($def, $txt[6], $l);
           
           Log $ll, "WS300 $def->{NAME}: $val";
 
@@ -307,26 +308,26 @@ WS300_Parse($$)
           # state
           $val = "T: $t  H: $h  W: $wind  R: $rain  IR: $ir  Bat: $b  LR: $l";
 	  $def->{STATE} = $val;
-          readingsUpdate($def, 'state', $val);
+          readingsBulkUpdate($def, 'state', $val);
 
           $def->{CHANGED}[0] = $val;
           $def->{CHANGETIME}[0] = $tm;
           # temperature
-          readingsUpdate($def, $txt[0], $t);
+          readingsBulkUpdate($def, $txt[0], $t);
           # humidity
-          readingsUpdate($def, $txt[1], $h);
+          readingsBulkUpdate($def, $txt[1], $h);
           # wind
-          readingsUpdate($def, $txt[2], $wind);
+          readingsBulkUpdate($def, $txt[2], $wind);
           # rain counter
-          readingsUpdate($def, $txt[3], $rainc);
+          readingsBulkUpdate($def, $txt[3], $rainc);
           # is raining
-          readingsUpdate($def, $txt[4], $ir);
+          readingsBulkUpdate($def, $txt[4], $ir);
           # battery
-          readingsUpdate($def, $txt[5], $b);
+          readingsBulkUpdate($def, $txt[5], $b);
           # lost receives
-          readingsUpdate($def, $txt[6], $l);
+          readingsBulkUpdate($def, $txt[6], $l);
           # rain cumulative
-          readingsUpdate($def, $txt[8], $rain);
+          readingsBulkUpdate($def, $txt[8], $rain);
           # statistics
           if($actday == 99)
           {
@@ -346,9 +347,9 @@ WS300_Parse($$)
             $rain_month = sprintf("%.1f",$rain_month);
             $ref->{acthour}{TIME} = $tm;
             $ref->{acthour}{VAL} = "$acthour";
-            readingsUpdate($def, $txt[9], $rain_hour);
-            readingsUpdate($def, $txt[10], $rain_day);
-            readingsUpdate($def, $txt[11], $rain_month);
+            readingsBulkUpdate($def, $txt[9], $rain_hour);
+            readingsBulkUpdate($def, $txt[10], $rain_day);
+            readingsBulkUpdate($def, $txt[11], $rain_month);
             $rain_hour=0;
           }
           if($actday != $lt[3])
@@ -376,9 +377,9 @@ WS300_Parse($$)
             $oldrain = $rain;
             $ref->{acthour}{TIME} = $tm;
             $ref->{acthour}{VAL} = "$acthour";
-            readingsUpdate($def, $txt[9], $rain_hour);
-            readingsUpdate($def, $txt[10], $rain_day);
-            readingsUpdate($def, $txt[11], $rain_month);
+            readingsBulkUpdate($def, $txt[9], $rain_hour);
+            readingsBulkUpdate($def, $txt[10], $rain_day);
+            readingsBulkUpdate($def, $txt[11], $rain_month);
           }
           Log $ll,"WS300 $def->{NAME}: $val";
 
@@ -410,15 +411,15 @@ WS300_Parse($$)
     # state
     $val = "T: $t  H: $h  P: $press  Willi: $willi";
     $def->{STATE} = $val;
-    readingsUpdate($def, 'state', $val);
+    readingsBulkUpdate($def, 'state', $val);
     # temperature
-    readingsUpdate($def, $txt[0], $t);
+    readingsBulkUpdate($def, $txt[0], $t);
     # humidity
-    readingsUpdate($def, $txt[1], $h);
+    readingsBulkUpdate($def, $txt[1], $h);
     # pressure
-    readingsUpdate($def, $txt[7], $press);
+    readingsBulkUpdate($def, $txt[7], $press);
     # willi
-    readingsUpdate($def, 'willi', $willi);
+    readingsBulkUpdate($def, 'willi', $willi);
     
     Log $ll,"WS300 $def->{NAME}: $val";
 
diff --git a/fhem/FHEM/57_Calendar.pm b/fhem/FHEM/57_Calendar.pm
index 29f6b5115..f37f15e63 100644
--- a/fhem/FHEM/57_Calendar.pm
+++ b/fhem/FHEM/57_Calendar.pm
@@ -1,12 +1,26 @@
-#
-#
-#
-# 57_Calendar.pm
-# written by Dr. Boris Neubert 2012-06-01
-# e-mail: omega at online dot de
-#
-##############################################
 # $Id$
+##############################################################################
+#
+#     57_Calendar.pm
+#     Copyright by Dr. Boris Neubert
+#     e-mail: omega at online dot de
+#
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 
 # Todos:
 #  Support recurring events
@@ -653,16 +667,16 @@ sub Calendar_CheckTimes($) {
   readingsBeginUpdate($hash); # clears all events in CHANGED, thus must be called first
   # we create one fhem event for one changed calendar event
   map { addEvent($hash, "changed: " . $_->uid() . " " . $_->mode() ); } @changedevents;
-  readingsUpdate($hash, "lastCheck", $hash->{fhem}{lastCheck});
-  readingsUpdate($hash, "modeUpcoming", join(";", @upcoming));
-  readingsUpdate($hash, "modeAlarm", join(";", @alarm));
-  readingsUpdate($hash, "modeAlarmed", join(";", @alarmed));
-  readingsUpdate($hash, "modeAlarmOrStart", join(";", @alarm,@start));
-  readingsUpdate($hash, "modeChanged", join(";", @changed));
-  readingsUpdate($hash, "modeStart", join(";", @start));
-  readingsUpdate($hash, "modeStarted", join(";", @started));
-  readingsUpdate($hash, "modeEnd", join(";", @end));
-  readingsUpdate($hash, "modeEnded", join(";", @ended));
+  readingsBulkUpdate($hash, "lastCheck", $hash->{fhem}{lastCheck});
+  readingsBulkUpdate($hash, "modeUpcoming", join(";", @upcoming));
+  readingsBulkUpdate($hash, "modeAlarm", join(";", @alarm));
+  readingsBulkUpdate($hash, "modeAlarmed", join(";", @alarmed));
+  readingsBulkUpdate($hash, "modeAlarmOrStart", join(";", @alarm,@start));
+  readingsBulkUpdate($hash, "modeChanged", join(";", @changed));
+  readingsBulkUpdate($hash, "modeStart", join(";", @start));
+  readingsBulkUpdate($hash, "modeStarted", join(";", @started));
+  readingsBulkUpdate($hash, "modeEnd", join(";", @end));
+  readingsBulkUpdate($hash, "modeEnded", join(";", @ended));
   readingsEndUpdate($hash, 1); # DoTrigger, because sub is called by a timer instead of dispatch
   
 }  
@@ -729,13 +743,13 @@ sub Calendar_GetUpdate($) {
 
   #$hash->{STATE}= $val;
   readingsBeginUpdate($hash);
-  readingsUpdate($hash, "calname", $calname);
-  readingsUpdate($hash, "lastUpdate", $hash->{fhem}{lastUpdate});
-  readingsUpdate($hash, "all", join(";", @all));
-  readingsUpdate($hash, "stateNew", join(";", @new));
-  readingsUpdate($hash, "stateUpdated", join(";", @updated));
-  readingsUpdate($hash, "stateDeleted", join(";", @deleted));
-  readingsUpdate($hash, "stateChanged", join(";", @changed));
+  readingsBulkUpdate($hash, "calname", $calname);
+  readingsBulkUpdate($hash, "lastUpdate", $hash->{fhem}{lastUpdate});
+  readingsBulkUpdate($hash, "all", join(";", @all));
+  readingsBulkUpdate($hash, "stateNew", join(";", @new));
+  readingsBulkUpdate($hash, "stateUpdated", join(";", @updated));
+  readingsBulkUpdate($hash, "stateDeleted", join(";", @deleted));
+  readingsBulkUpdate($hash, "stateChanged", join(";", @changed));
   readingsEndUpdate($hash, 1); # DoTrigger, because sub is called by a timer instead of dispatch
 
   $t+= $hash->{fhem}{interval};
diff --git a/fhem/FHEM/59_HCS.pm b/fhem/FHEM/59_HCS.pm
index 6f6bd1160..63c2d8be7 100644
--- a/fhem/FHEM/59_HCS.pm
+++ b/fhem/FHEM/59_HCS.pm
@@ -1,5 +1,5 @@
-################################################################
 # $Id$
+################################################################
 # vim: ts=2:et
 #
 #  (c) 2012 Copyright: Martin Fischer (m_fischer at gmx dot de)
@@ -227,7 +227,7 @@ HCS_Set($@) {
     #$hash->{STATE} = "off";
     $hash->{NEXTCHECK} = "offline";
     readingsBeginUpdate($hash);
-    readingsUpdate($hash, "state", "off");
+    readingsBulkUpdate($hash, "state", "off");
     readingsEndUpdate($hash, 1);
     Log 1, "$type $name monitoring of valves interrupted";
   }
@@ -275,9 +275,9 @@ HCS_setState($$) {
   $stateDevice = ReadingsVal($name,"device","");
 
   readingsBeginUpdate($hash);
-  readingsUpdate($hash, "device", $cmd);
-  readingsUpdate($hash, "overdrive", $overdrive) if($sensor);
-  readingsUpdate($hash, "state", $state);
+  readingsBulkUpdate($hash, "device", $cmd);
+  readingsBulkUpdate($hash, "overdrive", $overdrive) if($sensor);
+  readingsBulkUpdate($hash, "state", $state);
   readingsEndUpdate($hash, 1);
 
   if($defs{$device}) {
@@ -455,10 +455,10 @@ HCS_getValves($$) {
 
   readingsBeginUpdate($hash);
   for my $d (sort keys %valves) {
-    readingsUpdate($hash, $d."_state", $valves{$d}{state});
-    readingsUpdate($hash, $d."_demand", $valves{$d}{demand});
+    readingsBulkUpdate($hash, $d."_state", $valves{$d}{state});
+    readingsBulkUpdate($hash, $d."_demand", $valves{$d}{demand});
   }
-  readingsUpdate($hash, "sensor", $tempValue) if(defined($tempValue) && $tempValue ne "");
+  readingsBulkUpdate($hash, "sensor", $tempValue) if(defined($tempValue) && $tempValue ne "");
   readingsEndUpdate($hash, 1);
 
   return ($list) ? $ret : $heatDemand;
diff --git a/fhem/FHEM/59_Twilight.pm b/fhem/FHEM/59_Twilight.pm
index 31ec44194..4f71ede44 100644
--- a/fhem/FHEM/59_Twilight.pm
+++ b/fhem/FHEM/59_Twilight.pm
@@ -1,8 +1,27 @@
+# $Id$
+##############################################################################
 #
-# 59_Twilight.pm
-# written by Sebastian Stuecker based on Twilight.tcl http://www.homematic-wiki.info/mw/index.php/TCLScript:twilight
+#     59_Twilight.pm
+#     Copyright by Sebastian Stuecker
+#     based on Twilight.tcl http://www.homematic-wiki.info/mw/index.php/TCLScript:twilight
+#     e-mail: omega at online dot de
 #
-##############################################
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 
 package main;
 use strict;
@@ -183,7 +202,7 @@ Twilight_GetUpdate($)
   }
   
   Twilight_getWeatherHorizon($hash);
-  readingsUpdate($hash,"condition",$hash->{CONDITION});
+  readingsBulkUpdate($hash,"condition",$hash->{CONDITION});
   if($hash->{WEATHER_HORIZON} > (89-$hash->{LATITUDE}+$declination) ){
     $hash->{WEATHER_HORIZON} = 89-$hash->{LATITUDE}+$declination;
   }
@@ -203,10 +222,10 @@ Twilight_GetUpdate($)
     ($sunrise_set[$i]{RISE}, $sunrise_set[$i]{SET})=
        Twilight_calc($latitude, $longitude, $sunrise_set[$i]{DEGREE},
                      $declination, $timezone, $midseconds, $timediff);
-    readingsUpdate($hash, $sunrise_set[$i]{SR_NAME},
+    readingsBulkUpdate($hash, $sunrise_set[$i]{SR_NAME},
         $sunrise_set[$i]{RISE} eq "nan" ? "undefined" : 
         strftime("%H:%M:%S",localtime($sunrise_set[$i]{RISE})));
-    readingsUpdate($hash, $sunrise_set[$i]{SS_NAME},
+    readingsBulkUpdate($hash, $sunrise_set[$i]{SS_NAME},
         $sunrise_set[$i]{SET} eq "nan" ? "undefined" : 
         strftime("%H:%M:%S",localtime($sunrise_set[$i]{SET})));
   }
@@ -218,10 +237,10 @@ Twilight_GetUpdate($)
   for(my $i=0; $i < 12; $i++) {
     my $nexttime=$sunrise_set[6-abs($i-6)-$k]{$half};
     if($nexttime ne "nan" && $nexttime > $now) {
-      readingsUpdate($hash, "light", 6-abs($i-6));
-      readingsUpdate($hash, "nextEvent",
+      readingsBulkUpdate($hash, "light", 6-abs($i-6));
+      readingsBulkUpdate($hash, "nextEvent",
                             $sunrise_set[6-abs($i-6)-$k]{$sname});
-      readingsUpdate($hash, "nextEventTime",
+      readingsBulkUpdate($hash, "nextEventTime",
                             strftime("%H:%M:%S",localtime($nexttime)));
 
       if($i==5 || $i==6) { # Weather
@@ -247,12 +266,12 @@ Twilight_GetUpdate($)
 
   if(!$alarmOffset) {
     $alarmOffset = 900;
-    readingsUpdate($hash,"light", 0);
+    readingsBulkUpdate($hash,"light", 0);
     $hash->{STATE}=0;
   }
   if(!$hash->{LOCAL}) {
     InternalTimer($now+$alarmOffset, "Twilight_GetUpdate", $hash, 0);
-    readingsUpdate($hash,"nextUpdate",
+    readingsBulkUpdate($hash,"nextUpdate",
                    strftime("%H:%M:%S",localtime($now+$alarmOffset)));
   }
   
diff --git a/fhem/FHEM/59_Weather.pm b/fhem/FHEM/59_Weather.pm
index a30705346..abe129af9 100755
--- a/fhem/FHEM/59_Weather.pm
+++ b/fhem/FHEM/59_Weather.pm
@@ -1,13 +1,28 @@
-#
-#
-# 59_Weather.pm
-# maintainer: Dr. Boris Neubert 2009-06-01
-# e-mail: omega at online dot de
-# Port to Yahoo by Erwin Menschhorn 2012-08-30
-# e-mail emenschhorn at gmail dot com
-#
-##############################################
 # $Id$
+##############################################################################
+#
+#     59_Weather.pm
+#     Copyright by Dr. Boris Neubert
+#     e-mail: omega at online dot de
+#
+#     This file is part of fhem.
+# 
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+# 
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
 package main;
 
 use strict;
@@ -165,13 +180,13 @@ sub Weather_UpdateReading($$$$) {
 
   my $reading= $prefix . $key;
 
-  readingsUpdate($hash,$reading,$value);
+  readingsBulkUpdate($hash,$reading,$value);
   if($reading eq "temp_c") {
-    readingsUpdate($hash,"temperature",$value); # additional entry for compatibility
+    readingsBulkUpdate($hash,"temperature",$value); # additional entry for compatibility
   }
   if($reading eq "wind_condition") {
     $value=~ s/.*?(\d+).*/$1/; # extract numeric
-    readingsUpdate($hash,"wind",wind_in_km_per_h($value,$unitsystem)); # additional entry for compatibility
+    readingsBulkUpdate($hash,"wind",wind_in_km_per_h($value,$unitsystem)); # additional entry for compatibility
   }
 
   return 1;
@@ -230,19 +245,19 @@ sub Weather_RetrieveData($)
             my $loc = "";
             $loc = $1 if (defined($1)); 
             $loc .= ", $2" if (defined($2)); 
-            readingsUpdate($hash, "city", $loc);
+            readingsBulkUpdate($hash, "city", $loc);
           }
         
           ### current condition and forecast
           if (($tag eq "yweather:condition" ) || ($tag eq "yweather:forecast" )) {
              my $code = (($value =~/code="([0-9]*?)".*/) ? $1 : undef);
              if (defined($code)) { 
-               readingsUpdate($hash, $prefix . "code", $code); 
+               readingsBulkUpdate($hash, $prefix . "code", $code);
                my $text = $YahooCodes_i18n[$code];
-               if ($text) { readingsUpdate($hash, $prefix . "condition", $text); } 
+               if ($text) { readingsBulkUpdate($hash, $prefix . "condition", $text); }
                #### add icon logic here - generate from code
                $text = $iconlist[$code];
-               readingsUpdate($hash, $prefix . "icon", $text) if ($text); 
+               readingsBulkUpdate($hash, $prefix . "icon", $text) if ($text);
              }  
           }
 
@@ -250,30 +265,30 @@ sub Weather_RetrieveData($)
           if ($tag eq "yweather:condition" ) {
              my $temp = (($value =~/temp="(-?[0-9.]*?)".*/) ? $1 : undef);
              if ($temp) { 
-                readingsUpdate($hash, "temperature", $temp); 
-                readingsUpdate($hash, "temp_c", $temp); # compatibility
+                readingsBulkUpdate($hash, "temperature", $temp);
+                readingsBulkUpdate($hash, "temp_c", $temp); # compatibility
                 $temp = int(( $temp * 9  / 5 ) + 32.5);  # Celsius to Fahrenheit
-                readingsUpdate($hash, "temp_f", $temp); # compatibility
+                readingsBulkUpdate($hash, "temp_f", $temp); # compatibility
              }  
 
              my $datum = (($value =~/date=".*? ([0-9].*)".*/) ? $1 : undef);  
-             readingsUpdate($hash, "current_date_time", $datum) if (defined($1)); 
+             readingsBulkUpdate($hash, "current_date_time", $datum) if (defined($1));
 
              my $day = (($value =~/date="(.*?), .*/) ? $1 : undef);  
              if ($day) {  
-                readingsUpdate($hash, "day_of_week", $wdays_txt_i18n{$day}); 
+                readingsBulkUpdate($hash, "day_of_week", $wdays_txt_i18n{$day});
              }          
           }
 
           ### forecast 
           if ($tag eq "yweather:forecast" ) {
              my $low_c = (($value =~/low="(-?[0-9.]*?)".*/) ? $1 : undef);
-             if ($low_c) { readingsUpdate($hash, $prefix . "low_c", $low_c); }  
+             if ($low_c) { readingsBulkUpdate($hash, $prefix . "low_c", $low_c); }
              my $high_c = (($value =~/high="(-?[0-9.]*?)".*/) ? $1 : undef);
-             if ($high_c) { readingsUpdate($hash, $prefix . "high_c", $high_c); }  
+             if ($high_c) { readingsBulkUpdate($hash, $prefix . "high_c", $high_c); }
              my $day1 = (($value =~/day="(.*?)" .*/) ? $1 : undef); # forecast
              if ($day1) { 
-                readingsUpdate($hash, $prefix . "day_of_week", $wdays_txt_i18n{$day1}); 
+                readingsBulkUpdate($hash, $prefix . "day_of_week", $wdays_txt_i18n{$day1});
              }   
           }
 
@@ -281,28 +296,28 @@ sub Weather_RetrieveData($)
           if ($tag eq "yweather:atmosphere" ) {
             $value =~/humidity="([0-9.]*?)" .*visibility="([0-9.]*?|\s*?)" .*pressure="([0-9.]*?)"  .*rising="([0-9.]*?)" .*/;
 
-            if ($1) { readingsUpdate($hash, "humidity", $1); }
+            if ($1) { readingsBulkUpdate($hash, "humidity", $1); }
             my $vis = (($2 eq "") ? " " : int($2+0.5));   # clear visibility field
-            readingsUpdate($hash, "visibility", $vis);
-            if ($3) { readingsUpdate($hash, "pressure", int($3+0.5)); } 
+            readingsBulkUpdate($hash, "visibility", $vis);
+            if ($3) { readingsBulkUpdate($hash, "pressure", int($3+0.5)); }
             if ($4) {
-              readingsUpdate($hash, "pressure_trend", $4);
-              readingsUpdate($hash, "pressure_trend_txt", $pressure_trend_txt_i18n{$4});
-              readingsUpdate($hash, "pressure_trend_sym", $pressure_trend_sym{$4});
+              readingsBulkUpdate($hash, "pressure_trend", $4);
+              readingsBulkUpdate($hash, "pressure_trend_txt", $pressure_trend_txt_i18n{$4});
+              readingsBulkUpdate($hash, "pressure_trend_sym", $pressure_trend_sym{$4});
             }
           }
 
           ### wind
           if ($tag eq "yweather:wind" ) {
             $value =~/chill="(-?[0-9.]*?)" .*direction="([0-9.]*?)" .*speed="([0-9.]*?)" .*/;
-            readingsUpdate($hash, "wind_chill", $1) if (defined($1)); 
-            readingsUpdate($hash, "wind_direction", $2) if (defined($2));
+            readingsBulkUpdate($hash, "wind_chill", $1) if (defined($1));
+            readingsBulkUpdate($hash, "wind_direction", $2) if (defined($2));
             my $windspeed= defined($3) ? int($3+0.5) : "";
-            readingsUpdate($hash, "wind_speed", $windspeed);
-            readingsUpdate($hash, "wind", $windspeed); # duplicate for compatibility
+            readingsBulkUpdate($hash, "wind_speed", $windspeed);
+            readingsBulkUpdate($hash, "wind", $windspeed); # duplicate for compatibility
             if (defined($2) & defined($3)) {
               my $wdir = degrees_to_direction($2,@directions_txt_i18n);
-              readingsUpdate($hash, "wind_condition", "Wind: $wdir $windspeed km/h"); # compatibility
+              readingsBulkUpdate($hash, "wind_condition", "Wind: $wdir $windspeed km/h"); # compatibility
             }
           }   
   }
diff --git a/fhem/FHEM/67_ECMDDevice.pm b/fhem/FHEM/67_ECMDDevice.pm
index 5ad1f3a7a..f2c018621 100644
--- a/fhem/FHEM/67_ECMDDevice.pm
+++ b/fhem/FHEM/67_ECMDDevice.pm
@@ -1,11 +1,27 @@
+# $Id$##############################################################################
 #
+#     67_ECMDDevice.pm
+#     Copyright by Dr. Boris Neubert
+#     e-mail: omega at online dot de
 #
-# 66_ECMDDevice.pm
-# written by Dr. Boris Neubert 2011-01-15
-# e-mail: omega at online dot de
+#     This file is part of fhem.
 #
-##############################################
-# $Id$
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
 package main;
 
 use strict;
@@ -79,10 +95,7 @@ ECMDDevice_Changed($$$)
 {
         my ($hash, $cmd, $value)= @_;
 
-
-        readingsBeginUpdate($hash);
-        readingsUpdate($hash, $cmd, $value);
-        readingsEndUpdate($hash, 1);
+        readingsSingleUpdate($hash, $cmd, $value, 1);
 
         $hash->{STATE} = "$cmd $value";
 
diff --git a/fhem/FHEM/70_TellStick.pm b/fhem/FHEM/70_TellStick.pm
index 0beb98713..c0d7614a4 100644
--- a/fhem/FHEM/70_TellStick.pm
+++ b/fhem/FHEM/70_TellStick.pm
@@ -29,7 +29,7 @@
 #
 # Contributed by Kai 'wusel' Siering <wusel+fhem@uu.org> in 2012
 # Based in part on work for FHEM by other authors ...
-# $Id: 70_TellStick.pm 1 2011-11-12 07:51:08Z real-wusel $
+# $Id$
 ###########################
 
 package main;
diff --git a/fhem/FHEM/71_YAMAHA_AVR.pm b/fhem/FHEM/71_YAMAHA_AVR.pm
index 2ac929c99..b831aa383 100755
--- a/fhem/FHEM/71_YAMAHA_AVR.pm
+++ b/fhem/FHEM/71_YAMAHA_AVR.pm
@@ -1,22 +1,39 @@
-#
-#  Module: YAMAHA_AVR
-#
-# An FHEM Perl module for controlling Yamaha AV-Receivers
-# via network connection. As the interface is standardized
-# within all Yamaha AV-Receivers, this module should work
-# with any receiver which has an ethernet or wlan connection.
-# 
-# Currently supported are:  power (on|off)
-#                           input (hdmi1|hdmi2|...)
-#                           volume (-50 ... 10)
-#                           mute (on|off)
-#
-# Of course there are more possibilities than these 4 commands.
-# But in my oppinion these are the most relevant usecases within FHEM.
-#
 # $Id$
+##############################################################################
 #
-###################################
+#     71_YAMAHA_AVR.pm
+#     An FHEM Perl module for controlling Yamaha AV-Receivers
+#     via network connection. As the interface is standardized
+#     within all Yamaha AV-Receivers, this module should work
+#     with any receiver which has an ethernet or wlan connection.
+#
+#     Currently supported are:  power (on|off)
+#                               input (hdmi1|hdmi2|...)
+#                               volume (-50 ... 10)
+#                               mute (on|off)
+#
+#     Of course there are more possibilities than these 4 commands.
+#     But in my oppinion these are the most relevant usecases within fhem.
+#
+#     Copyright by Markus Bloch
+#     e-mail:
+#
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 
 package main;
 
@@ -91,7 +108,7 @@ YAMAHA_AVR_GetStatus($;$)
     if($return =~ /<Power>(.+)<\/Power>/)
     {
        $power = $1;
-       readingsUpdate($hash, "power", lc($power));
+       readingsBulkUpdate($hash, "power", lc($power));
        if($power eq "Standby")
        {
 	    $power = "Off";
@@ -102,13 +119,13 @@ YAMAHA_AVR_GetStatus($;$)
     }
     if($return =~ /<Volume><Lvl><Val>(.+)<\/Val><Exp>(.+)<\/Exp><Unit>.+<\/Unit><\/Lvl><Mute>(.+)<\/Mute><\/Volume>/)
     {
-	readingsUpdate($hash, "volume_level", ($1 / 10 ** $2));
-	readingsUpdate($hash, "mute", lc($3));
+	readingsBulkUpdate($hash, "volume_level", ($1 / 10 ** $2));
+	readingsBulkUpdate($hash, "mute", lc($3));
     }
     
     if($return =~ /<Input_Sel>(.+)<\/Input_Sel>/)
     {
-	readingsUpdate($hash, "input", InputParamToFhemInput(lc($1), 0));
+	readingsBulkUpdate($hash, "input", InputParamToFhemInput(lc($1), 0));
     }
     
     readingsEndUpdate($hash, 1);
@@ -176,7 +193,7 @@ YAMAHA_AVR_Set($@)
 	if($result =~ /RC="0"/ and $result =~ /<Power><\/Power>/)
 	{
 	    # As the receiver startup takes about 5 seconds, the status will be already set, if the return code of the command is 0.
-	    readingsUpdate($hash, "power", "on");
+	    readingsBulkUpdate($hash, "power", "on");
 	    $hash->{STATE} = "on";
 	    return undef;
 	}   
diff --git a/fhem/FHEM/72_FB_CALLMONITOR.pm b/fhem/FHEM/72_FB_CALLMONITOR.pm
index dadd54686..9ceea8b83 100755
--- a/fhem/FHEM/72_FB_CALLMONITOR.pm
+++ b/fhem/FHEM/72_FB_CALLMONITOR.pm
@@ -1,14 +1,30 @@
-##############################################
-#
-# Modul: FB_CALLMONITOR
-#
-# Connects to a FritzBox Fon via network.
-#
-# When a call is received or takes place it creates an event with further call informations.
-#
-# This module has no sets or gets as it is only used for event triggering.
-#
 # $Id$
+##############################################################################
+#
+#     72_FB_CALLMONITOR.pm
+#     Connects to a FritzBox Fon via network.
+#     When a call is received or takes place it creates an event with further call informations.
+#     This module has no sets or gets as it is only used for event triggering.
+#
+#     Copyright by Markus Bloch
+#     e-mail:
+#
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 
 package main;
 
@@ -99,13 +115,13 @@ FB_CALLMONITOR_Read($)
  
    @array = split(";", $data);
    readingsBeginUpdate($hash);
-   readingsUpdate($hash, "event", lc($array[1]));
-   readingsUpdate($hash, "external_number", $array[3]) if(not $array[3] eq "0" and $array[1] eq "RING");
-   readingsUpdate($hash, "internal_number", $array[4]) if($array[1] eq "RING");
-   readingsUpdate($hash, "external_number" , $array[5]) if($array[1] eq "CALL");
-   readingsUpdate($hash, "internal_number", $array[4]) if($array[1] eq "CALL");
-   readingsUpdate($hash, "used_connection", $array[5]) if($array[1] eq "RING");
-   readingsUpdate($hash, "used_connection", $array[6]) if($array[1] eq "CALL");
+   readingsBulkUpdate($hash, "event", lc($array[1]));
+   readingsBulkUpdate($hash, "external_number", $array[3]) if(not $array[3] eq "0" and $array[1] eq "RING");
+   readingsBulkUpdate($hash, "internal_number", $array[4]) if($array[1] eq "RING");
+   readingsBulkUpdate($hash, "external_number" , $array[5]) if($array[1] eq "CALL");
+   readingsBulkUpdate($hash, "internal_number", $array[4]) if($array[1] eq "CALL");
+   readingsBulkUpdate($hash, "used_connection", $array[5]) if($array[1] eq "RING");
+   readingsBulkUpdate($hash, "used_connection", $array[6]) if($array[1] eq "CALL");
 
  
    readingsEndUpdate($hash, 1);
diff --git a/fhem/FHEM/98_JsonList.pm b/fhem/FHEM/98_JsonList.pm
index 280fd8b56..c87738c51 100644
--- a/fhem/FHEM/98_JsonList.pm
+++ b/fhem/FHEM/98_JsonList.pm
@@ -431,7 +431,7 @@ CommandJsonList($$)
               "room": "Server",
               "statefile": "/var/cache/fhem/fhem.save",
               "verbose": "4",
-              "version": "=VERS= from =DATE= ($Id: fhem.pl,v $)"
+              "version": "=VERS= from =DATE= ($Id$)"
             },
             "READINGS": []
           }
diff --git a/fhem/FHEM/98_WOL.pm b/fhem/FHEM/98_WOL.pm
index b620a99ce..bc44dbe16 100644
--- a/fhem/FHEM/98_WOL.pm
+++ b/fhem/FHEM/98_WOL.pm
@@ -1,5 +1,5 @@
 ##############################################
-# $Id: 99_WOL.pm 1116 2012-01-21 15:01:34Z matthiasklass $
+# $Id$
 package main;
 
 use strict;
diff --git a/fhem/FHEM/98_structure.pm b/fhem/FHEM/98_structure.pm
index 898a40ca4..53b9abcec 100755
--- a/fhem/FHEM/98_structure.pm
+++ b/fhem/FHEM/98_structure.pm
@@ -1,5 +1,26 @@
-##############################################
 # $Id$
+##############################################################################
+#
+#     98_structure.pm
+#     Copyright by 
+#     e-mail: 
+#
+#     This file is part of fhem.
+#
+#     Fhem 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 2 of the License, or
+#     (at your option) any later version.
+#
+#     Fhem 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 fhem.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
 package main;
 
 use strict;
@@ -232,9 +253,7 @@ sub structure_Notify($$)
     Log 3, "Update structure '" .$me . "' to " . $newState .
                 " because device '" .$dev->{NAME}. "' has changed";
     $hash->{STATE} = $newState;
-    readingsBeginUpdate($hash);
-    readingsUpdate($hash, "state", $newState);
-    readingsEndUpdate($hash, 1);
+    readingsSingleUpdate($hash, "state", $newState, 1);
   }
   undef;
 }
diff --git a/fhem/FHEM/98_telnet.pm b/fhem/FHEM/98_telnet.pm
index 14857cad8..d649d385d 100644
--- a/fhem/FHEM/98_telnet.pm
+++ b/fhem/FHEM/98_telnet.pm
@@ -1,5 +1,5 @@
 ##############################################
-# $Id: 98_telnet.pm 1098 2011-11-12 07:51:08Z rudolfkoenig $
+# $Id$
 
 # Note: this is not really a telnet server, but a TCP server with slight telnet
 # features (disable echo on password)
diff --git a/fhem/FHEM/FritzBoxUtils.pm b/fhem/FHEM/FritzBoxUtils.pm
index c2ea99b63..1052dba75 100644
--- a/fhem/FHEM/FritzBoxUtils.pm
+++ b/fhem/FHEM/FritzBoxUtils.pm
@@ -1,5 +1,5 @@
 ##############################################
-# $Id: FritzBoxUtils.pm 1148 2011-12-28 19:21:19Z rudolfkoenig $
+# $Id$
 package main;
 
 use strict;
diff --git a/fhem/FHEM/TcpServerUtils.pm b/fhem/FHEM/TcpServerUtils.pm
index 75d7e6c87..cd4ab7546 100644
--- a/fhem/FHEM/TcpServerUtils.pm
+++ b/fhem/FHEM/TcpServerUtils.pm
@@ -1,5 +1,5 @@
 ##############################################
-# $Id: TcpServerUtils.pm 1098 2011-11-12 07:51:08Z rudolfkoenig $
+# $Id$
 
 package main;
 use strict;
diff --git a/fhem/fhem.pl b/fhem/fhem.pl
index 5462b05fd..97eceade8 100755
--- a/fhem/fhem.pl
+++ b/fhem/fhem.pl
@@ -2913,11 +2913,11 @@ readingsEndUpdate($$) {
 }
 
 #
-# Call readingsUpdate to update the reading.
+# Call readingsBulkUpdate to update the reading.
 # Example: readingsUpdate($hash,"temperature",$value);
 #
 sub
-readingsUpdate($$$) {
+readingsBulkUpdate($$$) {
 
   my ($hash,$reading,$value)= @_;
   my $name= $hash->{NAME};
@@ -2955,6 +2955,19 @@ readingsUpdate($$$) {
   return $rv;
 }
 
+#
+# this is a shorthand call
+#
+sub
+readingsSingleUpdate($$$$) {
+
+  my ($hash,$reading,$value,$dotrigger)= @_;
+  readingsBeginUpdate($hash);
+  my $rv= readingsBulkUpdate($hash,$reading,$value);
+  readingsEndUpdate($hash,$dotrigger);
+  return $rv;
+}
+
 ###############################################################################
 #
 # date and time routines