diff --git a/tests/test-state.cc.outdated b/tests/test-state.cc.outdated
index 35fc79c..433f8d9 100644
--- a/tests/test-state.cc.outdated
+++ b/tests/test-state.cc.outdated
@@ -1,30 +1,27 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012 University of California, Los Angeles
+ * Copyright (c) 2012-2014 University of California, Los Angeles
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
+ * This file is part of ChronoSync, synchronization library for distributed realtime
+ * applications for NDN.
  *
- * 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.
+ * ChronoSync 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.
  *
- * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * ChronoSync 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.
  *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         Chaoyi Bian <bcy@pku.edu.cn>
- *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ * You should have received a copy of the GNU General Public License along with
+ * ChronoSync, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #define BOOST_TEST_DYN_LINK 1
 #define BOOST_TEST_NO_MAIN 1
 // #define BOOST_TEST_MODULE StateTests
 #include <boost/test/unit_test.hpp>
-#include <boost/test/output_test_stream.hpp> 
+#include <boost/test/output_test_stream.hpp>
 using boost::test_tools::output_test_stream;
 
 #include <boost/make_shared.hpp>
@@ -127,7 +124,7 @@
   name3.reset (); // force destructor
   name3 = StdNameInfo::FindOrCreate ("3"); // this will enforce different (larger) hashing ID of name
   name2 = StdNameInfo::FindOrCreate ("2"); // this will enforce different (larger) hashing ID of name
-  
+
   // adding in different order
   state.update (name3, SeqNo (8));
   state.update (name2, SeqNo (12));
@@ -145,7 +142,7 @@
 
   state.update (name1, SeqNo (10));
   state.update (name2, SeqNo (12));
-  state.update (name3, SeqNo (8));  
+  state.update (name3, SeqNo (8));
 
   string xml1 = "<state>"
     "<item><name>1</name><seq><session>0</session><seqno>10</seqno></seq></item>"
@@ -156,11 +153,11 @@
   ostringstream os;
   os << state;
   string s = os.str ();
-  // cout << s << endl; 
+  // cout << s << endl;
   erase_all (s, "\n");
   BOOST_CHECK_EQUAL (s, xml1);
   }
-  
+
   state.remove (name2);
   string xml2 = "<state>"
     "<item><name>1</name><seq><session>0</session><seqno>10</seqno></seq></item>"
@@ -184,10 +181,10 @@
   erase_all (xml1_test, "\n");
   BOOST_CHECK_EQUAL (xml1_test, xml1);
   }
-  
+
   istringstream xml2_is ("<state><item action=\"remove\"><name>2</name></item></state>");
   BOOST_CHECK_NO_THROW (xml2_is >> state2);
-  
+
   {
   ostringstream os;
   os << state2;
@@ -207,7 +204,7 @@
 
   state.update (name1, SeqNo (10));
   state.update (name2, SeqNo (12));
-  state.update (name3, SeqNo (8));  
+  state.update (name3, SeqNo (8));
 
   string xml1 = "<state>"
     "<item action=\"update\"><name>1</name><seq><session>0</session><seqno>10</seqno></seq></item>"
@@ -221,7 +218,7 @@
   erase_all (xml1_test, "\n");
   BOOST_CHECK_EQUAL (xml1_test, xml1);
   }
-  
+
   state.remove (name2);
   string xml2 = "<state>"
     "<item action=\"update\"><name>1</name><seq><session>0</session><seqno>10</seqno></seq></item>"
@@ -237,11 +234,11 @@
   }
 
   ////////////  ////////////  ////////////  ////////////  ////////////  ////////////
-  
+
   DiffState state2;
   istringstream xml1_is (xml1);
   BOOST_CHECK_NO_THROW (xml1_is >> state2);
-  
+
   {
   ostringstream os;
   os << state2;
@@ -252,7 +249,7 @@
 
   istringstream xml2_is ("<state><item action=\"remove\"><name>2</name></item></state>");
   BOOST_CHECK_NO_THROW (xml2_is >> state2);
-  
+
   {
   ostringstream os;
   os << state2;
@@ -269,14 +266,14 @@
 
   DiffStatePtr head = make_shared<DiffState> ();
   root->setNext (head);
-  
+
   head->update (StdNameInfo::FindOrCreate ("3"), SeqNo (1));
   head->remove (StdNameInfo::FindOrCreate ("1"));
-  
+
   DiffStatePtr tail = make_shared<DiffState> ();
   head->setNext (tail);
 
-  tail->update (StdNameInfo::FindOrCreate ("3"), SeqNo (2));  
+  tail->update (StdNameInfo::FindOrCreate ("3"), SeqNo (2));
 
   {
   ostringstream os;
