diff --git a/sortix/Makefile b/sortix/Makefile
index fc80dc0f..e4dea8d9 100644
--- a/sortix/Makefile
+++ b/sortix/Makefile
@@ -95,6 +95,7 @@ vgaterminal.o \
serialterminal.o \
descriptors.o \
device.o \
+refcount.o \
vga.o \
elf.o \
process.o \
diff --git a/sortix/refcount.cpp b/sortix/refcount.cpp
new file mode 100644
index 00000000..29cecd43
--- /dev/null
+++ b/sortix/refcount.cpp
@@ -0,0 +1,52 @@
+/*******************************************************************************
+
+ COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012.
+
+ This file is part of Sortix.
+
+ Sortix 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.
+
+ Sortix 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
+ Sortix. If not, see .
+
+ refcount.cpp
+ A class that implements reference counting.
+
+*******************************************************************************/
+
+#include "platform.h"
+#include "refcount.h"
+
+namespace Sortix
+{
+ Refcounted::Refcounted()
+ {
+ refcount = 1;
+ }
+
+ Refcounted::~Refcounted()
+ {
+ // It's OK to be deleted if our refcount is 1, it won't mess with any
+ // other owners that might need us.
+ ASSERT(refcount <= 1);
+ }
+
+ void Refcounted::Refer()
+ {
+ refcount++;
+ }
+
+ void Refcounted::Unref()
+ {
+ if ( !--refcount ) { delete this; }
+ }
+}
+
diff --git a/sortix/refcount.h b/sortix/refcount.h
new file mode 100644
index 00000000..9ceb79c6
--- /dev/null
+++ b/sortix/refcount.h
@@ -0,0 +1,47 @@
+/*******************************************************************************
+
+ COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2012.
+
+ This file is part of Sortix.
+
+ Sortix 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.
+
+ Sortix 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
+ Sortix. If not, see .
+
+ refcount.h
+ A class that implements reference counting.
+
+*******************************************************************************/
+
+#ifndef SORTIX_REFCOUNT_H
+#define SORTIX_REFCOUNT_H
+
+namespace Sortix
+{
+ class Refcounted
+ {
+ public:
+ Refcounted();
+ ~Refcounted();
+
+ public:
+ void Refer();
+ void Unref();
+
+ private:
+ size_t refcount;
+
+ };
+}
+
+#endif
+