diff --git a/textarchive/lib/TA/Hasher.pm b/textarchive/lib/TA/Hasher.pm
index 2025cb03282f2ad7df7983827a3141d3e6599c21..6948b34ddd931ad20725fac6b2d062e0e9cf280b 100644
--- a/textarchive/lib/TA/Hasher.pm
+++ b/textarchive/lib/TA/Hasher.pm
@@ -9,7 +9,7 @@ package TA::Hasher;
 use Data::Dumper;
 $Data::Dumper::Indent= 1;
 
-my %known_algorithms= map { $_ => 1 } qw(NULL S3C1L S3C2L P3C3L P3C2L P3C1L);
+my %known_algorithms= map { $_ => 1 } qw(NULL S3C1L S3C2L P3C3L P3C2L P3C1L P4C1L);
 
 sub new
 {
@@ -51,6 +51,10 @@ sub new
   {
     $obj->{'mkpo'}= \&TA::Hasher::P3C1L::mkpo;
   }
+  elsif ($algorithm eq 'P4C1L')
+  {
+    $obj->{'mkpo'}= \&TA::Hasher::P4C1L::mkpo;
+  }
   else
   {
     $obj->{'mkpo'}= \&TA::Hasher::NULL::mkpo;
@@ -217,6 +221,23 @@ sub mkpo
   return { 'L' => \@L };
 }
 
+package TA::Hasher::P4C1L;
+
+sub mkpo
+{
+  my $S= shift;
+
+  return undef unless (defined ($S));
+
+  my @L;
+
+  if ($S =~ m#^(.{1,4})#)
+       { @L= ( $1 ); }
+  else { @L= ( $S ); }
+
+  return { 'L' => \@L };
+}
+
 1;
 
 __END__
@@ -227,5 +248,7 @@ __END__
 
 =item check_path ($mkpo)
 
+=item method to register hasher algorithm
+
 =back