diff --git a/applications/test/IndirectList2/IndirectList2.H b/applications/test/IndirectList2/IndirectList2.H
new file mode 100644
index 0000000000..9ce440695a
--- /dev/null
+++ b/applications/test/IndirectList2/IndirectList2.H
@@ -0,0 +1,162 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM 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.
+
+ OpenFOAM 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 OpenFOAM. If not, see .
+
+Class
+ Foam::IndirectList2
+
+Description
+ A List with indirect addressing.
+
+SourceFiles
+ IndirectListI.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IndirectList2_H
+#define IndirectList2_H
+
+#include "UIndirectList.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class IndirectListAddressing Declaration
+\*---------------------------------------------------------------------------*/
+
+//- A helper class for storing addresses.
+class IndirectListAddressing
+{
+ // Private data
+
+ //- Storage for the list addressing
+ List addressing_;
+
+
+ // Private Member Functions
+
+ //- Disallow default bitwise copy construct
+ IndirectListAddressing(const IndirectListAddressing&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const IndirectListAddressing&);
+
+protected:
+
+ // Constructors
+
+ //- Construct by copying the addressing array
+ explicit inline IndirectListAddressing(const UList& addr);
+
+ //- Construct by transferring addressing array
+ explicit inline IndirectListAddressing(const Xfer >& addr);
+
+
+ // Member Functions
+
+ // Access
+
+ //- Return the list addressing
+ inline const List& addressing() const;
+
+ // Edit
+
+ //- Reset addressing
+ inline void resetAddressing(const UList&);
+ inline void resetAddressing(const Xfer >&);
+
+};
+
+
+/*---------------------------------------------------------------------------*\
+ Class IndirectList2 Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class IndirectList2
+:
+ private IndirectListAddressing,
+ public UIndirectList
+{
+ // Private Member Functions
+
+ //- Disable default assignment operator
+ void operator=(const IndirectList2&);
+
+ //- Disable assignment from UIndirectList
+ void operator=(const UIndirectList&);
+
+public:
+
+ // Constructors
+
+ //- Construct given the complete list and the addressing array
+ inline IndirectList2(const UList&, const UList&);
+
+ //- Construct given the complete list and by transferring addressing
+ inline IndirectList2(const UList&, const Xfer >&);
+
+ //- Copy constructor
+ inline IndirectList2(const IndirectList2&);
+
+ //- Construct from UIndirectList
+ explicit inline IndirectList2(const UIndirectList&);
+
+
+ // Member Functions
+
+
+ // Access
+
+ //- Return the list addressing
+ using UIndirectList::addressing;
+
+ // Edit
+
+ //- Reset addressing
+ using IndirectListAddressing::resetAddressing;
+
+
+ // Member Operators
+
+ //- Assignment operator
+ using UIndirectList::operator=;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "IndirectList2I.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/test/IndirectList2/IndirectList2I.H b/applications/test/IndirectList2/IndirectList2I.H
new file mode 100644
index 0000000000..66b4e0de84
--- /dev/null
+++ b/applications/test/IndirectList2/IndirectList2I.H
@@ -0,0 +1,136 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM 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.
+
+ OpenFOAM 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 OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+
+inline Foam::IndirectListAddressing::IndirectListAddressing
+(
+ const UList& addr
+)
+:
+ addressing_(addr)
+{}
+
+
+inline Foam::IndirectListAddressing::IndirectListAddressing
+(
+ const Xfer >& addr
+)
+:
+ addressing_(addr)
+{}
+
+
+template
+inline Foam::IndirectList2::IndirectList2
+(
+ const UList& completeList,
+ const UList& addr
+)
+:
+ IndirectListAddressing(addr),
+ UIndirectList
+ (
+ completeList,
+ IndirectListAddressing::addressing()
+ )
+{}
+
+
+template
+inline Foam::IndirectList2::IndirectList2
+(
+ const UList& completeList,
+ const Xfer >& addr
+)
+:
+ IndirectListAddressing(addr),
+ UIndirectList
+ (
+ completeList,
+ IndirectListAddressing::addressing()
+ )
+{}
+
+
+template
+inline Foam::IndirectList2::IndirectList2
+(
+ const IndirectList2& lst
+)
+:
+ IndirectListAddressing(lst.addressing()),
+ UIndirectList
+ (
+ lst.completeList(),
+ IndirectListAddressing::addressing()
+ )
+{}
+
+
+template
+inline Foam::IndirectList2::IndirectList2
+(
+ const UIndirectList& lst
+)
+:
+ IndirectListAddressing(lst.addressing()),
+ UIndirectList
+ (
+ lst.completeList(),
+ IndirectListAddressing::addressing()
+ )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+inline const Foam::List&
+Foam::IndirectListAddressing::addressing() const
+{
+ return addressing_;
+}
+
+
+inline void Foam::IndirectListAddressing::resetAddressing
+(
+ const UList& addr
+)
+{
+ addressing_ = addr;
+}
+
+
+inline void Foam::IndirectListAddressing::resetAddressing
+(
+ const Xfer >& addr
+)
+{
+ addressing_.transfer(addr());
+}
+
+
+// ************************************************************************* //
diff --git a/applications/test/IndirectList2/IndirectListTest2.C b/applications/test/IndirectList2/IndirectListTest2.C
new file mode 100644
index 0000000000..14d7d4dbae
--- /dev/null
+++ b/applications/test/IndirectList2/IndirectListTest2.C
@@ -0,0 +1,101 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM 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.
+
+ OpenFOAM 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 OpenFOAM. If not, see .
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#include "IndirectList2.H"
+#include "IOstreams.H"
+
+using namespace Foam;
+
+template
+void printInfo(const ListType& lst)
+{
+ Info<< "addr: " << lst.addressing() << nl
+ << "list: " << lst << nl
+ << endl;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+int main(int argc, char *argv[])
+{
+ List completeList(10);
+
+ forAll(completeList, i)
+ {
+ completeList[i] = 0.1*i;
+ }
+
+ Info<< "raw : " << completeList << nl << endl;
+
+
+ List addresses(5);
+ addresses[0] = 1;
+ addresses[1] = 0;
+ addresses[2] = 7;
+ addresses[3] = 8;
+ addresses[4] = 5;
+
+ IndirectList2 idl1(completeList, addresses);
+
+ printInfo(idl1);
+
+ addresses[4] = 1;
+ addresses[3] = 0;
+ addresses[2] = 7;
+ addresses[1] = 8;
+ addresses[0] = 5;
+
+ idl1.resetAddressing(addresses.xfer());
+
+ printInfo(idl1);
+
+ // test copying
+ UIndirectList uidl1(idl1);
+ IndirectList2 idl2(uidl1);
+ IndirectList2 idl3(idl2);
+
+ printInfo(uidl1);
+
+ idl1.resetAddressing(List());
+// idl2.resetAddressing(List());
+
+ Info<<"after resetAddressing:" << nl << endl;
+
+ printInfo(uidl1);
+ printInfo(idl1);
+ printInfo(idl2);
+ printInfo(idl3);
+
+ Info<< "End\n" << endl;
+
+ return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/test/IndirectList2/Make/files b/applications/test/IndirectList2/Make/files
new file mode 100644
index 0000000000..c6dab96e20
--- /dev/null
+++ b/applications/test/IndirectList2/Make/files
@@ -0,0 +1,3 @@
+IndirectListTest2.C
+
+EXE = $(FOAM_USER_APPBIN)/IndirectListTest2
diff --git a/applications/test/IndirectList2/Make/options b/applications/test/IndirectList2/Make/options
new file mode 100644
index 0000000000..6a9e9810b3
--- /dev/null
+++ b/applications/test/IndirectList2/Make/options
@@ -0,0 +1,2 @@
+/* EXE_INC = -I$(LIB_SRC)/cfdTools/include */
+/* EXE_LIBS = -lfiniteVolume */