diff --git a/linux-ramdump-parser-v2/sizes.py b/linux-ramdump-parser-v2/sizes.py
new file mode 100644
index 0000000000000000000000000000000000000000..db65602d81345e396284b9f9f06036f776a1f039
--- /dev/null
+++ b/linux-ramdump-parser-v2/sizes.py
@@ -0,0 +1,159 @@
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 and
+# only version 2 as published by the Free Software Foundation.
+#
+# 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.
+
+"""
+This module provides some convenience variables and functions for
+working with common sizes.
+
+>>> get_size_string(SZ_4K)
+'4K'
+>>> get_size_string(SZ_2G)
+'2G'
+>>> get_size_string(SZ_2G * 3)
+'2G*3'
+>>> get_size_string(SZ_2G + 1)
+'2147483649'
+>>> order_size_strings[8]
+'1M'
+
+"""
+
+import math
+from collections import OrderedDict
+
+SZ_1   = 0x00000001
+SZ_2   = 0x00000002
+SZ_4   = 0x00000004
+SZ_8   = 0x00000008
+SZ_16  = 0x00000010
+SZ_32  = 0x00000020
+SZ_64  = 0x00000040
+SZ_128 = 0x00000080
+SZ_256 = 0x00000100
+SZ_512 = 0x00000200
+
+SZ_1K   = 0x00000400
+SZ_2K   = 0x00000800
+SZ_4K   = 0x00001000
+SZ_8K   = 0x00002000
+SZ_16K  = 0x00004000
+SZ_32K  = 0x00008000
+SZ_64K  = 0x00010000
+SZ_128K = 0x00020000
+SZ_256K = 0x00040000
+SZ_512K = 0x00080000
+
+SZ_1M   = 0x00100000
+SZ_2M   = 0x00200000
+SZ_4M   = 0x00400000
+SZ_8M   = 0x00800000
+SZ_16M  = 0x01000000
+SZ_32M  = 0x02000000
+SZ_64M  = 0x04000000
+SZ_128M = 0x08000000
+SZ_256M = 0x10000000
+SZ_512M = 0x20000000
+
+SZ_1G = 0x40000000
+SZ_2G = 0x80000000
+
+size_strings = OrderedDict((
+    (SZ_1, "1"),
+    (SZ_2, "2"),
+    (SZ_4, "4"),
+    (SZ_8, "8"),
+    (SZ_16, "16"),
+    (SZ_32, "32"),
+    (SZ_64, "64"),
+    (SZ_128, "128"),
+    (SZ_256, "256"),
+    (SZ_512, "512"),
+    (SZ_1K, "1K"),
+    (SZ_2K, "2K"),
+    (SZ_4K, "4K"),
+    (SZ_8K, "8K"),
+    (SZ_16K, "16K"),
+    (SZ_32K, "32K"),
+    (SZ_64K, "64K"),
+    (SZ_128K, "128K"),
+    (SZ_256K, "256K"),
+    (SZ_512K, "512K"),
+    (SZ_1M, "1M"),
+    (SZ_2M, "2M"),
+    (SZ_4M, "4M"),
+    (SZ_8M, "8M"),
+    (SZ_16M, "16M"),
+    (SZ_32M, "32M"),
+    (SZ_64M, "64M"),
+    (SZ_128M, "128M"),
+    (SZ_256M, "256M"),
+    (SZ_512M, "512M"),
+    (SZ_1G, "1G"),
+    (SZ_2G, "2G"),
+))
+
+def is_power_of_two(n):
+    """
+    >>> is_power_of_two(1024)
+    True
+    >>> is_power_of_two(0)
+    False
+    >>> is_power_of_two(1 << 9)
+    True
+    """
+    return n != 0 and ((n & (n - 1)) == 0)
+
+def get_size_string(size):
+    """
+    >>> get_size_string(4096)
+    '4K'
+    >>> get_size_string(0x02000000)
+    '32M'
+    >>> get_size_string(24576)
+    '8K*3'
+    >>> get_size_string(393216)
+    '128K*3'
+    """
+    if size in size_strings:
+        return size_strings[size]
+    for s in reversed(size_strings):
+        if s < SZ_1K: break
+        if (size % s) == 0:
+            b = size / s
+            return "%s*%d" % (size_strings[s], b)
+    return "%d" % size
+
+def get_order(size):
+    """
+    >>> get_order(SZ_4K)
+    0
+    >>> get_order(SZ_8K)
+    1
+    >>> get_order(SZ_16K)
+    2
+    >>> get_order(SZ_1M)
+    8
+    >>> get_order(SZ_2M)
+    9
+    >>> get_order(SZ_2G)
+    19
+    """
+    if not is_power_of_two(size):
+        raise ValueError('ERROR: Number is not a power of 2: %x' % (size))
+    return int(math.log(size, 2) - math.log(SZ_4K, 2))
+
+order_size_strings = {}
+for order in range(20):
+    order_size_strings[order] = size_strings[SZ_4K << order]
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()